我用的 W801 模块, 先让路由器稳定后, 再给 w801 上电配置 WiFi, 能成功连接路由器, 我用的是 UDP 广播通信, 也很稳定, 但模块不断电重启路由器, 模块判断失败后再重新初始化配置就无法重连, 只能让 w801 模块重新上电或按下复位件才能连接, 不确定是哪部分数据需要清楚吗? 我已经提前关闭了 socket, 主函数如下
while (1)
{
while (wifi_connect_ST==0) //判断连接状态, 0 为未连接
{
close_udp_socket_demo () ; //关闭 socket
demo_connect_net (ssid, pwd) ;
tls_os_time_delay (3000) ;
}
socket_udp_demo (1, 20000, "192. 168. 1. 255") ;
tls_os_time_delay (100) ;
//发送数据
if (wifi_connect_ST==1)
{
udp_send_data_self (test_data, 10) ;
tls_os_time_delay (500) ;
}
}
先开路由器后给模块上电这程序没问题, 中途重启路由器就无法登录, 求大神指点
不用这么麻烦 直接调用 setAutoConnectMode () ; 让他自动重新连接就 OK, 关闭 socket 注册个回调函数在里面判断下就 OK tls_netif_add_status_event () ; 里面有断开事件
自动重连建议参考这个 demo, 通过蓝牙配网成功后也会自动打开自动重连功能.
u8 auto_reconnect = 0xff;
tls_wifi_auto_connect_flag (WIFI_AUTO_CNT_FLAG_GET, &auto_reconnect) ;
if (auto_reconnect ! = WIFI_AUTO_CNT_ON)
{
auto_reconnect = WIFI_AUTO_CNT_ON;
tls_wifi_auto_connect_flag (WIFI_AUTO_CNT_FLAG_SET, &auto_reconnect) ;
tls_wifi_connect ( (u8 *) "w600", strlen ("w600") , (u8 *) "12345678", strlen ("12345678") ) ;
printf ("--- WIFI_AUTO_CNT_FLAG_SET ON\n") ;
}
自动重连会按上次的 WiFi 和密码登录吗? 是不是程序里有记录? tls_netif_add_status_event () 这个函数我没搜到啊
找到了, 就在 demo_connect_net 函数里, 我就在这里面判断的联网状态的, 感觉程序走不到这一步了, 串口不打印 printf ("NETIF_WIFI_JOIN_SUCCESSn") , 也不打印 failed 了
你再试试吧, 获取状态里面也有相应的 API tls_netif_get_ethif () 返回值中有一项是 status 判断网络连接状态
@ZYQ 多谢指导啦, 我找到问题了, 我写的 while 函数没有创建线程任务, 对 freeRTOS 不熟悉, 按照创建任务跑程序就能正常重连啦, 多谢啦!