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_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(),实现如下:
注意在 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。
楼主流程分享的很详细呀。
上面的WifiLink()是直接参考AT的代码来实现的,实际上,在应用层调用下面目录内的API来实现连接WiFi的功能,更加合理:
//foundation/communication/interfaces/kits/wifi_lite/wifiservice/
wifi_device.h + station_info.h + wifi_hotspot.h + wifi_device_config.h + wifi_error_code.h + wifi_event.h + wifi_hotspot_config.h + wifi_linked_info.h + wifi_scan_info.h
学习中,