ESP32S3 が WiFi に繋がらない

更新日: 2026.03.29

概要

ESP32S3 が手に入ったので簡単なスケッチを試したところWiFiに繋がらない。 今回は状況の説明とその対策。

こんな感じで繋がらない

使ったスケッチは下記の通り。

#include <WiFi.h> const char* ssid = "xxxxxxxxx"; const char* password = "yyyyyyyy"; void setup(){ Serial.begin(115200); delay(100); // Connect WiF WiFi.disconnect(); WiFi.softAPdisconnect(true); delay(500); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { Serial.println("...Connecting to WiFi"); delay(500); } Serial.println("Connected"); } void loop(){ delay(10); }

実行結果は以下の通り。 "..Connecting to WiFi" を出力し続け WiFi に繋がらない。

ESP-ROM:esp32s3-20210327 Build:Mar 27 2021 rst:0x1 (POWERON),boot:0x28 (SPI_FAST_FLASH_BOOT) SPIWP:0xee mode:DIO, clock div:1 load:0x3fce2820,len:0x116c load:0x403c8700,len:0xc2c load:0x403cb700,len:0x3108 entry 0x403c88b8 ...Connecting to WiFi ...Connecting to WiFi ...Connecting to WiFi ...Connecting to WiFi ...Connecting to WiFi ...Connecting to WiFi ...Connecting to WiFi

このスケッチを ESP32 で実行すると問題無くWiFiに接続出来ました。

WiFiの出力調整で対応

ネットを検索して WiFi の出力を調整して対応した記事を見つけました。それを参考に確認して見ました。 ESP32は WiFi の出力に関し2つの関数、”WiFi.getTxPower();” と "WiFi.setTxPower()" を持っています。

  • WiFi.getTxPower()
    • WiFi送信出力の強さ設定値を返す。単位は dBm。
    • 8 から 80 程度の数値が返されます。
  • WiFi.setTxPower(WIFI_POWER_11dBm)
    • WiFi送信出力を設定。数値が大きいほど電波は遠くへ飛ぶ。
    • 引数は以下の定義された値を使うのが一般的。
    • 定義値出力値 (dBm)特徴
      WIFI_POWER_19_5dBm19.5 dBm最大出力。通信距離を優先する場合。
      WIFI_POWER_15dBm15 dBm標準的な設定。
      WIFI_POWER_11dBm11 dBm中距離。省電力とのバランスが良い。
      WIFI_POWER_8_5dBm8.5 dBm短距離。同じ部屋内での通信など。
      WIFI_POWER_MINUS_1dBm-1 dBm最小出力。極至近距離や超省電力用。

”WiFi.getTxPower();”を使って現在の設定値を確認したところ、ESP32,S3 共に80位の値が帰って来ました。 初期値は共に最大値にセットされている様です。

送信出力調整すればつながる様なので出力を変えて接続するスケッチを書いて見ました。

#include <WiFi.h> const char* ssid = "xxxxxxxx"; const char* password = "yyyyyyyy"; void setup() { int a; Serial.begin(115200); measure_TX(); } void loop() { delay(10); } void measure_TX(){ int a, b; bool flg; wifi_power_t db_data[] = { WIFI_POWER_19_5dBm, // 78: 19.5dBm WIFI_POWER_19dBm, // 76: 19dBm WIFI_POWER_18_5dBm, // 74: 18.5dBm WIFI_POWER_17dBm, // 68: 17dBm WIFI_POWER_15dBm, // 60: 15dBm WIFI_POWER_13dBm, // 52: 13dBm WIFI_POWER_11dBm, // 44: 11dBm WIFI_POWER_8_5dBm, // 34: 8.5dBm WIFI_POWER_7dBm, // 28: 7dBm WIFI_POWER_5dBm, // 20: 5dBm WIFI_POWER_2dBm, // 8 : 2dBm WIFI_POWER_MINUS_1dBm, // -4: -1dBm }; delay(100); Serial.println("\nTxPower: " + String(WiFi.getTxPower())); for(b = 0; b < 12; b ++){ WiFi.disconnect(); delay(100); WiFi.begin(ssid, password); flg = WiFi.setTxPower(db_data[b]); Serial.print("Set TX:" + String(db_data[b])); if(flg) Serial.print(", OK "); else Serial.print(", NG "); Serial.print(", GetTX: " + String(WiFi.getTxPower())); a = 3; // wait 3sec while (WiFi.status() != WL_CONNECTED) { delay(1000); a --; if (!a) break; } if (!a) Serial.println(" , Fail!"); else Serial.println(" , Success!"); } Serial.println("OK"); }

結果はこんな感じ。

ESP-ROM:esp32s3-20210327 Build:Mar 27 2021 rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT) SPIWP:0xee mode:DIO, clock div:1 load:0x3fce2820,len:0x116c load:0x403c8700,len:0xc2c load:0x403cb700,len:0x3108 entry 0x403c88b8 TxPower: 78 Set TX:78, OK , GetTX: 78 , Fail! Set TX:76, OK , GetTX: 76 , Fail! E (13195) wifi:sta is connecting, cannot set config Set TX:74, OK , GetTX: 74 , Fail! E (16296) wifi:sta is connecting, cannot set config Set TX:68, OK , GetTX: 68 , Success! Set TX:60, OK , GetTX: 60 , Success! Set TX:52, OK , GetTX: 52 , Success! Set TX:44, OK , GetTX: 44 , Success! Set TX:34, OK , GetTX: 34 , Success! Set TX:28, OK , GetTX: 28 , Success! Set TX:20, OK , GetTX: 20 , Success! Set TX:8, OK , GetTX: 8 , Success! Set TX:-4, NG , GetTX: 8 , Fail! OK

68以下で "Success!" なので、出力に60。 ”WIFI_POWER_15dBm” をセットして見ました。

#include <WiFi.h> const char* ssid = "xxxxxxxx"; const char* password = "yyyyyyyy"; void setup(){ Serial.begin(115200); delay(100); // Connect WiF WiFi.disconnect(); WiFi.softAPdisconnect(true); delay(500); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); WiFi.setTxPower(WIFI_POWER_15dBm); while (WiFi.status() != WL_CONNECTED) { Serial.println("...Connecting to WiFi"); delay(500); } Serial.println("Connected"); } void loop(){ delay(10); }

問題無くWiFiに繋がる様になりました。

最後に

確かにWiFiの出力を調整すると繋がりました。それにしても送信出力を下げると繋がるとは何が原因なのでしょうか。 ただ単にESP32S3のWiFiがノイズに弱いとしても出力の大きさとノイズは関係無い様に思えます。 今回やって感じたのは、出力以外の要因(ルータまでの距離や障害物、アンテナの角度等)も接続に大きく影響する様です。

SINCE 2026