ESP32のLチカでハマる

ESP32の開発環境が気になり入手してみました。秋月電子では800円で販売されている小型のワンボードマイコンです。
先ずは簡単なLチカプログラムを実行してみたのですが、これがエラー続きで数時間ハマってしまい。
コンパイル後に出来立てのソフトウェアはPCからESP32に転送されるのですが「a fatal error occurred: failed to connect to esp32: no serial data received.」とのエラーが続いてしまい。
結論から言うと今回の原因は通信用のケーブルのRXとTXの誤接続が問題でした。RXにはTXを接続すべきでRXとRX、TXとTXを繋いでいました。受信と受信、送信と送信が衝突する配線をしていました。
ボード上のRXとTXはそれぞれその信号を受け入れる名前だと誤解していました。

他にも開発環境側のソフトウェアやライブラリにもバグがあったらしく、それも一部問題だったかも知れず。PCとESP32を接続させる通信速度の設定も問題だったかも知れず。
最初は何が問題なのかサッパリ判らず、入手したESP32が不良品だったのか、はんだ付けで失敗したのか、PCとESP32を結ぶケーブルが不良品だったのか色々と考えてしまい。
Lチカ(LEDを点滅させるだけの数行のプログラム)さえまともに動作しないようですと、高度なことなど何も出来ずで。
この小さなボードはArduinoというメジャーだったボードより桁違いに高性能で、低消費電力で、Wi-FiやBluetoothの通信機能も最初から実装しています。

PCとESP32を接続するケーブルについては途中で閃き、問題無いことが確認出来ました。
30年ほど前にRS485の開発環境に関わった際の経験がちょっと役立ちました。ターミナルソフト(Tera Term)を2つ立ち上げてそれぞれのケーブルに送信と受信をさせたところ問題無く。USBの5Vの電圧は既にマルチメーターで問題無いことも確認していました。
一つだけでも問題が無いのに気付けたのはかなり重要でした。

エラーの原因について検索すると、やはり色々な問題が考えられるそうです。世界中のエンジニアがハマっていました。
最終的に上記の誤接続に気付くまで半日掛かってしまい。
なので動作した時はかなり嬉しく。こんな初歩的なプログラムでも。

ワンチップマイコンやワンボードマイコンの開発環境に触れるのも20年ぶりくらいです。以前の仕事でPICにアセンブラで組込の小型カウンターを作ったことがあり。
ワンチップマイコンのPICも数百円程度でしたが、書き込み用のライターが必要だったり、そのライターもキットで数千円したり、今回の開発環境に比べると手間もお金も掛かったものでした。
ArduinoやESP32の場合はボードやIC自体に通信ポートがあり、USBケーブルを接続させるだけで書き込みが出来てしまい。初期投資はほとんど不要で。
開発用のソフトも特に機能制限が無しで無料で公開されています。

今回入手した秋月さんのESP32はPCと接続するUSB端子を持っておらず、ピンヘッダーで5VとGNDとRXとTXが剥き出しな仕様でした。
他の製品ではUSBのタイプC端子が実装されていたり、そちらの方が楽ではあったのですが、入手するまでに時間が掛かり。AmazonにしてもAliexpressにしても更に安いのがありました。しかし、中国からの輸入で配送に一週間ほど掛かり。
それと、無線通信の部分で技適を取得していなそうでして。技適については半年ほどの実験であれば総務省に申告するだけで免除されたりだそうですが、面倒臭く。
最初からUSB端子が実装されていたら、誤接続も無く今回の様なトラブルに見舞われずに済んだと思います。ただ、基本的な部分の問題に気付かず「何となく上手く行った」パターンは後々良くなく。
そう思うと「良い経験だった」と。

ソフトウェアの開発環境で使う言語は色々と選べられるそうです。今回はC言語にしました。Lチカのプログラムソース類もネット上に出回っていましたし、もっと高度なソースも色々と出回っています。
最初は意味の分からないソースであってもパラメータの変更くらいは誰でも出来ますし、先ずはそこからかと思えますし。
ただ、最初に入手したLチカのソースコードも問題あったりでした。変数名の宣言が冒頭に綴られていない良くない例というか。僅か数行のコードでも守るべきかと。
過去にPICでプログラムを組んだ際も変数名や定数は最初に記載して、パラメータの変更は最初の数行をちょっと書き換えるだけで動作出来る作りにしていました。
途中で突然現れる変数とか定数とかソースコードを全て読む必要があり、解読が面倒です。

どうしてESP32に興味持ったかというと、前途した通り開発環境が整っていたりArduinoより桁違いに高性能な面があったり、無線通信機能を最初から実装していたり、入手性が良かったり、安かったり、サンプルプログラムが豊富だったり。
そして何よりもOSを搭載していない点です。初代のRaspberry Piも十年以上前に試しましたが、OSを搭載していたのでハードウェアの制御はちょっと面倒でした。Webサーバーとか音楽配信用のサーバーとかの用途では便利でしたが。
開発者に依ってはOSがあった方が開発しやすいのでしょうけれど、ハードウェアに直接アクセス出来るソフトウェアの方が私の好みでして。
そして何よりも、現行のRaspberry Piが高価になり過ぎてしまいました。一万円以上します。
初代でもそうだったのですが発熱量は多かったですし、当時はブートに必要だったSDカードもその熱のせいだかで一年くらいで壊れてしまい。(MPDとして実用していました)
現行のRaspberry Piは消費電力が更に増えていて、24時間365日稼働させるのはちょっと考えさせられるスペックでもあります。
Raspberry Piには小型の機種もある様ですが、あまり興味なく。I/O周りが最初から充実しているOS無しのボードの方が私の用途に合っていそうです。

用途は星の数ほど考えられるESP32、通信速度は無線も有線も限られている様です。ここだけはちょっと残念で。
ちょっと実用的なモノを作ってみたいところです。
もう一つ大切なのが、その辺の経験がホビーの範囲であっても次の仕事に役立ったことです。Debianで様々なサーバーを立てた経験も結果的にかなり役立ちました。
経験豊富なエンジニアでも、その分野に触れたことが無いと同じルートを辿りがちで。

Comment