質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

受付中

ESP32のWiFiを用いたサーバー・クライアント相互通信

CyPris
CyPris

総合スコア0

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

1回答

0評価

1クリップ

60閲覧

投稿2018/06/17 15:57

前提・実現したいこと

現在二つのesp32で片方はAPモードでサーバーとして、もう片方はクライアントとして通信を試みているのですが、APモードの起動タイミングによって接続しない場合があります。
何か解決法ないでしょうか?

発生している問題・エラーメッセージ

なし

該当のソースコード

Arduino

/*--------------------------------------Server--------------------------------------*/ #include<WiFi.h> const char *ssid="ESP32-WiFi"; //SSID const char *pass="esp32wifi"; //パスワード const IPAddress ip(192,168,0,9); //サーバーのIPアドレス const IPAddress subnet(255,255,255,0); //サブネットマスク WiFiServer server(80); #define TIME 30 #define uS 1000*1000 void wifi_ap() { WiFi.softAP(ssid,pass); //SSIDとパスの設定 delay(1000); //接続失敗防止 WiFi.softAPConfig(ip,ip,subnet); //IPアドレス、ゲートウェイ、サブネットマスクの設定 IPAddress myIP = WiFi.softAPIP(); //WiFi.softAPIP()でWiFi起動 server.begin(); //サーバーを起動(htmlを表示させるため) /*各種情報を表示*/ Serial.println("WiFi Information"); Serial.print("SSID:"); Serial.println(ssid); Serial.print("AP IP address:"); Serial.println(myIP); Serial.println("Server start!"); } bool message_recive() { //接続したクライアントの情報を得る。 WiFiClient client = server.available(); if(client){ Serial.println("New Client"); while(client.connected()){ if(client.available()){ String line = client.readStringUntil('\r'); Serial.println(line); client.stop(); return true; } } } } void setup() { Serial.begin(115200); Serial.println("Program Start"); esp_sleep_enable_timer_wakeup(TIME * uS); wifi_ap(); } void loop() { if(message_recive()==true) { WiFi.softAPdisconnect(1); delay(1000); Serial.println("Light Sleep Start"); esp_light_sleep_start(); Serial.println("Wake Up"); wifi_ap(); } } /*--------------------------------------Client--------------------------------------*/ #include<WiFi.h> const char *ssid="ESP32-WiFi"; //サーバーのSSID const char *pass="esp32wifi"; //サーバーのパスワード static WiFiClient client; //WiFiClient型でclientと宣言 #define TIME 10 #define uS 1000*1000 /*-------------サーバーとWiFi接続-------------*/ bool server_connect() { int try_count = 0; WiFi.disconnect(); WiFi.begin(ssid, pass); //サーバーに接続 delay(1000); while (WiFi.status() != WL_CONNECTED&&try_count<10) { try_count++; Serial.print("."); delay(1000); } if(WiFi.status()==WL_CONNECTED) { Serial.println("WiFi Connected"); IPAddress ip(192, 168, 0, 9); //サーバーのIPアドレス client.connect(ip, 80); //IPアドレスとポート番号を指定して接続 return true; } else if(try_count == 10) { Serial.println("WiFi Connection:False"); WiFi.disconnect(); delay(100); return false; } } void connect_try() { Serial.println("●WiFi Connnect Start"); int try_count = 0; while(server_connect()!=true&&try_count<5) { try_count++; delay(1000); } if(try_count==5) { Serial.println("False"); } } void setup() { Serial.begin(115200); Serial.println("Program Start"); esp_sleep_enable_timer_wakeup(TIME * uS); connect_try(); } void loop() { //サーバーに接続されたか確認 if(client.connected()==true) { Serial.println("Massage Send"); client.println("Hello"); client.stop(); WiFi.disconnect(); esp_deep_sleep_start(); } }

試したこと

何度かWiFi.desconnectで一度切断し、WiFi.begin接続しなおすエラーチェック文を追加しました。

補足情報(FW/ツールのバージョンなど)

電源を入れた場合にはどんなタイミングでも接続されるのですが、
sleep後には上手くいかないので、通信後に接続が切れていないことが問題だと思われます。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

coco_bauer
coco_bauer

2018/06/18 02:46

ESP32を接続したArduinoを2台の構成ですか? 「電源を入れた場合にはどんなタイミングでも」というのは2台\(サーバ、クライアント)のArduinoの電源投入の順序の事ですか??
CyPris
CyPris

2018/06/18 05:18

いえ、ESP32 DevKitを二台用いた構成です。「電源を入れた場合にはどんなタイミングでも」はおっしゃる通りの意味で、ESP32 DevKitの電源投入の順序のことです。
coco_bauer
coco_bauer

2018/06/18 06:43

カテゴリーがArduinoになっていますが、Arduinoは使われていないという事ですか?
CyPris
CyPris

2018/06/18 06:47

arduino ideを用いたからです。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。