本節主要講如何去實現Hi3861 APP配網功能。須要說明的是,本人實現這個功能主要是用於學習,所涉及知識包括Hi3861的WiFi操做,AP模式、STA模式、按鍵功能、網絡編程、JSON數據格式、手機APP開發。編程
全部源碼,還有手機APP均提供下載,你們自領。json
也能夠直接觀看視頻:https://harmonyos.51cto.com/show/1159服務器
先上原理:網絡
目前主流的 WIFI 配置模式有如下 2 種:less
一、智能硬件處於 AP 模式(相似路由器,組成局域網),手機用於 STA 模式ide
手機鏈接處處於 AP 模式的智能硬件後組成局域網,手機發送須要鏈接路由的 SSID 及密碼至智能硬件,智能硬件主動去鏈接指定路由後,完成配網函數
二、一鍵配網(smartConfig)模式post
智能硬件處於混雜模式下,監聽網絡中的全部報文;手機 APP 將 SSID 和密碼編碼到 UDP 報文中,經過廣播包或組播報發送,智能硬件接收到 UDP 報文後解碼,獲得正確的 SSID 和密碼,而後主動鏈接指定 SSID 的路由完成鏈接。學習
本文主要講如何實現第一種AP方式。編碼
AP 是 (Wireless) Access Point 的縮寫,即 (無線) 訪問接入點。簡單來說就像是無線路由器同樣,設備打開後進入 AP 模式,在手機的網絡列表裏面,能夠搜索到相似 TPLINK_XXX 的名字(SSID)。
鏈接步驟:
一、Hi3861 上面有一個user按鍵,用戶能夠按下這個按鈕,Hi386會進入 AP 模式
二、手機掃描 WIFI 列表:掃描到Hi3861的SSID(目前是「Hispark-WiFi-IoT」)鏈接該智能硬件設備,經過手機APP發送咱們要鏈接的熱點的ssid和密碼
三、Hi3861經過 UDP 包獲取配置信息,切換網絡模式鏈接 WIFI 後配網完成
代碼實現
(1)代碼結構
代碼主要由3個文件組成
ap_mode.c:主要實現AP模式,並實現一個簡單的UDP服務器,獲取手機APP傳輸過來的熱點帳號和密碼。
sta_mode.c:實現鏈接配網的功能。
wifi_config.c:入口函數,實現按下按鍵後開始配網的功能。
https://harmonyos.51cto.com/?bkwz
(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
相關源碼和APK能夠前往原文下載
文章來源:https://harmonyos.51cto.com/posts/1157
做者: 連志安