ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【備忘録】ESP-32 DevKitCでのWiFi接続方法(APモード)

APモードのESP-32にWiFi接続する方法を残しておこうと思った次第です。

というのも、

  • esp8266で使っていたソースが流用できない。
  • サンプルにAPモードでの接続のものが見当たらない。

という状況だったので、まとめようと決意しました。

では以下に方法をまとめていきます。
※一つ前の記事で環境構築が済んでいることが前提です。

■ESP-32でAPモードでWiFiを起動するソース

結論から言うと、以下のソースでいけます。

ESP32_WiFi.ino

#include <WiFi.h>

WiFiServer server(80);

const char ssid[] = "ESP32-WiFi";  // SSID
const char pass[] = "esp32wifi";   // password

const IPAddress ip(192, 168, 20, 2);      // IPアドレス
const IPAddress subnet(255, 255, 255, 0); // サブネットマスク

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

  WiFi.softAP(ssid, pass);           // SSIDとパスの設定
  delay(100);                        // 追記:このdelayを入れないと失敗する場合がある
  WiFi.softAPConfig(ip, ip, subnet); // IPアドレス、ゲートウェイ、サブネットマスクの設定
  
  IPAddress myIP = WiFi.softAPIP();  // WiFi.softAPIP()でWiFi起動
  server.begin();                    // サーバーを起動(htmlを表示させるため)

  /* 各種情報を表示 */
  Serial.print("SSID: ");
  Serial.println(ssid);
  Serial.print("AP IP address: ");
  Serial.println(myIP);

  Serial.println("Server start!");
}

void loop() {
  WiFiClient client = server.available();
  
  if (client) {
    String currentLine = "";
    Serial.println("new client!");
    while (client.connected()) {
      if (client.available()) {  
        if (currentLine.length() == 0) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-type:text/html");
          client.println();
          client.println("hello!");
          break;
        } else {
          currentLine = "";
        }
      }
    }

    // 接続が切れた場合
    client.stop();
    Serial.println("client disonnected");
  }
}

上記のプログラムをESP-32 DevKitCに書き込むと、ESP32-WiFiというWiFiが飛ぶようになります。
それを選択し、passで設定したパスワードを入力すると接続完了です。

その状態でブラウザを開いて、IPアドレスに設定した192.168.20.2に接続すると「hello!」と表示されます。

SSID、pass、ipなどは定数になっているので任意に変更することができます。


・2017/07/18 追記
 久々にWifiのAPモードをESP32で実行しようとしたところ、なぜか起動しないという不具合が確認できました。色々調べて行くと「WiFi.softAPのあとにdelayを入れないと失敗する場合がある」ことがわかりました。
 なので上記プログラムにdelayを追記しています。

 抜粋すると以下の部分になります。

WiFi.softAP(ssid, pass);           // SSIDとパスの設定
delay(100);                        // 追記:このdelayを入れないと失敗する場合がある
WiFi.softAPConfig(ip, ip, subnet); // IPアドレス、ゲートウェイ、サブネットマスクの設定


・参考ページ
github.com