Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
ART-Pi
wlan
ART-Pi wlan 连接
发布于 2021-01-04 20:05:58 浏览:1430
订阅该版
[tocm] # ART-PI WLAN 连接 本文章关注于 ART-PI-FACTORY 例程里蓝牙配网过程中 WLAN 设备框架的使用。 WLAN 框架的使用请参考:[WLAN 设备框架](https://www.rt-thread.org/document/site/programming-manual/device/wlan/wlan/#finsh) 。 RT-Thread 推出 WLAN 设备框架是为了统一控制和管理 WiFi 的众多功能,本例程可以演示 WiFi **连接功能**,以及断线**自动连接**功能。 ## WiFi 连接功能 该功能实现在 `modules/wifi/wifi.c` 文件里。 蓝牙配网的具体流程可以参考:[ART-PI开发板蓝牙配网流程分析](https://supperthomas-wiki.readthedocs.io/en/latest/03_xupenghu/05_art-pi_ble_netin/art-pi_net_connect_with_ble.html) ,这里我主要分析下 WLAN 连网的操作。 首先在 `wifi_init()` 的函数里 ```C int wifi_init(void) { rt_memset(&wifi, 0, sizeof(wifi)); rt_wlan_register_event_handler(RT_WLAN_EVT_READY, wifi_ready_handler, NULL); return 0; } ``` 注册了 `RT_WLAN_EVT_READY` 事件的回调函数 `wifi_ready_handler()` 。WLAN 框架提供了很多事件,用户可以注册相应事件的回调函数,由 WLAN 框架来异步通知它,使用 `rt_wlan_register_event_handler()` 函数来注册事件的回调函数。 这里注册了“连接就绪”事件,也就是连接上 WiFi 后,路由器给 ART-PI 分配了 IP 地址,ART-PI 能够直接跟互联网通信了。 在其回调函数里只是获取了当前的 IP 地址并通过 BLE 发了出去,就不在此介绍了。 ART-PI 如何知道路由器 WiFi 的 ssid 和 password 呢? 这就涉及到蓝牙配网的具体步骤了,手机端首先通过蓝牙与 ART-PI 相连,在微信小程序手动输入 WiFi 的 ssid 和 password,以 json 字符串的形式通过蓝牙发送给 ART-PI,ART-PI 解析出其中的 ssid 和 password 再通过 WLAN 框架连接 WiFi 。 代码里面就是 `wifi_connect()` 函数了,该函数由蓝牙模块调用,并传入带有 ssid 和 passwd 的 json 字符串。 ```C int wifi_connect(char *conn_str) { cJSON *conn = cJSON_Parse(conn_str); if (conn) { cJSON *ssid = cJSON_GetObjectItem(conn, "ssid"); cJSON *passwd = cJSON_GetObjectItem(conn, "passwd"); rt_memcpy(wifi.ssid, ssid->valuestring, rt_strlen(ssid->valuestring)); rt_memcpy(wifi.passwd, passwd->valuestring, rt_strlen(passwd->valuestring)); return rt_wlan_connect(wifi.ssid, wifi.passwd); ...... } ...... } ``` 很明显,解析出 ssid 和 passwd 后直接调用 `rt_wlan_connect()` 建立连接。连接建立成功后,等到连接就绪后就会调用之前注册的回调函数。 ## WiFi 自动重连 WLAN 打开自动连接功能后,只要 WiFi 处在断线状态,就会自动读取之前连接成功的热点信息,连接热点。 相应的接口为: | **函数** | **描述** | | -------------------------------- | ----------------- | | rt_wlan_config_autoreconnect() | 启动/停止自动重连 | | rt_wlan_get_autoreconnect_mode() | 获取自动重连模式 | ART-PI-FACTORY 这个例程移植了自动重连的功能,但并未使用,需要我们手动修改一下。 首先在 `modules/wifi/wifi.c` 文件里的 `wifi_init()` 函数修改成如下代码: ```C int wifi_init(void) { rt_memset(&wifi, 0, sizeof(wifi)); #ifdef RT_WLAN_AUTO_CONNECT_ENABLE rt_wlan_config_autoreconnect(RT_TRUE); #endif rt_wlan_register_event_handler(RT_WLAN_EVT_READY, wifi_ready_handler, NULL); return 0; } ``` 主要是调用了 `rt_wlan_config_autoreconnect(RT_TRUE);` 函数,使能自动重连。 然后在 `board/port/wifi_config.c` 文件里,将 `wlan_autoconnect_init()` 自动初始化,如下述代码: ```C void wlan_autoconnect_init(void) { fal_init(); easyflash_init(); rt_wlan_cfg_set_ops(&ops); rt_wlan_cfg_cache_refresh(); } INIT_APP_EXPORT(wlan_autoconnect_init); ``` 编译,下载,就可以尝试自动重连的功能了。 效果如下,断开连接后 2 秒钟自动重连。 ![wifi_reconnect.gif](/uploads/20210104/e98ec95326fa1acb74ca6789dfbdc8a4.gif)
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Jacksi
这家伙很懒,什么也没写!
文章
7
回答
23
被采纳
2
关注TA
发私信
相关文章
1
wlan设备测试,除了rw007模块,还有哪些可以测试?
2
wlan设备,net组件,at组件
3
U盘拷贝文件,重启后MD5发生变化
4
AP6212传输大文件时出错
5
rw007 无法指定ap进行连接
6
rw007能不能实现多AP无缝漫游
7
RTT4.1.1 使用WLAN框架 报错
8
rw007 不确定原因的不定时的重启
9
esp8266对接wlan组件
10
RT-Thread 的wlan驱动使用时出现异常
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部