本節主要講如何去實作Hi3861 APP配網功能。需要說明的是,本人實作這個功能主要是用于學習,所涉及知識包括Hi3861的WiFi操作,AP模式、STA模式、按鍵功能、網絡程式設計、JSON資料格式、手機APP開發。
所有源碼,還有手機APP均提供下載下傳,大家自領。
也可以直接觀看視訊:https://harmonyos.51cto.com/show/1159
先上原理:
目前主流的 WIFI 配置模式有以下 2 種:
1、智能硬體處于 AP 模式(類似路由器,組成區域網路),手機用于 STA 模式
手機連接配接到處于 AP 模式的智能硬體後組成區域網路,手機發送需要連接配接路由的 SSID 及密碼至智能硬體,智能硬體主動去連接配接指定路由後,完成配網
2、一鍵配網(smartConfig)模式
智能硬體處于混雜模式下,監聽網絡中的所有封包;手機 APP 将 SSID 和密碼編碼到 UDP 封包中,通過廣播包或多點傳播報發送,智能硬體接收到 UDP 封包後解碼,得到正确的 SSID 和密碼,然後主動連接配接指定 SSID 的路由完成連接配接。
本文主要講如何實作第一種AP方式。
AP 是 (Wireless) Access Point 的縮寫,即 (無線) 通路接入點。簡單來講就像是無線路由器一樣,裝置打開後進入 AP 模式,在手機的網絡清單裡面,可以搜尋到類似 TPLINK_XXX 的名字(SSID)。
連接配接步驟:
1、Hi3861 上面有一個user按鍵,使用者可以按下這個按鈕,Hi386會進入 AP 模式
2、手機掃描 WIFI 清單:掃描到Hi3861的SSID(目前是“Hispark-WiFi-IoT”)連接配接該智能硬體裝置,通過手機APP發送我們要連接配接的熱點的ssid和密碼
3、Hi3861通過 UDP 包擷取配置資訊,切換網絡模式連接配接 WIFI 後配網完成
代碼實作
(1)代碼結構
代碼主要由3個檔案組成

ap_mode.c:主要實作AP模式,并實作一個簡單的UDP伺服器,擷取手機APP傳輸過來的熱點賬号和密碼。
sta_mode.c:實作連接配接配網的功能。
wifi_config.c:入口函數,實作按下按鍵後開始配網的功能。
(2)按鍵功能實作
通過查閱原理圖,我們可以看到Hi3861在type-C口附近有一個user按鈕,如圖,主要不要和複位按鈕搞錯了。user按鈕對應的是GPIO5引腳。
于是我們可以使用按鍵中斷程式設計的方式去實作,代碼如下:
其中需要主要的是需要使用 hi_io_set_func(HI_IO_NAME_GPIO_5, HI_IO_FUNC_GPIO_5_GPIO); 修改GPIO5為普通引腳,否則GPIO5預設會被初始化為 序列槽引腳,導緻無法使用。
GPIO5中斷回調函數如下:
其實很簡單,就是置某個變量為1而已。
(3)接下來進入AP模式
代碼如下,一旦發現 start_wifi_config_flg 不為0,也就是說發生了按鍵被按下的事件,那就會調用 wifi_start_softap 函數進入AP模式
(4)AP模式
AP模式的代碼部分也很簡單,首先我們要先設定好Hi3861 AP模式下的的SSID,然後開放網絡,不加密。對應的函數是 wifi_start_softap
接下來設定好 Hi3861 的網段、IP等,并開啟UDP服務:
(5)UDP伺服器
UDP伺服器綁定的端口号是 50001,使用soocket通信接口
綁定完端口号後,進入接收資料
資料這裡我使用json格式,由于鴻蒙系統代碼中已經自帶cJSON庫,可以直接使用,這一部分的代碼也比較簡單,大家可以看看。
(6)開啟STA模式
啟動STA模式的代碼部分也比較簡單,我之前有一篇文章有講,具體代碼如下:
關鍵代碼已經做了注釋。
(7)連接配接熱點
連接配接熱點時,隻需要傳入ssid、加密方式和密碼即可。
需要主要的地方是我們通常的wifi加密都是 HI_WIFI_SECURITY_WPA2PSK