×

タイトルとは裏腹に、なかなか本題へはいかない。今日もESP32の学習です。

ちゃっぴーの助言により、私はまず最初に次を学習し、

1. シリアルポートのモニタリング

そして、次に進むと良いそうです。

2. Wi-Fiへの接続

なぜか?

私が最終的にやろうとしているのは、Roon ROCKの監視。モニタリングです。ということは、これはESP32側に溜まったログの状態監視という見方もできる。ESP32の内側で起きていることのモニタリング。これは全ての基本になるそうです。ESP32にOLEDモニターを付けて監視しようが、はたまたWebサーバーを立ててウェブ経由で監視しようが、基本は同じ。ESP32の状態出力です。そのために、シリアルモニターで状態監視をするのが最初の学習としてベストだというのです。
 

シリアルポートのモニタリング

さっそく、こんなコードを渡されました。

int count = 0;

void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.print(count);
  Serial.print("  ");
  Serial.println(millis());

  count++;

  delay(1000);
}

非常に簡単なコードで、

1秒ごとに、シリアルポートへカウンター(0,1,2,3…)を書け、
そのときの遅延時間もミリセックで付記せよ

というものです。これだけ単純だと私でも読解できますね。

Serial.begin(115200);

というのは

通信ボーレート 115,200bpsで通信開始せよ

という意味です。裏を返すと、シリアルモニター側もこのボーレートに合わせておかないと、流れてくるものを解釈できません。

前回同様。Aruduino IDEでこのコードのコンパイルと書き込みを行い。

完了したら、画面右上の虫眼鏡のようなアイコンをクリックします。これが「シリアルモニターの表示」を表しています。

シリアルモニターに流れてくるものを眺めていると、下記が流れてきました。

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4876
ho 0 tail 12 room 4
load:0x40078000,len:16560
load:0x40080400,len:3500
entry 0x400805b4
0  19
1  1019
2  2019
3  3019
4  4019
5  5019
6  6019
7  7019
8  8019
9  9019
10  10019
11  11019
12  12019
13  13019
14  14019

おお〜、ちゃんと指示通りのものが流れてきます。

1000ms(1秒)に1回、この行が増えていくわけです。停止指示はコードに入れていませんから、ESP32は次の指示があるか、または電源を断たれるまで、この動きをずっと継続するわけです。そう・・・ずっと続ける。指示された同じ監視をずっと。これこそが、私が作るものの骨子です。ROCKの温度と音をずっと監視しつづけ、止まらない、情報を出力しつづける。最小構成ながら、すでに「私のやりたいこと」を実現していることが分かります。

後はこれに、手足や肉付けをしてくだけという言い方もできる。(それはちょっと大袈裟か)
 

Wi-Fiへ接続する

次に、ESP32をWi-Fiに参加させます。最終的にはウェブ経由で温度やノイズをモニタリングすることを考えているため、Wi-Fiへ接続できるのは基本になります。そう・・・ちょっと大袈裟にいうと、これが「IoTエッジデバイスへの第一歩」になるんですね。

今回使うコードはこちらです。(一発でこれになったわけではなく、意外と苦労しました)

#include <WiFi.h>

// ===== WiFi設定 =====
const char* ssid     = "あなたのWi-FiのSSID";
const char* password = "あなたのWi-Fiパスワード";

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

  // ★重要:WiFi内部ログ抑制
  Serial.setDebugOutput(false);

  Serial.println("BOOT OK");

  WiFi.mode(WIFI_STA);

  Serial.println("CONNECTING...");

  WiFi.begin(ssid, password);

  // 接続待ち(ログ抑制状態)
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println();
  Serial.println("WiFi CONNECTED");

  Serial.print("IP ADDRESS: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  // 生存確認
  Serial.println("Connection Alive");

  delay(60000);
}

これによって流れてくる情報をシリアルモニターで見てみると:

...
WiFi CONNECTED
IP ADDRESS: 192.168.3.xxx
Connection Alive
Connection Alive
Connection Alive

すごい〜。しっかりとウチのWi-Fiに接続が確立できています。
こんなに簡単なコードで、Wi-Fiの一員に成れるの本当スゴイ!

ただ、コードは「カンタンに見えるだけ」であって、裏側はスゴイことやってる。現代プログラムは表層コードは単純で、その裏側でライブラリ層がとんでもない重く巨大なコードとして働いているわけです。例えば、このコードでは #include <WiFi.h>  がWi-Fi接続用のライブラリをインクルードしており、それがまさに「本体」とも言うべき巨大な存在なのですね。コードは極小なのにバイナリは数百キロバイト平気で超えるわけですから。

ちな、ESP32というのは5GHz帯には接続できません。2.4GHz専用になります。したがって、ルーターの種類によっては「ハマってしまう」パターンも存在するようです。

今回のWi-Fi用のコードでポイントになったのはココ:

  // ★重要:WiFi内部ログ抑制
  Serial.setDebugOutput(false);

これが無いと何が起きるのか。

シリアルポートには謎文字列が退去して押し寄せ:

��������������������

膨大なノイズの渦でシリアルモニター(=を含むAruduino IDE)がパンクして、ハングアップしてしまうのです。

この大量の「?」はなに?

って言うと、ちゃっぴーの見立てによると、シリアルモニターが解釈できない謎のコード列だとこの表示になるそう。そして、Wi-Fiチップがシリアルポートへ流しているステータス信号なのではないかと。確かに、WiFi.hを立ち上げるまで、シリアルポートには見られなかった現象。WiFiを止めればこのデータ列も止まる。

そもそも、シリアルポートというものは、出力の文字列を見るだけの役割ではないから、さまざまなものが流れてくる。

  • コードで指定した出力文字列以外にも、
  • Wi-Fiのチップセットが自らのステータスコードを垂れ流してきたりもする

そして、これは不具合や異常でもなんでもなくて、極めて自然。とのこと。

とはいえこれはAruduino IDEのシリアルモニタを止めてしまうほど凶悪な信号。当初、私はこれを止めたくて、深追いをし過ぎました。「異常」だと思い込んでしまったのです。そして、「止めることができるわけではない」。

  // ★重要:WiFi内部ログ抑制
  Serial.setDebugOutput(false);

上記抑制コードで「シリアルモニターでの見かけ上は」停められたかのように見えているだけで、現実にはポートには例の情報が垂れ流されている。そしてこれは自然。

「放置する」のが正解だったのです。

シリアルモニターでの文字列出力は、このセットの「完成形」とはなりえない。あくまでもデバッグ段階での確認用。と考えると、不必要に完成度を追うべきではない。

ちゃっぴーも「とっとと次のウェブモニターに行けば」とアドバイスしてくれました。

・・・

というわけで、Wi-Fi接続、成功です。

Wi-Fiに接続ができると、このセットが一挙に「Wi-Fiのノードのひとつに成れた」という達成感と感慨がありますね。あとはセンサーくっつけて、センサー信号A/Dして、情報ログに記録して、それをモニタリングできる適当なウェブダッシュボードを作ればいっちょ上がり。です。

それら、一挙に仕上げるのは難しくても徐々に徐々に拡張していけば、必ず最後は完成できると確信できました。

シリコンパワー ノートPC用メモリ DDR4-2400(PC4-19200) 8GB×1枚 260Pin 1.2V CL17 SP008GBSFU240B02

Synology NASを拡張した時に入れたメモリーがコレ!永久保証の上、レビューも高評価。もちろん正常に動作しており、速度余裕も生まれて快適です。

フィリップス 電動歯ブラシ ソニッケアー 3100シリーズ (軽量) HX3673/33 ホワイト 【Amazon.co.jp限定・2024年モデル】

歯の健康を考えるのならPhilipsの電動歯ブラシがお勧めです。歯科医の推奨も多いみたいです。高価なモデルも良いですが、最安価なモデルでも十分に良さを体感できる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

投稿者

KeroYon

関連投稿

YP-D7 (9)木製ベースの設計図を引き直し

当初、アルミブロック削り出しで考えていたYP-D7アームのアームベース。 しかし、素材温存の簡素化設...

タグ:

梅酒 2瓶目ハチミツ

2つ目の瓶を購入し、梅酒の仕込みが完了。左が黒糖梅酒。左がはちみつ梅酒です。1瓶目以上に、巨大で高級...

タグ:

今年も梅酒を仕込むのです(二瓶)

そう。 昨年の梅酒造りの大成功に味を占めた私は、今年も梅酒を仕込むのです。 しかも今年は2瓶も。 ワ...

ノイズ&温度モニター (1)ESP32初チャレンジ

ずいぶん前に各種パーツの詰まったAruduinoの詰め合わせセットキットを買っていました。でも、それ...

ルーム補正 (4)極端な平坦化は、グラフだけでなく音質も完膚なきまでに叩き潰した

さて前回。 miniDSP用に最適化した10ch-PEQを駆使して、上図のような特性を実現したわけで...

リハビリ-ショッピングライド〜からのH/O

毎日のように、少しずつの運動で、リハビリ/体力回復/ダイエットを頑張るのです。例をとると こんな感じ...