我用的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不熟悉,按照创建任务跑程序就能正常重连啦,多谢啦!