0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】八:天气显示

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-02 14:38 次阅读
本文来源电子发烧友社区,作者:李元江, 帖子地址:https://bbs.elecfans.com/jishu_2026438_1_1.html


上一次帖子,已经通过网络获取天气数据,但是还没显示到显示屏上。今天的帖子我写的是关于如何取模天气图片,并显示天气图标和天气数据。
一、ssd1306显存填充
显示板使用的OLED驱动芯片为SSD1306,我们来看看这款芯片的显存和该显存填充方式。下面是从SSD1303芯片手册上的截图,可以看得出它的显存是大小为128*64bit的RAM,并且分成为8页,PAGE0-PAGE7。显示板像素点大小为128*64,所以一个像素点对应RAM中的1bit。

230447jmohlb5bims3y834.jpg
往RAM的某一位写入1或者0,该位对应的像素点就显示亮点或者不显示。但是它是按照什么顺序写入数据的。下面也是从芯片手册上的截图。
230515enb3nrz6j3by6y3b.jpg
可以看得出RAM填充顺序了 ,写入一个字节数据时,最低位数据写入一页中最上面那行,最高位写入一页中最下面那行。这样,使用取模软件取模图片或者字符时,我们才能知道按照什么顺序取模。之后再写相应代码,按照顺序把取模数据写入RAM中。

二、天气图标取模
首先当然是先在网络下载我们需要的天气图标,大小看你像显示多大区域的图标,我的是48*48大小图标,在OLED上显示大小也是48*48。
230801gqbtzvkkbz5sogbf.jpg

我使用的是下面这款取模软件,我觉得图标取模不太好,不知道大家有没有推荐的。需要根据SSD1306进行取模软件的设置。比较重要的是取模方式的选择,这是跟SSD1306显示填充顺序对应的,我们需要选择列行式。其他数据点阵选择48,自定义格式选择C51。
230759z8lsvl6ifg7214xv.jpg

选择晴图标,生成如下数组。

230757x7a019cqogigi6if.jpg
上面的小花就是太阳图标,是有点丑,先凑合用吧。

二、软件设计
1、显示天气图标
我们已经按照SSD1306显存填充顺序,取模好图片数据,接下来按照顺序把数据写入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. }
复制代码
2、按键任务
OLED显示板上的两个按键,主要用于界面切换、获取实时时间、天气数据。增加了按键任务,主要进行这两个按键的处理。右边按键,按下后可以切换界面,现在设置有四个界面。在时间显示界面按下左键,会获取实时时间。在天气显示界面,按下左键会获取实时天气。
  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. #include "oled_ssd1306.h"
  11. #defineanalog_KEY_CHAN_NAME WIFI_IOT_ADC_CHANNEL_2
  12. typedef enum{
  13. TIMESCREEN=0,
  14. NOWSCREEN,
  15. TOSCREEN,
  16. ATOSCREEN,
  17. } SCREEN_STATUS;
  18. extern SCREEN_STATUS Now_Screen ;
  19. extern SCREEN_STATUS Last_Screen ;
  20. typedef enum{
  21. GET_NORMAL =0 ,
  22. GET_PROPRESS,
  23. GET_SUC,
  24. GET_FAIL,
  25. }GET_STATUS;
  26. GET_STATUS Get_Status = GET_NORMAL;
  27. GET_STATUS Last_Get_Status = GET_NORMAL;
  28. extern void getNtpTime(void);
  29. extern bool getWeather(void);
  30. static float ConvertToVoltage(unsigned short data)
  31. {
  32. return (float)data * 1.8 * 4 / 4096; /* adc code equals: voltage/4/1.8*4096*/
  33. }
  34. static void KeyTask(void *arg)
  35. {
  36. (void)arg;
  37. unsigned short data = 0;
  38. GpioInit();
  39. static bool keyflag = false;
  40. while(1)
  41. {
  42. AdcRead(ANALOG_KEY_CHAN_NAME, &data, WIFI_IOT_ADC_EQU_MODEL_4, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0);
  43. float voltage = ConvertToVoltage(data);
  44. if((voltage>0.45 && voltage<0.65)&&(!keyflag))
  45. {
  46. keyflag = true;
  47. //OledShowString(16,7,"Sync time...",1);
  48. //getNtpTime();
  49. //OledFillScreen(0);
  50. switch (Now_Screen){
  51. case TIMESCREEN:
  52. //OledShowString(16,7,"Sync time...",1);
  53. Get_Status = GET_PROPRESS;
  54. getNtpTime();
  55. //OledFillScreen(0);
  56. Get_Status = GET_SUC;
  57. break;
  58. case NOWSCREEN:
  59. //OledShowString(0,7,"Get Weather...",1);
  60. Get_Status = GET_PROPRESS;
  61. if(getWeather())
  62. //OledFillScreen(0);
  63. Get_Status = GET_SUC;
  64. else
  65. {
  66. //OledShowString(0,7,"Get fail...",1);
  67. Get_Status = GET_FAIL;
  68. }
  69. break;
  70. case TOSCREEN:
  71. Get_Status = GET_PROPRESS;
  72. if(getWeather())
  73. Get_Status = GET_SUC;
  74. else
  75. {
  76. Get_Status = GET_FAIL;
  77. }
  78. break;
  79. case ATOSCREEN:
  80. Get_Status = GET_PROPRESS;
  81. if(getWeather())
  82. Get_Status = GET_SUC;
  83. else
  84. {
  85. Get_Status = GET_FAIL;
  86. }
  87. break;
  88. default:
  89. break;
  90. }
  91. }
  92. else if((voltage>0.9 && voltage<1)&&(!keyflag))
  93. {
  94. keyflag = true;
  95. Now_Screen ++;
  96. if(Now_Screen > ATOSCREEN)
  97. {
  98. Now_Screen = TIMESCREEN;
  99. }
  100. }
  101. if((!(voltage>0.45 && voltage<0.65)) && (!(voltage>0.9 && voltage<1))) {
  102. keyflag = false;
  103. }
  104. usleep(300000);
  105. }
  106. }
  107. static void KeyTaskHandle(void)
  108. {
  109. osThreadAttr_t attr;
  110. attr.name = "KeyTask";
  111. attr.attr_bits = 0U;
  112. attr.cb_mem = NULL;
  113. attr.cb_size = 0U;
  114. attr.stack_mem = NULL;
  115. attr.stack_size = 4096;
  116. attr.priority = osPriorityNormal+2;
  117. if (osThreadNew(KeyTask, NULL, &attr) == NULL) {
  118. printf("[KeyTaskHandle] Falied to create KeyTask!n");
  119. }
  120. }
  121. APP_FEATURE_INIT(KeyTaskHandle);
复制代码
3、 OLED任务修改
修改oled_demo.c内容。增加页面切换,获取时间、天气数据情况提示,显示天气数据和天气图标。

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


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. ]
复制代码
三、结果演示
按下右边按键,可以切换界面,有四个界面,分别为时间显示界面,今天、明天、后天天气显示界面。在时间显示界面按下左键,会获取实时时间,在天气显示界面,按下左键会获取实时天气,并且显示天气获取情况提示。
231310ra9m49i9z4x4zf8e.jpg 231311ou0uw807ox6p0j77.jpg 231313ak03o957e9yy37r7.jpg 231314yw30xh0iojj0oob3.jpg 231315e660zeor3a53xs6r.jpg
四、总结
这一篇先写到这里,下一篇是关于通过一个公网的中转服务器,进行wifiiot和手机之间的远程数据传输
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • wi-fi
    +关注

    关注

    14

    文章

    1976

    浏览量

    122790
  • HarmonyOS
    +关注

    关注

    79

    文章

    1858

    浏览量

    29267
  • HiSpark
    +关注

    关注

    1

    文章

    156

    浏览量

    6764
收藏 人收藏

    评论

    相关推荐

    华为获得全球首个国际Wi-Fi联盟WFA企业级Wi-Fi 7认证!

    Wi-Fi联盟已发布Wi-Fi 7认证标准,华为是第一批送测厂商,获得业界首个企业级Wi-Fi 7 的Wi-Fi联盟官方认证。
    的头像 发表于 04-28 10:17 94次阅读
    华为获得全球首个国际<b class='flag-5'>Wi-Fi</b>联盟WFA企业级<b class='flag-5'>Wi-Fi</b> 7认证!

    验证物联网Wi-Fi HaLow用例的MM6108-EKH08开发套件来啦

    验证物联网Wi-Fi HaLow用例的MM6108-EKH08开发套件来啦 MM6108-EKH08开发套件专为验证物联网Wi-Fi HaLow用例而设计。该
    的头像 发表于 04-11 12:01 647次阅读
    验证物联网<b class='flag-5'>Wi-Fi</b> HaLow用例的MM6108-EKH08开发<b class='flag-5'>套件</b>来啦

    Wi-Fi 7与Wi-Fi 6的相关知识科普

    科普:Wi-Fi 7 vs. Wi-Fi 6,青出于蓝
    的头像 发表于 03-12 10:59 220次阅读
    <b class='flag-5'>Wi-Fi</b> 7与<b class='flag-5'>Wi-Fi</b> 6的相关知识科普

    Wi-Fi的诞生与发展

    和5GHz两个频段,承载着不断增长的网络需求。ABIResearch显示,2022年Wi-Fi上传流量激增80%,Wi-Fi数据流量已超过蜂窝流量,且成为流量增量贡
    的头像 发表于 03-07 08:26 422次阅读
    <b class='flag-5'>Wi-Fi</b>的诞生与发展

    Wi-Fi 7商用元年:更宽的路应跑更好的车

    来源:中国电子报 近日,Wi-Fi联盟正式确认了Wi-Fi 7认证标准,标志着无线通信技术进入了一个新阶段。随着智能设备及物联网的普及,人们对可靠、快速无线通信的需求日益增强,Wi-Fi 7芯片组
    的头像 发表于 02-21 11:36 225次阅读

    Wi-Fi HaLow和传统Wi-Fi的区别

    Wi-Fi HaLow和传统Wi-Fi的区别  Wi-Fi是一种无线网络技术,可以连接到互联网或局域网,为用户提供无线上网的便利。随着科技的发展和互联网的普及,Wi-Fi也在不断演进和
    的头像 发表于 02-02 15:28 265次阅读

    康普携手Wi-Fi联盟,RUCKUS Wi-Fi 7系列接入点成Wi-Fi

     康普高级副总裁兼网络、智能蜂窝和安全解决方案总裁Bart Giordano对此表示: “我们非常荣幸能与Wi-Fi Alliance形成长期合作伙伴关系,将我们的RUCKUS Wi-Fi 7 接入点平台作为Wi-Fi CERT
    的头像 发表于 01-23 14:10 314次阅读

    BT Wi-Fi模式是否可以通过ModustoolBox对套件进行编程来实现?

    想配置用于分析 CYW43439 的 CY8CPROTO-062S2-43439 原型开发套件。 浏览文档我无法弄清楚如何在不同的 Wi-Fi 和蓝牙模式(电源模式、连接模式等)下配置套件。 在
    发表于 01-22 06:19

    Wi-Fi 6和Wi-Fi 5之间有哪些区别呢?

    Wi-Fi 6和Wi-Fi 5之间有哪些区别呢? Wi-Fi 6和Wi-Fi 5是无线局域网标准的两个版本,它们之间存在很多区别。Wi-Fi
    的头像 发表于 12-09 16:09 1047次阅读

    什么是Wi-Fi 6?什么是Wi-Fi 6E?什么是最适合我的应用的?

    自 1999 年 Wi-Fi 联盟成立以来,Wi-Fi 技术不断进步,以满足对更快速度和支持更多设备的日益增长的需求。
    的头像 发表于 11-20 09:23 529次阅读
    什么是<b class='flag-5'>Wi-Fi</b> 6?什么是<b class='flag-5'>Wi-Fi</b> 6E?什么是最适合我的应用的?

    摩尔斯微电子与卓越电子合作推出 Wi-Fi HaLow 物联网解决方案

    的无晶圆厂半导体公司摩尔斯微电子(Morse Micro),宣布与卓越电子(AsiaRF Corp)合作推出最新的 Wi-Fi HaLow IoT 解决方案。产品阵容包括 Wi-Fi HaLow 物联网
    发表于 10-08 15:27 319次阅读
    摩尔斯微电子与卓越电子合作推出 <b class='flag-5'>Wi-Fi</b> HaLow 物联网解决方案

    Wi-Fi6的IoT主场,何时到来?

    Wi-Fi7。相比于手机厂商勇追Wi-Fi技术最前沿,Wi-Fi IoT还停留在以Wi-Fi4、Wi-F
    的头像 发表于 08-21 10:01 546次阅读
    <b class='flag-5'>Wi-Fi</b>6的<b class='flag-5'>IoT</b>主场,何时到来?

    Wi-Fi 6E:Wi-Fi的下一个前沿

    电子发烧友网站提供《Wi-Fi 6E:Wi-Fi的下一个前沿.pdf》资料免费下载
    发表于 07-19 16:48 0次下载
    <b class='flag-5'>Wi-Fi</b> 6E:<b class='flag-5'>Wi-Fi</b>的下一个前沿

    支持 Quick-Connect IoT Wi-Fi 的云解决方案套件快速入门指南

    支持 Quick-Connect IoT Wi-Fi 的云解决方案套件快速入门指南
    发表于 06-30 19:38 0次下载
    支持 Quick-Connect <b class='flag-5'>IoT</b> <b class='flag-5'>Wi-Fi</b> 的云解决方案<b class='flag-5'>套件</b>快速入门指南

    Wi-Fi HaLow – 物联网应用的最新无线标准

    Wi-Fi HaLow(IEEE 802.11ah)是最新的无线标准,专为解决IoT(物联网)应用的主要挑战而设计。HaLow具有非常有效和高效的能力,可以在非常低的功率和比任何Wi-Fi更长
    发表于 06-09 09:42 639次阅读