想了解更多开源内容请访问:开源基础软件社区https://ost.51cto.comWIFIwifi在我们的日常开发中缺一不可,如果你要开发鸿蒙车联网操作,如果想让开发板不再局限于终端串口操作,又离不开wifi,本文将介绍hi3861wifi开发步骤及简介细节。本文主要介绍如何让hi3861开机自动连接wifi。代码介绍第一步在applications\sample\wifi-iot\路径下创建WIFI_demo业务代码文件夹,在该文件夹下创建业务代码和BUILD.gn编译脚本。业务代码中的头文件引用了hi_wifi_api.h和netifapi.h存放了一些wifiAPI接口,ip_addr.h存放了一些wifi需要用到的宏定义。ohos_init.h和cmsis_os2.h是应用程序初始化和线程创建必不可少的头文件。我们在使用线程和SYS_RUN()时,必须包含这两个头文件。#include#include"hi_wifi_api.h"#include"lwip/ip_addr.h"#include"lwip/netifapi.h"#include"ohos_init.h"#include"cmsis_os2.h"编译脚本代码编译脚本将名为Xu_WIFI.c的target打包成名为Xu_WIFI_demo的静态库,然后调用app路径下BUILD.gn中的库,调用格式为“业务代码文件夹名:静态库名”。include_dirs是头文件的存放地址。我们在使用ubuntu开发的时候,遇到不知道存放路径的头文件或者宏定义,可以使用命令grep头文件名-*nRfind。-name要搜索的头文件名。业务代码文件夹中的BUILD.gn代码:static_library("Xu_WIFI_demo"){sources=["Xu_WIFI.c"]include_dirs=["//utils/native/lite/include","//kernel/liteos_m/components/cmsis/2.0","//base/iot_hardware/peripheral/interfaces/kits","//ohos_bundles/@ohos/device_soc_hisilicon/hi3861v100/sdk_liteos/include","//ohos_bundles/@ohos/device_soc_hisilicon/hi3861k1_liteos/sd/third_party/lwip_sack/include",]}app路径下的BUILD.gn代码:业务代码主要由三大函数组成:主函数、连接函数和线程函数。在main函数中,写入WIFI初始化、WIFI扫描等操作,连接函数可以确认需要连接的WIFI的账号密钥和加密方式。主要功能代码:WIFI开启过程:WIFI初始化。启用回调函数的注册。获取IP操作的网络接口。扫描无线网络。获取WIFI扫描结果。连接到无线网络。#defineAPP_INIT_VAP_NUM2#defineAPP_INIT_USR_NUM2staticstructnetif*g_lwip_netif=NULL;inthi_wifi_start_sta(void){intret;charifname[WIFI_IFNAME_MAX_SIZE+1]={0};intlen=sizeof(ifname);constunsignedcharwifi_vap_res_num=APP_INIT_VAP_NUM;constunsignedcharwifi_user_res_num=APP_INIT_USR_NUM;无符号整数=WIFI_SCAN_AP_LIMIT;//ret=hi_wifi_init(wifi_vap_res_num,wifi_user_res_num);//WiFi初始化//if(ret!=HISI_OK)//{//return-1;//}ret=hi_wifi_sta_start(ifname,&len);//sta初始化if(ret!=HISI_OK){return-1;}/*注册回调函数接口*/ret=hi_wifi_register_event_callback(wifi_wpa_event_cb);if(ret!=HISI_OK){printf("注册wifi事件回调失败\n");}/*获取IP操作的网络接口*/g_lwip_netif=netifapi_netif_find(ifname);if(g_lwip_netif==NULL){printf("%s:getnetiffailed\n",__FUNCTION__);返回-1;}/*扫描WIFI*/ret=hi_wifi_sta_scan();if(ret!=HISI_OK){返回-1;}睡眠(5);/*sleep5s,等待扫描结果。*///创建pst_results存储WiFi扫描结果hi_wifi_ap_info*pst_results=malloc(sizeof(hi_wifi_ap_info)*WIFI_SCAN_AP_LIMIT);如果(pst_results==NULL){返回-1;}//获取站点扫描结果ret=hi_wifi_sta_scan_results(pst_results,&num);if(retOK!=HISI_){free(pst_results);返回-1;}//打印WIFI扫描结果for(unsignedintloop=0;(loop