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