前提・実現したいこと
現在二つのesp32で片方はAPモードでサーバーとして、もう片方はクライアントとして通信を試みているのですが、APモードの起動タイミングによって接続しない場合があります。
何か解決法ないでしょうか?
発生している問題・エラーメッセージ
なし
該当のソースコード
Arduino
1/*--------------------------------------Server--------------------------------------*/ 2#include<WiFi.h> 3const char *ssid="ESP32-WiFi"; //SSID 4const char *pass="esp32wifi"; //パスワード 5const IPAddress ip(192,168,0,9); //サーバーのIPアドレス 6const IPAddress subnet(255,255,255,0); //サブネットマスク 7WiFiServer server(80); 8#define TIME 30 9#define uS 1000*1000 10void wifi_ap() 11{ 12 WiFi.softAP(ssid,pass); //SSIDとパスの設定 13 delay(1000); //接続失敗防止 14 WiFi.softAPConfig(ip,ip,subnet); //IPアドレス、ゲートウェイ、サブネットマスクの設定 15 IPAddress myIP = WiFi.softAPIP(); //WiFi.softAPIP()でWiFi起動 16 server.begin(); //サーバーを起動(htmlを表示させるため) 17 /*各種情報を表示*/ 18 Serial.println("WiFi Information"); 19 Serial.print("SSID:"); 20 Serial.println(ssid); 21 Serial.print("AP IP address:"); 22 Serial.println(myIP); 23 Serial.println("Server start!"); 24} 25bool message_recive() 26{ 27 //接続したクライアントの情報を得る。 28 WiFiClient client = server.available(); 29 if(client){ 30 Serial.println("New Client"); 31 while(client.connected()){ 32 if(client.available()){ 33 String line = client.readStringUntil('\r'); 34 Serial.println(line); 35 client.stop(); 36 return true; 37 } 38 } 39 } 40} 41void setup() 42{ 43 Serial.begin(115200); 44 Serial.println("Program Start"); 45 esp_sleep_enable_timer_wakeup(TIME * uS); 46 wifi_ap(); 47} 48 49void loop() 50{ 51 if(message_recive()==true) 52 { 53 WiFi.softAPdisconnect(1); 54 delay(1000); 55 Serial.println("Light Sleep Start"); 56 esp_light_sleep_start(); 57 Serial.println("Wake Up"); 58 wifi_ap(); 59 } 60} 61 62/*--------------------------------------Client--------------------------------------*/ 63#include<WiFi.h> 64const char *ssid="ESP32-WiFi"; //サーバーのSSID 65const char *pass="esp32wifi"; //サーバーのパスワード 66static WiFiClient client; //WiFiClient型でclientと宣言 67#define TIME 10 68#define uS 1000*1000 69/*-------------サーバーとWiFi接続-------------*/ 70bool server_connect() 71{ 72 int try_count = 0; 73 WiFi.disconnect(); 74 WiFi.begin(ssid, pass); //サーバーに接続 75 delay(1000); 76 77 while (WiFi.status() != WL_CONNECTED&&try_count<10) 78 { 79 try_count++; 80 Serial.print("."); 81 delay(1000); 82 } 83 if(WiFi.status()==WL_CONNECTED) 84 { 85 Serial.println("WiFi Connected"); 86 IPAddress ip(192, 168, 0, 9); //サーバーのIPアドレス 87 client.connect(ip, 80); //IPアドレスとポート番号を指定して接続 88 return true; 89 } 90 else if(try_count == 10) 91 { 92 Serial.println("WiFi Connection:False"); 93 WiFi.disconnect(); 94 delay(100); 95 return false; 96 } 97} 98void connect_try() 99{ 100 Serial.println("●WiFi Connnect Start"); 101 int try_count = 0; 102 while(server_connect()!=true&&try_count<5) 103 { 104 try_count++; 105 delay(1000); 106 } 107 if(try_count==5) 108 { 109 Serial.println("False"); 110 } 111} 112void setup() 113{ 114 Serial.begin(115200); 115 Serial.println("Program Start"); 116 esp_sleep_enable_timer_wakeup(TIME * uS); 117 connect_try(); 118} 119 120void loop() 121{ 122 //サーバーに接続されたか確認 123 if(client.connected()==true) 124 { 125 Serial.println("Massage Send"); 126 client.println("Hello"); 127 client.stop(); 128 WiFi.disconnect(); 129 esp_deep_sleep_start(); 130 } 131 132} 133
試したこと
何度かWiFi.desconnectで一度切断し、WiFi.begin接続しなおすエラーチェック文を追加しました。
補足情報(FW/ツールのバージョンなど)
電源を入れた場合にはどんなタイミングでも接続されるのですが、
sleep後には上手くいかないので、通信後に接続が切れていないことが問題だと思われます。
回答1件