同步操作将从 小熊派开源社区/BearPi-HM_Nano 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
本示例将演示如何在BearPi-HM_Nano开发板上编写一个Wifi热点扫描业务程序
本案例主要使用了以下几个API完成Wifi热点扫描
WifiErrorCode RegisterWifiEvent (WifiEvent * event)
描述: 为指定的Wi-Fi事件注册回调函数。当WifiEvent中定义的Wi-Fi事件发生时,将调用已注册的回调函数 参数:
名字 | 描述 |
---|---|
event | 表示要注册回调的事件. |
WifiErrorCode EnableWifi (void )
描述:
启用STA模式
WifiErrorCode Scan (void )
描述:
启动Wi-Fi扫描
WifiErrorCode GetScanInfoList (WifiScanInfo * result, unsigned int * size )
描述:
获取在Wi-Fi扫描中检测到的热点列表。Wi-Fi扫描完成后,才能获得热点列表。
参数:
名字 | 描述 |
---|---|
result | 表示在Wi-Fi扫描中检测到的热点列表. |
size | 表示扫描出的Wifi热点数量 |
WifiErrorCode DisableWifi (void )
描述:
关闭STA模式
主要代码分析
完成Wifi热点的扫描需要以下几步
通过 RegisterWifiEvent
接口向系统注册扫描状态监听函数,用于接收扫描状态通知,如扫描动作是否完成等
OnWifiScanStateChangedHandler
用于绑定扫描状态监听函数,该回调函数有两个参数 state
和 size
;
当扫描动作完成后且有扫描到Wifi热点,该回调函数会将扫描成功标志位 g_staScanSuccess
置 1
调用 EnableWifi
接口,使能 Wifi STA 模式
调用 Scan
接口,触发Wifi扫描动作。
调用 WaitSacnResult
接口等待,该函数中会有15s的时间去轮询扫描成功标志位 g_staScanSuccess
,当g_staScanSuccess
为 1 时退出等待。
调用 GetScanInfoList
函数获取扫描结果,GetScanResult函数有两个第二个参数;
static BOOL WifiSTATask(void)
{
WifiScanInfo *info = NULL;
unsigned int size = WIFI_SCAN_HOTSPOT_LIMIT;
osDelay(200);
printf("<--System Init-->\r\n");
WiFiInit();
if (EnableWifi() != WIFI_IOT_SUCCESS)
{
printf("EnableWifi failed, error = %d\n", error);
return -1;
}
if (IsWifiActive() == 0)
{
printf("Wifi station is not actived.\n");
return -1;
}
g_staScanSuccess = 0;
ssid_count = 0;
error = Scan();
WaitSacnResult();
info = malloc(sizeof(WifiScanInfo) * ssid_count);
if (info == NULL)
{
return -1;
}
error = GetScanInfoList(info, &size);
for (uint8_t i = 0; i < ssid_count - 1; i++)
{
printf("No:%d, ssid:%s\r\n", i, info[i].ssid);
}
osDelay(200);
free((uint8_t *)info);
info = NULL;
while (1)
{
osDelay(10);
}
}
修改 applications\BearPi\BearPi-HM_Nano\sample
路径下 BUILD.gn 文件,指定 wifi_sta
参与编译。
"D1_iot_wifi_sta:wifi_sta",
#"D2_iot_wifi_sta_connect:wifi_sta_connect",
#"D3_iot_udp_client:udp_client",
#"D4_iot_tcp_server:tcp_server",
#"D5_iot_mqtt:iot_mqtt",
#"D6_iot_cloud_oc:oc_mqtt",
#"D7_iot_cloud_onenet:onenet_mqtt",
示例代码编译烧录代码后,按下开发板的RESET按键,通过串口助手查看日志,会打印扫描到的Wifi热点信息。
<--System Init-->
<--Wifi Init-->
callback function for wifi scan:0, 0
+NOTICE:SCANFINISH
callback function for wifi scan:1, 22
WaitSacnResult:wait success[1]s
No:0, ssid:DIRECT-UuDESKTOP-O1MFS98msDX
No:1, ssid:DIRECT-E3-HP Laser 136nw
No:2, ssid:iTV-QXxe
No:3, ssid:Hold
No:4, ssid:ChinaNet-A7Vx
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。