0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ESP32-S3】CO2モニターを作る #4 Wi-Fi接続編 - シリアルモニタに何も出ない問題

0
Posted at

はじめに

前回(#3 RGB LED編)でハードウェア側の動作確認がすべて完了しました。

今回から通信系に入ります。まずは Wi-Fi 接続です。

やることは単純で、Wi-Fi に繋いで IP アドレスをシリアルモニタに表示するだけ。

……のはずが、シリアルモニタに何も表示されないという問題にぶつかりました。


環境

項目 内容
ボード ESP32-S3-DevKitC-1-N8R8
IDE Arduino IDE 2.x
ライブラリ WiFi.h(ESP32標準)

パスワードは secrets.h に分ける

Wi-Fi の SSID とパスワードをコードに直接書くのは危険です。GitHub に上げた瞬間に流出します。

別ファイル secrets.h に分離します。スケッチと同じフォルダに作成してください。

// secrets.h
#define SECRET_SSID "自分のWi-Fi名"
#define SECRET_PASSWORD "自分のWi-Fiパスワード"

そして .gitignore に必ず追加します。

secrets.h
.DS_Store

注意:.gitignore は先頭にドットが必要です。

私は以前これを gitignore と書いてしまい、機能せずに secrets.h を GitHub に上げてしまいました。ファイル名は正確に。

また、.gitignore は secrets.h を作る前に用意するのが鉄則です。Git は一度追跡を始めたファイルを、後から .gitignore に書いても無視してくれません。


コード

#include <WiFi.h>
#include "secrets.h"

const char* ssid = SECRET_SSID;
const char* password = SECRET_PASSWORD;

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

  WiFi.begin(ssid, password);
  Serial.print("接続中");

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println();
  Serial.println("Wi-Fi接続成功!");
  Serial.print("IPアドレス: ");
  Serial.println(WiFi.localIP());
}

void loop() {
}

while ループで、接続が完了するまで 0.5 秒ごとにドットを表示しながら待ちます。


つまずき① ライブラリ名のタイポ

書き込もうとしたらエラーが出ました。

fatal error: Wi-Fi.h: No such file or directory
    1 | #include <Wi-Fi.h>

原因は単純で、ハイフンを入れてしまっていたことです。

#include <Wi-Fi.h>   // ❌
#include <WiFi.h>    // ⭕️

日本語だと「Wi-Fi」とハイフン付きで書くので、つい癖で入れてしまいました。プログラム上は WiFi(ハイフンなし、F は大文字)です。

フォルダ名は 05_Wi-Fi_Test のようにハイフンありでも問題ありませんが、#include の中身は正確でなければいけません。


つまずき② シリアルモニタに何も表示されない

タイポを直して書き込みは成功。シリアルモニタを開きました。

しかし、何も表示されません。

真っ白のまま、ドットの1つも出てきません。

コード自体はシンプルなので、間違っているようには見えませんでした。「これは設定の問題だろうな」とは思ったのですが、何をどう直せばいいのか分からず、結局 AI に聞いて解決しました。


原因:setup() の出力は一瞬で流れる

ESP32 は電源が入った瞬間、あるいは書き込み直後に setup() を実行します。

今回のコードは、出力がすべて setup() の中にあります。

void setup() {
  Serial.println("Wi-Fi接続成功!");   // ここで出力
  Serial.println(WiFi.localIP());
}

void loop() {
  // 空っぽ
}

つまり 起動直後の数秒間しか出力されません。

シリアルモニタを開くのが少しでも遅れると、その出力は流れ去ってしまいます。loop() が空なので、二度と表示されることはありません。


解決:リセットボタンを押す

シリアルモニタを開いた状態で、ボード上の RST(リセット)ボタンを押す。

これだけです。

リセットすると setup() が最初から実行され、今度はシリアルモニタが開いているので出力が見えます。

接続中.....
Wi-Fi接続成功!
IPアドレス: 192.168.1.42

表示された瞬間は素直に嬉しかったです。


他に確認すべきこと

リセットで解決しない場合は、以下も確認してください。

① ボーレートが 115200 か

シリアルモニタ右下のドロップダウンを確認します。コード側の Serial.begin(115200) と一致していないと、文字化けするか何も出ません。

② USB CDC On Boot の設定

ツール メニューにある項目です。ESP32-S3 は USB 端子が2つあり、どちらに挿しているかで適切な設定が変わります。

挿している端子 推奨設定
UART側 Disabled
USB側 Enabled

私は UART 側を使っているので Disabled のままで動きました。

③ delay を入れる

void setup() {
  Serial.begin(115200);
  delay(1000);   // シリアルの準備を待つ
  ...
}

Serial.begin() の直後は通信が安定していないことがあります。1秒待つと確実です。


根本的な対策:loop() でも出力する

毎回リセットを押すのが面倒なら、loop() の中で定期的に状態を出力する手もあります。

void loop() {
  Serial.print("IPアドレス: ");
  Serial.println(WiFi.localIP());
  delay(5000);
}

デバッグ中はこうしておくと、いつシリアルモニタを開いても状況が分かります。


まとめ

症状 原因 対処
Wi-Fi.h: No such file ハイフンを入れた WiFi.h に修正
シリアルモニタが真っ白 setup()の出力を見逃した RSTボタンを押す

学んだこと

① タイポは日本語の癖から生まれる

「Wi-Fi」という日本語表記が染み付いていると、WiFi と書くべき場面でハイフンを入れてしまいます。エラーメッセージをよく読めば Wi-Fi.h と書かれているので、すぐ気づけるはずでした。

② 「動かない」には表示されていないだけの場合がある

プログラムは正しく動いていて、Wi-Fi にも繋がっていました。ただそれを見る手段の問題だった、というオチです。

「動いていない」と「見えていない」は別物だと学びました。

③ 分からないときは聞く

設定の問題だろうと当たりはついていましたが、具体的な原因までは辿り着けませんでした。1人で30分悩むより、聞いて5分で解決して次に進む方が結果的に学べます。


これで ESP32-S3 がネットワークに繋がりました。

次回はこの Wi-Fi を使って、ブラウザから CO2 データを見られる Web サーバーを立てます。


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?