以前ビルドでエラーなど出なかったソースコードを再ビルドしようとしたらエラーが出るようなりました。ハードはWio Terminal、ビルドはArduino環境でWiFiClientを使うプログラムです。エラーは “esp_system.h not found” というもの。結構調べている人多いみたい。。。
※「トホホな疑問」投稿順Indexはこちら
何を隠そう(隠しませんが)、最初にビルドエラーに遭遇したのは
「IoT何をいまさら(74) M5StickC/M5StackからNode-REDにHello」
という投稿と同じことを Wio Terminalにやらせようとしていた時でした。私の目論見としては「ヘッダファイルの指定をちょいと変更して、M5StickCと書いてあるところをWio Terminalに差し替える」程度で動作する筈だったのです。しかし、動作するどころかコンパイルでエラー、ビルドが通りませぬ。不審な状況。念のため、先月は正常にビルドでき、元気に動いていた以下の投稿で使ったプログラムに差し替えてみました。
「IoT何をいまさら(60) Blynkで遠隔AnalogRead」
ビルドを試みたところ、またもや同じエラー ”esp_system.h not found”です。どうもあるソースの中でesp_system.hファイルをインクルードしようとするのですが、見つからずにエラーになっているみたい。
ArduinoIDEの下の方に出力されているビルドのLOGを見ていて、不審に思われたのはWiFiClient関連?の複数のライブラリで「重複」が報告されていることです。列挙すれば、Seeed_mbedtls.h、Seed_rpcUnified、sfud.h、rpcWiFi.hなど。なぜなのだろ~
思考停止。なんでもググれば問題解決とばかりに検索に走ってしまいました。どうも同じような問題に遭遇している人がいるみたい。Seeed社のフォーラムの記事にも
Can’t include rpcWiFi.h as esp_system.h is not found
などというページあり。しかし、調べれば調べるほど、いろいろな状況下で発生していて、その対処もいろいろ。闇雲に真似してみるのは躊躇われました。
気になっていた重複させたつもりないのに重複しているライブラリの件から調べることにいたしました。胸に手を当てて考えると「ビルド通っていた」時期と「ビルド通らなくなった今」の間に気になる1件があったのです。ArduinoIDEをお使いになっていたら経験あると思いますが、IDEが時々「ライブラリの更新あるよ」的なお知らせをくれるのです。何かコードを書いているときはメンドイので無視してしまうことが多いですが、あるとき罪悪感?がまさりライブラリマネージャを起動して片端から更新(よく見もせずに)かけてしまいました。そんな「更新」が挟まっていたのです。そして問題になっているライブラリには共通点がありました。
-
- 初回はZIPファイルダウンロードして手動でインストールした
- その後ライブラリマネージャから更新かけた
Seeed社のYouTubeチャネルの敬愛するLakshanthaお兄さんの動画にしたがい、該当のライブラリは全てGitHubからZIPファイルをダウンロードしてもってきて、手動でインストールかけたものです。その直後にはいくつかのプログラムで利用しています。その時はビルド、実行ともに問題ありませんでした。重複するライブラリが報告されるようになったのは、その後ライブラリマネージャから更新かけた後のように思います。
だいたい同じライブラリの筈なのにフォルダの名前が違うのです。
-
- ZIPからインストールしたものは末尾に_masterとか_devとかついている(GitHubからその時点で最新のブランチを持ってきている)
- 更新かけた方はシンプルなお名前
実際、ライブラリのフォルダ毎にコンペアかけてみると(伝統的にWinMergeにお世話になっております)、ライブラリの中身は似ているけれど、ところどころ違いがあります。#includeしているファイルも微妙に違う場所が散見されます。「そういうエラー」がでてもおかしく無さそうだ(ちゃんと全部追及してないですが。)
そしてビルドのLOGをしげしげと眺めると、重複しているライブラリの中で「選択」されているライブラリは_masterなどが付いているお名前場合もあり、シンプルなお名前が選択されている場合もあり、混在。選択のルールは不明ですが、
首尾一貫していないじゃないの!
実際に動作した実績のあるのは末尾に_masterとか_devとかついている、Lakshanthaお兄さんの動画オススメの方です。泣いてシンプルなお名前の方を切ることにいたしました(といって別なディレクトリに移動しただけですが。)なお、ArduinoIDEのライブラリマネージャにはアンインストールみたいなボタンは見つかりません。どうもライブラリのディレクトリから該当のライブラリを消去するだけで良いようです。
重複していたライブラリの一方(シンプルな名前の方)を除去後、再度ビルドを試みました。
ビルド成功
そして、オブジェクトコードをWio Terminalに書き込み。Node-REDのダッシュボード(最上部のアイキャッチ画像を御覧ください。micro:bit用のダッシュボードに「成りすまし」で書きこんでいるのだけれど。。。)をみやれば WioからのHelloが届いています。WiFi経由でラズパイ上のMQTTブローカに伝わり、Node-REDダッシュボードに伝達された、と。動きました、トラブったけれども。
ライブラリの更新は良く確かめてから、にいたします。