我用的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不熟悉,按照創建任務跑程序就能正常重連啦,多謝啦!