上位に戻る ESP32 再起動後Wi-Fiが繋がらない 初版2025/1/10

ESP32 雨検出器を作りたく始めたのですが、色々引っかかったので、記録しておこうと思います
起動中のESP32にプログラムを修正して書き込むと、Wi-Fiが繋がらない USB抜いて電源切ってしばらく後に接続して
起動させると繋がる。なんじゃこれ! 修正ごと抜き差しなんかやってられないスよね

  1. 最初のコード

    #include <WiFi.h>
    // WiFi設定
    const char* ssid     = "ssiddesu";
    const char* password = "passworddesu";
    void setup()
    {
         // シリアルモニタの通信速度
        Serial.begin(115200);
        Serial.println();
        Serial.print("Connecting to ");
        Serial.println(ssid);
        // WiFi接続
        WiFi.begin(ssid, password);
        // WiFiの接続状態を確認
        while (WiFi.status() != WL_CONNECTED) {
            delay(500);
            Serial.print(".");
        }
        Serial.println("");
        Serial.println("WiFi connected.");
        Serial.println("IP address: ");
        Serial.println(WiFi.localIP());
    }

    スケッチ例をそのままです いつまでたってもWi-Fiのステータスが接続にならない
    おそらく、ルータ側で、セッションが持ち切りになっていて同じMACアドレスからのDHCP配布要求がはじかれているものと
    思われます 要求に対してチェック無に配布してくれるルータだったら良かったのですが
    要求コマンドは、1回きりでその後、ずっと待ってるのかああ

    なので、一旦接続を切って再接続をリトライさせることで回避しました
    念の為、さらにダメな場合は再起動を入れました。
  2. 修正後

    #include <WiFi.h>
    // WiFi設定
    const char* ssid     = "ssiddesu";
    const char* password = "passworddesu";
    int countt;
    int countt2;
    void setup()
    {
      Serial.begin(115200);
      delay(500);
     
      // ssidとpasswordを用いてWi-Fiに接続
      Serial.print("Connecting to ");
      Serial.println(ssid);
       while (WiFi.status() != WL_CONNECTED) {    // 接続確認
          delay(500);                            //   0.5秒毎にチェック
          countt += 1 ;                           //
          if (countt > 6) {                       // 6回目(3秒) で切断/再接続
            WiFi.disconnect(true,true) ;         //
            WiFi.begin(ssid, password);    //
            countt = 0 ;                          //
            countt2 += 1 ;                        // 再接続の回数をカウント
          }                                      //
          if (countt2 > 3) {                      // 3回 接続できなければ、
            ESP.restart() ;                      // ソフトウェアリセット
          }                                      //
          Serial.print(".");                     //
      }            
        Serial.println("");
        Serial.println("WiFi connected.");
        Serial.println("IP address: ");
        Serial.println(WiFi.localIP());
    }



    まあ固定IPに変更するのがいいかもです・・・・。

    追伸:固定IPにしても同じ現象が発生 んん原因なんだろか 固定IPでもリトライさせてます トホホ
    どうも原因は、Wi-FiのAPのようです 再接続のネゴシエーションがうまくいかないです 途中で切れると、再接続できません
    で、しょうがないので、接続状態を3秒おきにチェックして 切れたら再接続処理を追記しています

    以上間違い等ありましたら、以下ご意見箱にお願いします

   

    ご意見箱