PR

【ESP32】私がWI-FIに接続しようとして、一生接続中になって接続できないときに使っているコード

Rintaが書いた

なんか、esp32を使っているときにボードを変えても接続できないときがある。
そのときに私が使っている関数を紹介する。

スポンサーリンク
スポンサーリンク
スポンサーリンク

コード

const char* ssid = ""; // WiFiのSSID
const char* pass = ""; // WiFiのパスワード

WiFiMulti wifiMulti; // WiFi接続のためのマルチ接続オブジェクト

bool tryNormalConnect(unsigned long t) {
  WiFi.begin(ssid, pass); // WiFi接続の開始
  unsigned long start = millis(); // 現在の時間を取得
  while (WiFi.status() != WL_CONNECTED && millis() - start < t) delay(500); // 接続が確立するまで待機
  return WiFi.status() == WL_CONNECTED; // 接続成功かどうかを返す
}

bool tryMultiConnect(unsigned long t) {
  wifiMulti.addAP(ssid, pass); // WiFiマルチ接続にSSIDとパスワードを追加
  unsigned long start = millis(); // 現在の時間を取得
  while (millis() - start < t) {
    if (wifiMulti.run() == WL_CONNECTED) return true; // 接続が確立したらtrueを返す
    delay(500); // 少し待機
  }
  return false; // 接続失敗
}

void trySmartConfig() {
  WiFi.beginSmartConfig(); // スマートコンフィグを開始
  while (!WiFi.smartConfigDone()) delay(500); // 設定が完了するまで待機
}

void connectWiFi() {
  WiFi.mode(WIFI_STA); // WiFiモードをステーションに設定
  WiFi.disconnect(true); // 既存の接続を切断
  delay(500); // 少し待機
  if (!tryNormalConnect(5000) && !tryMultiConnect(5000)) {
    trySmartConfig(); // 通常接続とマルチ接続が失敗した場合、スマートコンフィグを試す
  }
}

解説

  1. SSIDとパスワードの設定:
    • ssidpassにそれぞれ接続したいWiFiのSSIDとパスワードを設定します。
  2. 接続試行関数:
    • tryNormalConnect:
      • WiFiに接続を試み、接続が確立するまで待機します。指定した時間内に接続できなければ、falseを返します。
    • tryMultiConnect:
      • 複数のWiFiネットワークに接続するためのWiFiMultiを使用します。これも同様に接続が確立するまで待機します。
  3. スマートコンフィグ:
    • trySmartConfig:
      • スマートコンフィグ機能を使用してWiFi接続を試みます。接続が完了するまで待機します。
  4. 接続のメイン関数:
    • connectWiFi:
      • WiFiモードをステーションモードに設定し、既存の接続を切断します。その後、通常接続とマルチ接続を試み、どちらも失敗した場合にはスマートコンフィグを呼び出します。




コメント

タイトルとURLをコピーしました