なんか、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(); // 通常接続とマルチ接続が失敗した場合、スマートコンフィグを試す
}
}
解説
- SSIDとパスワードの設定:
ssid
とpass
にそれぞれ接続したいWiFiのSSIDとパスワードを設定します。
- 接続試行関数:
tryNormalConnect
:- WiFiに接続を試み、接続が確立するまで待機します。指定した時間内に接続できなければ、
false
を返します。
- WiFiに接続を試み、接続が確立するまで待機します。指定した時間内に接続できなければ、
tryMultiConnect
:- 複数のWiFiネットワークに接続するための
WiFiMulti
を使用します。これも同様に接続が確立するまで待機します。
- 複数のWiFiネットワークに接続するための
- スマートコンフィグ:
trySmartConfig
:- スマートコンフィグ機能を使用してWiFi接続を試みます。接続が完了するまで待機します。
- 接続のメイン関数:
connectWiFi
:- WiFiモードをステーションモードに設定し、既存の接続を切断します。その後、通常接続とマルチ接続を試み、どちらも失敗した場合にはスマートコンフィグを呼び出します。

とある高専生。
AIとネットが好き。
将来はAIの妹と火星に住みたい。
discord : r_nightcore
このサイトの管理者。
コメント