Wi-Fi接続したい

#include <WiFi.h>

const char* ssid = "EXISTING_SSID_NAME";
const char* password = "EXISTING_WIFI_PASSWORD";
WiFi.begin(ssid, password);

WiFi.begin関数で既存のWi-Fi機器に接続できます。 setup()関数に記述します。

リトライ処理したい

#include <WiFi.h>

const char* ssid = "SET_SSID_NAME";
const char* password = "SET_PASSWORD";

void wifi_init_sta() {
    // ステーションモード
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password)

    Serial.println("Connecting to WiFi...");

    // 接続するまでのリトライ処理
    int attempts = 0;
    while (WiFi.status() != WL_CONNECTED && attempts < 20) {
        delay(500);
        Serial.print(".");
        attempts++;
    }

    if (WiFi.status() == WL_CONNECTED) {
        Serial.println();
        Serial.println("WiFi connected!");
        Serial.print("IP address: ");
        Serial.println(WiFi.localIP());
    } else {
        Serial.println();
        Serial.println("Failed to connect to WiFi");
    }
}

void setup() {

    Serial.begin(115200);
    delay(1000);
    Serial.println();

    wifi_init_sta();
}

void loop() {};

WiFi接続に失敗することもあるはずなので、リトライ処理を追加したサンプルです。

最初にWiFi.mode(WIFI_STA)でステーションモードを明示的に設定しています。 基本は接続の状態が成功(WL_CONNECTED)になるまでwhileループします。 ただし、接続に失敗し続けた時の無限ループを防止するため、リトライする回数に上限(ここでは20回)を設けています。

ステーション接続に切り替えたい

void wifi_switch_sta() {
    // Disconnect ALL connections
    WiFi.disconnect(true);
    delay(100);

    wifi_init_sta();
}

void setup() {
    Serial.begin(115200);
    delay(1000);

    Serial.println();
    wifi_init_sta();
}

void loop() {

    // "switch sta"コマンドでAP -> STAに切り替え
    if (Serial.available()) {
        String cmd = Serial.readStringUntil('\n');
        if (cmd == "switch sta") {
            wifi_switch_sta();
        }
    }
}

ループ処理の途中で、APモードからSTA(ステーション)モードに切り替えるサンプルです。

ここではswitch staコマンドを受け取ったときにwifi_switch_staが実行されます。 内部ではwifi_init_staを再利用しています。