0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【HarmonyOS HiSpark Wi-Fi IoT 套件試用連載】八:天氣顯示

開(kāi)發(fā)板試用精選 ? 來(lái)源:開(kāi)發(fā)板試用 ? 作者:電子發(fā)燒友論壇 ? 2022-11-02 14:38 ? 次閱讀
本文來(lái)源電子發(fā)燒友社區(qū),作者:李元江, 帖子地址:https://bbs.elecfans.com/jishu_2026438_1_1.html


上一次帖子,已經(jīng)通過(guò)網(wǎng)絡(luò)獲取天氣數(shù)據(jù),但是還沒(méi)顯示到顯示屏上。今天的帖子我寫(xiě)的是關(guān)于如何取模天氣圖片,并顯示天氣圖標(biāo)和天氣數(shù)據(jù)。
一、ssd1306顯存填充
顯示板使用的OLED驅(qū)動(dòng)芯片為SSD1306,我們來(lái)看看這款芯片的顯存和該顯存填充方式。下面是從SSD1303芯片手冊(cè)上的截圖,可以看得出它的顯存是大小為128*64bit的RAM,并且分成為8頁(yè),PAGE0-PAGE7。顯示板像素點(diǎn)大小為128*64,所以一個(gè)像素點(diǎn)對(duì)應(yīng)RAM中的1bit。

230447jmohlb5bims3y834.jpg
往RAM的某一位寫(xiě)入1或者0,該位對(duì)應(yīng)的像素點(diǎn)就顯示亮點(diǎn)或者不顯示。但是它是按照什么順序?qū)懭霐?shù)據(jù)的。下面也是從芯片手冊(cè)上的截圖。
230515enb3nrz6j3by6y3b.jpg
可以看得出RAM填充順序了 ,寫(xiě)入一個(gè)字節(jié)數(shù)據(jù)時(shí),最低位數(shù)據(jù)寫(xiě)入一頁(yè)中最上面那行,最高位寫(xiě)入一頁(yè)中最下面那行。這樣,使用取模軟件取模圖片或者字符時(shí),我們才能知道按照什么順序取模。之后再寫(xiě)相應(yīng)代碼,按照順序把取模數(shù)據(jù)寫(xiě)入RAM中。

二、天氣圖標(biāo)取模
首先當(dāng)然是先在網(wǎng)絡(luò)下載我們需要的天氣圖標(biāo),大小看你像顯示多大區(qū)域的圖標(biāo),我的是48*48大小圖標(biāo),在OLED上顯示大小也是48*48。
230801gqbtzvkkbz5sogbf.jpg

我使用的是下面這款取模軟件,我覺(jué)得圖標(biāo)取模不太好,不知道大家有沒(méi)有推薦的。需要根據(jù)SSD1306進(jìn)行取模軟件的設(shè)置。比較重要的是取模方式的選擇,這是跟SSD1306顯示填充順序?qū)?yīng)的,我們需要選擇列行式。其他數(shù)據(jù)點(diǎn)陣選擇48,自定義格式選擇C51。
230759z8lsvl6ifg7214xv.jpg

選擇晴圖標(biāo),生成如下數(shù)組。

230757x7a019cqogigi6if.jpg
上面的小花就是太陽(yáng)圖標(biāo),是有點(diǎn)丑,先湊合用吧。

二、軟件設(shè)計(jì)
1、顯示天氣圖標(biāo)
我們已經(jīng)按照SSD1306顯存填充順序,取模好圖片數(shù)據(jù),接下來(lái)按照順序把數(shù)據(jù)寫(xiě)入RAM就行了,代碼如下。
  1. typedef enum
  2. {
  3. QINGLOGO =0,
  4. YINGLOGO,
  5. DUOYULOGO,
  6. YULOGO,
  7. LEIYULOGO,
  8. XUELOGO,
  9. }WEATHER_TYPE;
  10. void OLED_ShowWeather(uint8_t x,uint8_t y,WEATHER_TYPE type)
  11. {
  12. unsigned char (*temp)[48];
  13. //if(type ==qinglogo )
  14. //temp=Qing48;
  15. switch(type)
  16. {
  17. case QINGLOGO: temp=Qing48;break;
  18. case YINGLOGO: temp=Yin48;break;
  19. case YULOGO: temp=Yu48;break;
  20. case LEIYULOGO:temp=LeiYu48;break;
  21. case DUOYULOGO:temp=DuoYun48;break;
  22. case XUELOGO: temp=Xue48;break;
  23. default :
  24. temp=Qing48;
  25. break;
  26. }
  27. //OledSetPosition(x,y);
  28. for(uint8_t i=0;i<6;i++){
  29. OledSetPosition(x,y+i);
  30. for(uint8_t j = 0;j<48;j++){
  31. WriteData(temp[i][j]);
  32. }
  33. }
  34. }
復(fù)制代碼
2、按鍵任務(wù)
OLED顯示板上的兩個(gè)按鍵,主要用于界面切換、獲取實(shí)時(shí)時(shí)間、天氣數(shù)據(jù)。增加了按鍵任務(wù),主要進(jìn)行這兩個(gè)按鍵的處理。右邊按鍵,按下后可以切換界面,現(xiàn)在設(shè)置有四個(gè)界面。在時(shí)間顯示界面按下左鍵,會(huì)獲取實(shí)時(shí)時(shí)間。在天氣顯示界面,按下左鍵會(huì)獲取實(shí)時(shí)天氣。
  1. #include
  2. #include
  3. #include
  4. #include "ohos_init.h"
  5. #include "cmsis_os2.h"
  6. #include "wifiiot_gpio.h"
  7. #include "wifiiot_gpio_ex.h"
  8. #include "wifiiot_pwm.h"
  9. #include "wifiiot_adc.h"
  10. ?
  11. #include "oled_ssd1306.h"
  12. ?
  13. #defineanalog_KEY_CHAN_NAME WIFI_IOT_ADC_CHANNEL_2
  14. ?
  15. typedef enum{
  16. TIMESCREEN=0,
  17. NOWSCREEN,
  18. TOSCREEN,
  19. ATOSCREEN,
  20. } SCREEN_STATUS;
  21. extern SCREEN_STATUS Now_Screen ;
  22. extern SCREEN_STATUS Last_Screen ;
  23. ?
  24. typedef enum{
  25. GET_NORMAL =0 ,
  26. GET_PROPRESS,
  27. GET_SUC,
  28. GET_FAIL,
  29. }GET_STATUS;
  30. ?
  31. GET_STATUS Get_Status = GET_NORMAL;
  32. GET_STATUS Last_Get_Status = GET_NORMAL;
  33. ?
  34. extern void getNtpTime(void);
  35. extern bool getWeather(void);
  36. ?
  37. static float ConvertToVoltage(unsigned short data)
  38. {
  39. return (float)data * 1.8 * 4 / 4096; /* adc code equals: voltage/4/1.8*4096*/
  40. }
  41. ?
  42. static void KeyTask(void *arg)
  43. {
  44. (void)arg;
  45. unsigned short data = 0;
  46. ?
  47. GpioInit();
  48. static bool keyflag = false;
  49. while(1)
  50. {
  51. AdcRead(ANALOG_KEY_CHAN_NAME, &data, WIFI_IOT_ADC_EQU_MODEL_4, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0);
  52. float voltage = ConvertToVoltage(data);
  53. ?
  54. if((voltage>0.45 && voltage<0.65)&&(!keyflag))
  55. {
  56. keyflag = true;
  57. //OledShowString(16,7,"Sync time...",1);
  58. //getNtpTime();
  59. //OledFillScreen(0);
  60. switch (Now_Screen){
  61. case TIMESCREEN:
  62. //OledShowString(16,7,"Sync time...",1);
  63. Get_Status = GET_PROPRESS;
  64. getNtpTime();
  65. //OledFillScreen(0);
  66. Get_Status = GET_SUC;
  67. break;
  68. case NOWSCREEN:
  69. //OledShowString(0,7,"Get Weather...",1);
  70. Get_Status = GET_PROPRESS;
  71. if(getWeather())
  72. //OledFillScreen(0);
  73. Get_Status = GET_SUC;
  74. else
  75. {
  76. //OledShowString(0,7,"Get fail...",1);
  77. Get_Status = GET_FAIL;
  78. }
  79. break;
  80. case TOSCREEN:
  81. Get_Status = GET_PROPRESS;
  82. if(getWeather())
  83. Get_Status = GET_SUC;
  84. else
  85. {
  86. Get_Status = GET_FAIL;
  87. }
  88. break;
  89. case ATOSCREEN:
  90. Get_Status = GET_PROPRESS;
  91. if(getWeather())
  92. Get_Status = GET_SUC;
  93. else
  94. {
  95. Get_Status = GET_FAIL;
  96. }
  97. break;
  98. ?
  99. default:
  100. break;
  101. }
  102. }
  103. else if((voltage>0.9 && voltage<1)&&(!keyflag))
  104. {
  105. keyflag = true;
  106. Now_Screen ++;
  107. if(Now_Screen > ATOSCREEN)
  108. {
  109. Now_Screen = TIMESCREEN;
  110. }
  111. }
  112. ?
  113. if((!(voltage>0.45 && voltage<0.65)) && (!(voltage>0.9 && voltage<1))) {
  114. keyflag = false;
  115. }
  116. ?
  117. usleep(300000);
  118. }
  119. }
  120. ?
  121. static void KeyTaskHandle(void)
  122. {
  123. osThreadAttr_t attr;
  124. attr.name = "KeyTask";
  125. attr.attr_bits = 0U;
  126. attr.cb_mem = NULL;
  127. attr.cb_size = 0U;
  128. attr.stack_mem = NULL;
  129. attr.stack_size = 4096;
  130. attr.priority = osPriorityNormal+2;
  131. ?
  132. if (osThreadNew(KeyTask, NULL, &attr) == NULL) {
  133. printf("[KeyTaskHandle] Falied to create KeyTask!n");
  134. }
  135. }
  136. APP_FEATURE_INIT(KeyTaskHandle);
復(fù)制代碼
3、 OLED任務(wù)修改
修改oled_demo.c內(nèi)容。增加頁(yè)面切換,獲取時(shí)間、天氣數(shù)據(jù)情況提示,顯示天氣數(shù)據(jù)和天氣圖標(biāo)。

  1. typedef enum{
  2. TIMESCREEN=0,
  3. NOWSCREEN,
  4. TOSCREEN,
  5. ATOSCREEN,
  6. } SCREEN_STATUS;
  7. SCREEN_STATUS Now_Screen = TIMESCREEN;
  8. SCREEN_STATUS Last_Screen = TIMESCREEN;
  9. ?
  10. typedef enum{
  11. GET_NORMAL =0 ,
  12. GET_PROPRESS,
  13. GET_SUC,
  14. GET_FAIL,
  15. }GET_STATUS;
  16. extern GET_STATUS Get_Status ;
  17. extern GET_STATUS Last_Get_Status ;
  18. ?
  19. static uint8_t i=0;
  20. ?
  21. static void TimeScreenDisp(void)
  22. {
  23. //OledShow
  24. rtc_time_t mData;
  25. OLED_ShowCHinese(0,3,0);//溫
  26. OLED_ShowCHinese(16,3,2);//度
  27. OledShowChar(32,3,':',2);
  28. sprintf((char *)TimeStr,"%02d",
  29. (uint32_t)temperature);
  30. OledShowString(40,3,(char *)TimeStr,2);
  31. OLED_ShowCHinese(64,3,1);//濕
  32. OLED_ShowCHinese(80,3,2);//度
  33. OledShowChar(96,3,':',2);
  34. sprintf((char *)TimeStr,"%02d",
  35. (uint32_t)humidity);
  36. OledShowString(104,3,(char *)TimeStr,2);
  37. covUnixTimeStp2Beijing(timedata, &mData);
  38. sprintf((char *)TimeStr,"%04d-%02d-%02d",
  39. mData.ui8Year, mData.ui8Month, mData.ui8DayOfMonth);
  40. OledShowString(24,0,(char *)TimeStr,1);
  41. sprintf((char *)TimeStr,"%02d:%02d:%02d",
  42. mData.ui8Hour,mData.ui8Minute,mData.ui8Second);
  43. OledShowString(32,1,(char *)TimeStr,1);
  44. ?
  45. if(Get_Status != Last_Get_Status)
  46. {
  47. Last_Get_Status = Get_Status;
  48. switch ( Get_Status)
  49. {
  50. case GET_NORMAL:
  51. break;
  52. case GET_PROPRESS:
  53. OledShowString(16,7,"Sync time...",1);
  54. break;
  55. case GET_SUC:
  56. OledClearString(16,7,"Sync time...",1);
  57. OledShowString(16,7,"Sync Suc...",1);
  58. break;
  59. case GET_FAIL:
  60. OledClearString(16,7,"Sync time...",1);
  61. OledShowString(16,7,"Sync fail...",1);
  62. break;
  63. default:
  64. break;
  65. }
  66. }
  67. }
  68. ?
  69. static void DispWeather(uint8_t x, uint8_t y ,uint8_t code){
  70. switch(code)
  71. {
  72. case 0:
  73. case 1:
  74. case 2:
  75. case 3:
  76. OLED_ShowWeather(x,y,QINGLOGO);
  77. break;
  78. case 4:
  79. case 5:
  80. case 6:
  81. case 7:
  82. case 8:
  83. OLED_ShowWeather(x,y,DUOYULOGO);
  84. break;
  85. case 9:
  86. case 10:
  87. OLED_ShowWeather(x,y,YINGLOGO);
  88. break;
  89. case 11:
  90. case 12:
  91. ?
  92. OLED_ShowWeather(x,y,LEIYULOGO);
  93. break;
  94. case 13:
  95. case 14:
  96. case 15:
  97. case 16:
  98. case 17:
  99. case 18:
  100. case 19:
  101. OLED_ShowWeather(x,y,YULOGO);
  102. break;
  103. case 20:
  104. case 21:
  105. case 22:
  106. case 23:
  107. case 24:
  108. case 25:
  109. OLED_ShowWeather(x,y,XUELOGO);
  110. break;
  111. case 30:
  112. //OLED_ShowWeather(x,y,YULOGO);
  113. //break;
  114. default:
  115. OLED_ShowWeather(x,y,QINGLOGO);
  116. break;
  117. }
  118. ?
  119. }
  120. ?
  121. extern weather weatherValue;
  122. static voidWeatherDisp(SCREEN_STATUS Screen){
  123. switch (Screen)
  124. {
  125. case NOWSCREEN:
  126. DispWeather(5, 1 ,weatherValue.nowcode);
  127. OLED_ShowCHinese(56,0,9);//今
  128. OLED_ShowCHinese(72,0,12);//天
  129. sprintf((char *)DispStr,"%02d",
  130. (uint32_t)weatherValue.nowtemp);
  131. OledShowString(60,5,(char *)DispStr,2);
  132. OLED_ShowCHinese(76,5,13);//天
  133. sprintf((char *)DispStr,"%02d/%02d",
  134. (uint32_t)weatherValue.low[Screen-1],(uint32_t)weatherValue.high[Screen-1]);
  135. OledShowString(60,3,(char *)DispStr,2);
  136. sprintf((char *)DispStr,"%d%%",
  137. (uint32_t)weatherValue.humi[Screen-1]);
  138. OledShowString(100,5,(char *)DispStr,2);
  139. break;
  140. case TOSCREEN:
  141. DispWeather(5, 1 ,weatherValue.code[Screen-1]);
  142. OLED_ShowCHinese(56,0,10);//明
  143. OLED_ShowCHinese(72,0,12);//天
  144. sprintf((char *)DispStr,"%02d/%02d",
  145. (uint32_t)weatherValue.low[Screen-1],(uint32_t)weatherValue.high[Screen-1]);
  146. OledShowString(60,3,(char *)DispStr,2);
  147. sprintf((char *)DispStr,"%d%%",
  148. (uint32_t)weatherValue.humi[Screen-1]);
  149. OledShowString(70,5,(char *)DispStr,2);
  150. break;
  151. case ATOSCREEN:
  152. DispWeather(5, 1 ,weatherValue.code[Screen-1]);
  153. OLED_ShowCHinese(56,0,11);//后
  154. OLED_ShowCHinese(72,0,12);//天
  155. sprintf((char *)DispStr,"%02d/%02d",
  156. (uint32_t)weatherValue.low[Screen-1],(uint32_t)weatherValue.high[Screen-1]);
  157. OledShowString(60,3,(char *)DispStr,2);
  158. sprintf((char *)DispStr,"%d%%",
  159. (uint32_t)weatherValue.humi[Screen-1]);
  160. OledShowString(70,5,(char *)DispStr,2);
  161. break;
  162. default:
  163. break;
  164. }
  165. if(Get_Status != Last_Get_Status)
  166. {
  167. Last_Get_Status = Get_Status;
  168. switch ( Get_Status)
  169. {
  170. case GET_NORMAL:
  171. break;
  172. case GET_PROPRESS:
  173. OledShowString(0,7,"Get Weather...",1);
  174. break;
  175. case GET_SUC:
  176. OledClearString(0,7,"Get Weather...",1);
  177. OledShowString(0,7,"Get Suc...",1);
  178. i=0;
  179. break;
  180. case GET_FAIL:
  181. OledClearString(0,7,"Get Weather...",1);
  182. OledShowString(0,7,"Get fail...",1);
  183. i=0;
  184. break;
  185. default:
  186. break;
  187. }
  188. }
  189. }
  190. static void OledTask(void *arg)
  191. {
  192. (void)arg;
  193. GpioInit();
  194. OledInit();
  195. OledFillScreen(0x00);
  196. while (1) {
  197. if(Now_Screen != Last_Screen)
  198. {
  199. Last_Screen = Now_Screen;
  200. OledFillScreen(0);
  201. Get_Status = GET_NORMAL;
  202. Last_Get_Status = GET_NORMAL;
  203. i=0;
  204. }
  205. ?
  206. if((Get_Status == GET_FAIL) ||(Get_Status == GET_SUC))
  207. {
  208. i++;
  209. if(i > 20)
  210. {
  211. Get_Status = GET_NORMAL;
  212. i=0;
  213. ?
  214. switch(Now_Screen){
  215. case TIMESCREEN:
  216. OledClearString(16,7,"Sync time...",1);
  217. break;
  218. case NOWSCREEN:
  219. case TOSCREEN:
  220. ?
  221. case ATOSCREEN:
  222. printf("clear oled i = %dn",i);
  223. OledClearString(0,7,"Get Weather...",1);
  224. break;
  225. default :
  226. break;
  227. ?
  228. }
  229. }
  230. }
  231. ?
  232. switch (Now_Screen){
  233. ?
  234. case TIMESCREEN:
  235. TimeScreenDisp();
  236. break;
  237. ?
  238. case NOWSCREEN:
  239. WeatherDisp(NOWSCREEN);
  240. break;
  241. ?
  242. case TOSCREEN:
  243. WeatherDisp(TOSCREEN);
  244. break;
  245. ?
  246. case ATOSCREEN:
  247. WeatherDisp(ATOSCREEN);
  248. break;
  249. ?
  250. default:
  251. break;
  252. }
  253. usleep(100000);
  254. }
  255. }
復(fù)制代碼
4、加入rtc.c
現(xiàn)在時(shí)間調(diào)整是通過(guò)每一秒時(shí)間戳加1,再把時(shí)間戳轉(zhuǎn)化為北京時(shí)間,到達(dá)時(shí)間的更新。為了減少任務(wù)中因?yàn)槠渌瘮?shù)存在,增加時(shí)間誤差,所以單獨(dú)創(chuàng)建一個(gè)任務(wù)來(lái)進(jìn)行時(shí)間戳的調(diào)整。
  1. #include
  2. #include
  3. #include
  4. ?
  5. #include "ohos_init.h"
  6. #include "cmsis_os2.h"
  7. uint32_t timedata=1608362368;
  8. ?
  9. static void RtcTask(void *arg)
  10. {
  11. (void)arg;
  12. while(1)
  13. {
  14. timedata++;
  15. sleep(1);
  16. }
  17. }
  18. ?
  19. static void RtcTaskHandle(void)
  20. {
  21. osThreadAttr_t attr;
  22. attr.name = "RtcTask";
  23. attr.attr_bits = 0U;
  24. attr.cb_mem = NULL;
  25. attr.cb_size = 0U;
  26. attr.stack_mem = NULL;
  27. attr.stack_size = 512;
  28. attr.priority = osPriorityNormal;
  29. ?
  30. if (osThreadNew(RtcTask, NULL, &attr) == NULL) {
  31. printf("[RtcTaskHandle] Falied to create KeyTask!n");
  32. }
  33. }
  34. APP_FEATURE_INIT(RtcTaskHandle);
復(fù)制代碼


5、修改BUILD.gn
修改OLED文件夾下的BUILD.gn文件,sources中加入keytask.c
  1. sources = [
  2. "oled_demo.c",
  3. "oled_ssd1306.c",
  4. "timeconv.c",
  5. "envrionment_demo.c",
  6. "aht20.c",
  7. "wifi_connecter.c",
  8. "getNTP.c",
  9. "getweather.c",
  10. "cjsonparse.c",
  11. "keytask.c",
  12. "rtc.c"
  13. ]
復(fù)制代碼
三、結(jié)果演示
按下右邊按鍵,可以切換界面,有四個(gè)界面,分別為時(shí)間顯示界面,今天、明天、后天天氣顯示界面。在時(shí)間顯示界面按下左鍵,會(huì)獲取實(shí)時(shí)時(shí)間,在天氣顯示界面,按下左鍵會(huì)獲取實(shí)時(shí)天氣,并且顯示天氣獲取情況提示。
231310ra9m49i9z4x4zf8e.jpg?231311ou0uw807ox6p0j77.jpg?231313ak03o957e9yy37r7.jpg?231314yw30xh0iojj0oob3.jpg?231315e660zeor3a53xs6r.jpg
四、總結(jié)
這一篇先寫(xiě)到這里,下一篇是關(guān)于通過(guò)一個(gè)公網(wǎng)的中轉(zhuǎn)服務(wù)器,進(jìn)行wifiiot和手機(jī)之間的遠(yuǎn)程數(shù)據(jù)傳輸。
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • wi-fi
    +關(guān)注

    關(guān)注

    14

    文章

    2097

    瀏覽量

    124242
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1966

    瀏覽量

    29963
  • HiSpark
    +關(guān)注

    關(guān)注

    1

    文章

    156

    瀏覽量

    6895
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Wi-Fi 7與Wi-Fi 6E有什么區(qū)別

    也許很多人還在考慮是否要將使用的Wi-Fi設(shè)備升級(jí)到Wi-Fi 6或Wi-Fi 6E,而這些標(biāo)準(zhǔn)的繼任者卻已經(jīng)開(kāi)始“登堂入室”了。Wi-Fi 7是新一代
    的頭像 發(fā)表于 11-07 11:38 ?304次閱讀

    IR900 Wi-Fi聯(lián)網(wǎng)的配置過(guò)程

    , 通過(guò)SSID掃描可以查看;輸入密碼,點(diǎn)擊保存; 在SSID掃描頁(yè)面中查看是否連接成功, 如果沒(méi)有請(qǐng)檢查認(rèn)證方式、加密方式、密碼是否輸入正確; Wi-Fi掃描顯示“已連接”,進(jìn)入“快速向?qū)?新建WAN
    發(fā)表于 07-25 06:09

    未來(lái)的Wi-Fi路由器

    轉(zhuǎn)載自——鐘林談芯 沒(méi)有創(chuàng)新就沒(méi)有未來(lái),Wi-Fi路由器也是如此。 進(jìn)入2024年以后,Wi-Fi路由器市場(chǎng)變得更加艱難,利潤(rùn)大幅下滑,BOM成本價(jià)高于市場(chǎng)價(jià),接不接訂單,都陷入兩難。 國(guó)內(nèi)主芯片
    的頭像 發(fā)表于 06-20 15:32 ?371次閱讀

    DA16200 超低功耗 Wi-Fi 模塊開(kāi)發(fā)套件 Pro數(shù)據(jù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《DA16200 超低功耗 Wi-Fi 模塊開(kāi)發(fā)套件 Pro數(shù)據(jù)手冊(cè).rar》資料免費(fèi)下載
    發(fā)表于 05-30 17:53 ?1次下載
    DA16200 超低功耗 <b class='flag-5'>Wi-Fi</b> 模塊開(kāi)發(fā)<b class='flag-5'>套件</b> Pro數(shù)據(jù)手冊(cè)

    DA16200 超低功耗 Wi-Fi 模塊開(kāi)發(fā)套件數(shù)據(jù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《DA16200 超低功耗 Wi-Fi 模塊開(kāi)發(fā)套件數(shù)據(jù)手冊(cè).rar》資料免費(fèi)下載
    發(fā)表于 05-30 17:13 ?0次下載
    DA16200 超低功耗 <b class='flag-5'>Wi-Fi</b> 模塊開(kāi)發(fā)<b class='flag-5'>套件</b>數(shù)據(jù)手冊(cè)

    華為獲得全球首個(gè)國(guó)際Wi-Fi聯(lián)盟WFA企業(yè)級(jí)Wi-Fi 7認(rèn)證!

    Wi-Fi聯(lián)盟已發(fā)布Wi-Fi 7認(rèn)證標(biāo)準(zhǔn),華為是第一批送測(cè)廠商,獲得業(yè)界首個(gè)企業(yè)級(jí)Wi-Fi 7 的Wi-Fi聯(lián)盟官方認(rèn)證。
    的頭像 發(fā)表于 04-28 10:17 ?600次閱讀
    華為獲得全球首個(gè)國(guó)際<b class='flag-5'>Wi-Fi</b>聯(lián)盟WFA企業(yè)級(jí)<b class='flag-5'>Wi-Fi</b> 7認(rèn)證!

    驗(yàn)證物聯(lián)網(wǎng)Wi-Fi HaLow用例的MM6108-EKH08開(kāi)發(fā)套件來(lái)啦

    驗(yàn)證物聯(lián)網(wǎng)Wi-Fi HaLow用例的MM6108-EKH08開(kāi)發(fā)套件來(lái)啦 MM6108-EKH08開(kāi)發(fā)套件專為驗(yàn)證物聯(lián)網(wǎng)Wi-Fi HaLow用例而設(shè)計(jì)。該
    的頭像 發(fā)表于 04-11 12:01 ?1625次閱讀
    驗(yàn)證物聯(lián)網(wǎng)<b class='flag-5'>Wi-Fi</b> HaLow用例的MM6108-EKH08開(kāi)發(fā)<b class='flag-5'>套件</b>來(lái)啦

    Wi-Fi 7與Wi-Fi 6的相關(guān)知識(shí)科普

    科普:Wi-Fi 7 vs. Wi-Fi 6,青出于藍(lán)
    的頭像 發(fā)表于 03-12 10:59 ?670次閱讀
    <b class='flag-5'>Wi-Fi</b> 7與<b class='flag-5'>Wi-Fi</b> 6的相關(guān)知識(shí)科普

    Wi-Fi的誕生與發(fā)展

    和5GHz兩個(gè)頻段,承載著不斷增長(zhǎng)的網(wǎng)絡(luò)需求。ABIResearch顯示,2022年Wi-Fi上傳流量激增80%,Wi-Fi數(shù)據(jù)流量已超過(guò)蜂窩流量,且成為流量增量貢
    的頭像 發(fā)表于 03-07 08:26 ?1088次閱讀
    <b class='flag-5'>Wi-Fi</b>的誕生與發(fā)展

    Wi-Fi HaLow和傳統(tǒng)Wi-Fi的區(qū)別

    Wi-Fi HaLow和傳統(tǒng)Wi-Fi的區(qū)別? Wi-Fi是一種無(wú)線網(wǎng)絡(luò)技術(shù),可以連接到互聯(lián)網(wǎng)或局域網(wǎng),為用戶提供無(wú)線上網(wǎng)的便利。隨著科技的發(fā)展和互聯(lián)網(wǎng)的普及,Wi-Fi也在不斷演進(jìn)和
    的頭像 發(fā)表于 02-02 15:28 ?1054次閱讀

    康普攜手Wi-Fi聯(lián)盟,RUCKUS Wi-Fi 7系列接入點(diǎn)成Wi-Fi

     康普高級(jí)副總裁兼網(wǎng)絡(luò)、智能蜂窩和安全解決方案總裁Bart Giordano對(duì)此表示: “我們非常榮幸能與Wi-Fi Alliance形成長(zhǎng)期合作伙伴關(guān)系,將我們的RUCKUS Wi-Fi 7 接入點(diǎn)平臺(tái)作為Wi-Fi CERT
    的頭像 發(fā)表于 01-23 14:10 ?679次閱讀

    BT Wi-Fi模式是否可以通過(guò)ModustoolBox對(duì)套件進(jìn)行編程來(lái)實(shí)現(xiàn)?

    想配置用于分析 CYW43439 的 CY8CPROTO-062S2-43439 原型開(kāi)發(fā)套件。 瀏覽文檔我無(wú)法弄清楚如何在不同的 Wi-Fi 和藍(lán)牙模式(電源模式、連接模式等)下配置套件。 在
    發(fā)表于 01-22 06:19

    Wi-Fi 6和Wi-Fi 5之間有哪些區(qū)別呢?

    Wi-Fi 6和Wi-Fi 5之間有哪些區(qū)別呢? Wi-Fi 6和Wi-Fi 5是無(wú)線局域網(wǎng)標(biāo)準(zhǔn)的兩個(gè)版本,它們之間存在很多區(qū)別。Wi-Fi
    的頭像 發(fā)表于 12-09 16:09 ?2074次閱讀

    什么是2.4 GHz Wi-Fi? 如何提升2.4 GHz Wi-Fi的性能?

    什么是2.4 GHz Wi-Fi?2.4 GHz Wi-Fi的優(yōu)勢(shì) 2.4 GHz Wi-Fi的劣勢(shì) 如何提升2.4 GHz Wi-Fi的性能?2.4 GHz和5 GHz
    的頭像 發(fā)表于 11-27 17:09 ?2249次閱讀

    什么是Wi-Fi 6?什么是Wi-Fi 6E?什么是最適合我的應(yīng)用的?

    自 1999 年 Wi-Fi 聯(lián)盟成立以來(lái),Wi-Fi 技術(shù)不斷進(jìn)步,以滿足對(duì)更快速度和支持更多設(shè)備的日益增長(zhǎng)的需求。
    的頭像 發(fā)表于 11-20 09:23 ?1081次閱讀
    什么是<b class='flag-5'>Wi-Fi</b> 6?什么是<b class='flag-5'>Wi-Fi</b> 6E?什么是最適合我的應(yīng)用的?