鸿蒙系统不能自动连wifi,Hi3861_WiFi IoT工程:WiFi自动连接
Hi3861_WiFi IoT工程:WiFi自动连接
这些天在研究软总线组件,因为要连接WiFi进行调试,如果按照官方文档的如下步骤进行操作,肯定不合适:
在社区上找到连志安老师的《Hi3861 WiFi操作,热点连接》以及网友double__整理的《Hi3861 WiFi连接》,参考代码可以运行和连接WiFi,但个人感觉仍稍显复杂/繁杂,于是我自己就研究了一下。
首先,上面官方的步骤,我们可以简化为:
step 1: AT+STARTSTA # 启动STA模式
step 2: AT+CONN="SSID", ,2,"PASSWORD" # 连接指定AP,其中SSID/PASSWORD为待连接的热点名称和密码
step 3: AT+DHCP=wlan0,1 # 通过DHCP向AP请求wlan0的IP地址
中间的其他步骤,完全可以省略。
我们到 at 模块去看一下:
hi_void app_main(hi_void)
{
#if defined(CONFIG_AT_COMMAND) || defined(CONFIG_FACTORY_TEST_MODE) //AT指令模块的初始化。如果初始化成功,则开始注册各类AT指令。
ret = hi_at_init(); // @//vendor/hisi/hi3861/hi3861/components/at/src/hi_at.c
if (ret == HI_ERR_SUCCESS) {
hi_at_sys_cmd_register(); // 同上 hi_at.c
}
#endif
}
hi_void hi_at_sys_cmd_register(hi_void)
{
//vendor/hisi/hi3861/hi3861/components/at/src/at_general.c
hi_at_general_cmd_register();
#ifndef CONFIG_FACTORY_TEST_MODE
//vendor/hisi/hi3861/hi3861/components/at/src/at_wifi.c
hi_at_sta_cmd_register();
hi_at_softap_cmd_register(); //同上 at_wifi.c
#endif
//vendor/hisi/hi3861/hi3861/components/at/src/at_hipriv.c
hi_at_hipriv_cmd_register();
#ifndef CONFIG_FACTORY_TEST_MODE
#ifdef LOSCFG_APP_MESH
hi_at_mesh_cmd_register(); //同上 at_wifi.c
#endif
//vendor/hisi/hi3861/hi3861/components/at/src/at_lowpower.c
hi_at_lowpower_cmd_register();
#endif
hi_at_general_factory_test_cmd_register(); //同上 at_general.c
hi_at_sta_factory_test_cmd_register(); //同上 at_wifi.c
hi_at_hipriv_factory_test_cmd_register(); //同上 at_hipriv.c
//vendor/hisi/hi3861/hi3861/components/at/src/at_io.c
hi_at_io_cmd_register();
}
hi_at_sys_cmd_register() 注册了Hi3861工程所支持的所有 AT 指令,详情请各位可以自己去查阅代码,我们只看上面三条指令:
step 1: AT+STARTSTA:位于 at_wifi.c,调用 hi_wifi_sta_start(ifname, &len) 实现功能
{"+STARTSTA", 9, HI_NULL, HI_NULL, (at_call_back_func)cmd_sta_start_adv, (at_call_back_func)cmd_sta_start}
step 2: AT+CONN="SSID", ,2,"PASSWORD" 位于 at_wifi.c ,调用 hi_wifi_sta_connect(&assoc_req) 实现功能
{"+CONN", 5, HI_NULL, HI_NULL, (at_call_back_func)cmd_sta_connect, HI_NULL}
step 3: AT+DHCP=wlan0,1位于 at_general.c,调用 netifapi_netif_find(argv[0]) 和 netifapi_dhcp_start(netif_p) 实现功能
{"+DHCP", 5, HI_NULL, HI_NULL, (at_call_back_func)at_setup_dhcp, HI_NULL}
把上面三步封装到 API: WifiLink(),实现如下:
#include "hi_wifi_api.h"
#include "lwip/netifapi.h"
void WifiLink(void)
{
static BOOL fgWifiConnected = FALSE;
if(fgWifiConnected) //防止重复连接WiFi
return;
printf("[WifiLink] Begin: fgWifiConnected[F]\n");
//step 1: AT+STARTSTA
// #启动STA模式
char ifname[WIFI_IFNAME_MAX_SIZE] = {0}; //“wlan0”
int len = WIFI_IFNAME_MAX_SIZE;
if (HISI_OK != hi_wifi_sta_start(ifname, &len))
{
printf("[WifiLink] hi_wifi_sta_start fail\n");
return;
}
//step 2: AT+CONN="SSID", ,2,"PASSWORD"
//# 连接指定AP,其中SSID/PASSWORD为待连接的热点名称和密码
hi_wifi_assoc_request request = {0};
request.auth = HI_WIFI_SECURITY_WPA2PSK; //2
char* ssid = "SSID"; //Your SSID, HI_WIFI_MAX_SSID_LEN 32 Byte
char* pswd = "PASSWORD"; //Your PSWD, HI_WIFI_MAX_KEY_LEN 64 Byte
memcpy(request.ssid, ssid, strlen(ssid));
memcpy(request.key, pswd, strlen(pswd));
if (HISI_OK != hi_wifi_sta_connect(&request))
{
printf("[wifilink] hi_wifi_sta_connect fail\n");
return;
}
//step 3: AT+DHCP=wlan0,1
//# 通过DHCP向AP请求wlan0的IP地址
struct netif* p_netif = netifapi_netif_find(ifname);
if(NULL == p_netif)
{
printf("[WifiLink] netifapi_netif_find fail\n");
return;
}
#if 1 //DHCP 自动分配IP
if(HISI_OK != netifapi_dhcp_start(p_netif))
{
printf("[WifiLink] netifapi_dhcp_start fail\n");
return;
}
#else //设置固定 IP
ip4_addr_t gw;
ip4_addr_t ipaddr;
ip4_addr_t netmask;
IP4_ADDR(&gw, 192, 168, 1, 1);
IP4_ADDR(&ipaddr, 192, 168, 1, 200); //固定到这个 IP
IP4_ADDR(&netmask, 255, 255, 255, 0);
if (HISI_OK != netifapi_netif_set_addr(p_netif, &ipaddr, &netmask, &gw))
{
printf("[WifiLink] netifapi_netif_set_addr fail\n");
return;
}
if (HISI_OK != hi_wifi_start_connect())
{
printf("[WifiLink] hi_wifi_start_connect fail\n");
return;
}
#endif
fgWifiConnected = TRUE;
printf("[WifiLink] End. fgWifiConnected[T]\n");
return;
}
注意在 BUILD.gn 的include_dirs要添加:
"//vendor/hisi/hi3861/hi3861/include",
"//vendor/hisi/hi3861/hi3861/third_party/lwip_sack/include",
上面这个函数你可以把它做成 SYS_RUN(WifiLink), 也可以放到你的代码中合适的地方去调用,就可以实现WiFi的自动连接了。
我本地log:
[WifiLink] Begin: fgWifiConnected[F]
[WifiLink] End. fgWifiConnected[T]
+NOTICE:SCANFINISH
+NOTICE:CONNECTED
然后可以通过AT+STASTAT、AT+IFCFG、AT+PING=www.baidu.com等指令去确认连接状态,完全OK。
鸿蒙系统不能自动连wifi,Hi3861_WiFi IoT工程:WiFi自动连接相关推荐
- 《嵌入式系统 – NUC980 IoT应用开发实战指南(基于RT-Thread系统)》第4章 NUC980 IoT 使用WiFi联网
开发环境: IDE:RT-Thread Studio 开发板:NUC980 IoT WiFi:ESP8266 4.1 ESP8266简介 ESP8266 是乐鑫推出的 WIFI SOC,市场上可以找到 ...
- 鸿蒙系统会中毒吗,手机中毒会感染wifi吗
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 理论上是存在有这种可能性的,但是比较低,手机是ios或者andriod系统,wifi没系统也不能写入,wifi只有64m-256m ...
- 鸿蒙系统是噱头和谈判策略?华为梁华:是针对IoT的操作系统
7月30日,华为公司今天下午举行2019年上半年业绩发布会,2019年上半年,华为实现销售收入4013亿元人民币,同比增23.2%.随后华为高管回答了现场记者提问. 华为董事长梁华在回答鸿蒙系统相关提 ...
- 华为梁华:鸿蒙系统不是谈判策略 是针对IoT的操作系统
[TechWeb]7月30日,华为公司今天下午举行2019年上半年业绩发布会,2019年上半年,华为实现销售收入4013亿元人民币,同比增23.2%.随后华为高管回答了现场记者提问. 华为董事长梁华在 ...
- 华为鸿蒙系统做得怎么样了,华为鸿蒙正式发布:迈向万物互联,体验如何、升级名单这里都有!...
2019年5月,华为被列入"黑名单",自那以后华为的发展和未来受到全国人民的关注.随着打压形势越发严峻,华为手机在海外市场无法预装谷歌GMS服务生态,2019年8月华为首次公布了自 ...
- 华为正式发布鸿蒙罗,华为正式发布鸿蒙系统,未来将适配全场景
鸿蒙,中国神话传说的远古时代,传说在盘古昆仑山开天辟地之前,世界是一团混沌的元气,这种自然的元气叫做鸿蒙. 此前被传的沸沸扬扬的华为要自己做的系统就是以此命名,可见该系统承载期望有多大. 虽说此前早已 ...
- 鸿蒙系统推广时间,鸿蒙系统将全面推广,目标覆盖3亿台设备,第三方IoT可达1亿台...
华为鸿蒙系统现在到底进展到哪一步了呢?今年2月份华为发布Mate X2折叠屏高端旗舰的时候,余承东明确表示鸿蒙手机系统将在4月份亮相,这4月份已经过完,他的承诺似乎没有实现! 事实上,已有部分华为用户 ...
- wifi连接一段时间才能上网_Win7系统下连接wifi一段时间就自动断线怎么办【图文】...
使用笔记本电脑.手机.平板的人们越来越多,而想要让这些设备都能够方便上网,就需要用到Wifi无线网络,所以很多家庭都会安装无线路由器,但是无线网络的掉线问题一直是不好解决,特别是在Win7系统下,最近 ...
- 12-20210225华为海思Hi3518EV300在鸿蒙系统下测试WIFI(AP+STATION模式)
12-20210225华为海思Hi3518EV300在鸿蒙系统下测试WIFI(AP+STATION模式) 2021/2/25 10:45 [HarmonyOS HiSpark_IPC_DIY开发套件] ...
最新文章
- 读农民工兄弟学C#文章后的感觉
- docker mysql容器 修改时区
- 13、logging模块
- python获取中文字体点阵坐标_Python实现点阵字体读取与转换的方法
- java实现poi导入excel_Java POI实现将导入Excel文件的示例代码
- 【POJ - 2337】Catenyms(欧拉图相关,欧拉通路输出路径,tricks)
- mongoDB 3.0以前版本 - 入门指南、示例
- android kl文件
- 奇异值分解SVD与在降维中的应用
- 【牛腩新闻发布系统】开始
- IDEA 格式化代码快捷键冲突解决
- 福师计算机应用基础离线作业一答案,20年秋福师《计算机应用基础》在线作业一【标准答案】...
- macOS Safari使用EasyConnect插件的坑
- Proguard混淆与Maven集成
- SLAM【十一】建图
- enumerate()函数详解
- SpringBoot发送QQ邮件图片显示不出来
- 2020 - 2021 年 Web 前端最新导航 - 前端学习资源分享前端面试资源汇总
- Android 应用界面设计
- 1031. 两个非重叠子数组的最大和-构造子数组和数组遍历数组