こんな感じで繋がらない
使ったスケッチは下記の通り。
#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_5dBm | 19.5 dBm | 最大出力。通信距離を優先する場合。 |
| WIFI_POWER_15dBm | 15 dBm | 標準的な設定。 |
| WIFI_POWER_11dBm | 11 dBm | 中距離。省電力とのバランスが良い。 |
| WIFI_POWER_8_5dBm | 8.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に繋がる様になりました。