ESP32でwifiに接続できない
Q&A
Closed
状況
Ubuntu 18.04からVSCodeのPlatformIOでesp32(esp32-wroom-32e)をいじっています。esp32でwifiに接続するためにあれこれしましたが、どれもうまくいきませんでした。
プログラムと実行結果
PlatformIOのプロジェクトとして、platformio.ini
とsrc/main.cpp
の2つを載せておきます。
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
#include <Arduino.h>
#include <WiFi.h>
const char * SSID = "{接続先wifiのSSID}";
const char * PASSWORD = "{接続先wifiのパスワード}";
void setup() {
Serial.begin(9600);
// wifi接続の流れを最初から追えるようにするため、キーボード入力を待つ
while (!Serial.available()) {
Serial.println("put some char...");
delay(500);
}
Serial.readString();
// 接続開始
Serial.printf("Connecting to %s\n", SSID);
WiFi.disconnect(true, true);
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, PASSWORD);
wl_status_t status = WiFi.begin(SSID, PASSWORD);
while (status != WL_CONNECTED) {
status = WiFi.status();
Serial.println(
status == WL_NO_SHIELD ? "no shield" :
status == WL_IDLE_STATUS ? "idle" :
status == WL_NO_SSID_AVAIL ? "no ssid available" :
status == WL_SCAN_COMPLETED ? "scan completed" :
status == WL_CONNECT_FAILED ? "connect failed" :
status == WL_CONNECTION_LOST ? "connection lost" :
status == WL_DISCONNECTED ? "disconnected" :
/** status == WL_CONNECTED */ "connected"
);
if (status == WL_NO_SSID_AVAIL) {
WiFi.disconnect(true, true);
WiFi.begin(SSID, PASSWORD);
ESP.restart();
}
delay(500);
}
Serial.println("Connected.");
Serial.printf("IP address: %s\n", WiFi.localIPv6().toString().c_str());
}
void loop() {}
このプログラムをマイコンに書き込んだところ、シリアルモニターは次のようになりました。
--- Available filters and text transformations: colorize, debug, default, direct, esp32_exception_decoder, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at https://bit.ly/pio-monitor-filters
--- Miniterm on /dev/ttyUSB0 9600,8,N,1 ---
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
put some char...
put some char...
put some char...
put some char...
put some char... # ここで1文字入力
Connecting to {ssid}
disconnected
disconnected
disconnected
disconnected
disconnected
no ssid available
# ESP.restart()が呼ばれる
!�
��ܠ��J��1��1!���!�J�put some char... # 振り出しに戻る
put some char...
... # 何度やっても同じ流れ
つまり、WiFi.begin(SSID, PASSWORD)
の後にWiFi.status()
が数秒間WL_DISCONNECTED
となり、その後WL_NO_SSID_AVAIL
に切り替わる、といった具合です。
参考
- https://garretlab.web.fc2.com/arduino/esp32/reference/libraries/WiFi/
- https://kokensha.xyz/arduino/connect-esp32-to-wifi-with-platformio/
- https://mirushirutechru.com/techru/3482/
- https://www.mgo-tec.com/blog-entry-trouble-shooting-esp32-wroom.html
- https://randomnerdtutorials.com/solved-reconnect-esp32-to-wifi/
- https://wakwak-koba.hatenadiary.jp/entry/20170225/p1
- https://jiwashin.blogspot.com/2018/08/esp-idf-32wifi.html
- https://twitter.com/mkbtm/status/1397159998426284032
- https://programresource.net/2020/02/17/2859.html