鴻蒙系統 Hi3861 實現手機APP配網功能

本節主要講如何去實現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

 

源碼和手機APP下載:https://harmonyos.51cto.com/posts/1157