Arduino IDEで’std::round’ has not been declared

Arduino IDE 2.0以降にしてから、以下のエラーが発生するようになりました。使用するデバイスはM5StickCです。開発機はWindowsです。

ユーザフォルダ\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.4\cores\esp32/Arduino.h:183:12: error: 'std::round’ has not been declared
using std::round;

ネットで調べると、他でも結構出ているエラーです。エラーはstd::roundが未定義なのですから、ライブラリをインクルードすれば良いだけなのですが、できるだけ場当たり的な対応はしたくありません。ライブラリソースを書き換えることはしないで、インストール環境を修正することで対応します。

Arduino15フォルダ削除

今現在の環境に不整合が起きていると思われるので、削除します。これにはアンインストールで環境も削除するを選択してもうまくいかないので、手動で削除します。

ユーザフォルダ\AppData\Local\Arduino15

Arduino IDEが動作していない状態で、Arduino15フォルダ以下を削除します。

ボードマネージャーで再設定

Arduino IDEを再起動すると、ボード設定がなくなっています。そのため、再設定します。メニューの「ツール」「ボード」「ボードマネージャー」選択して、ボードマネージャーを起動します。

検索窓でESP32と入力します。そして、esp32 by espressif systems ver 1.06をインストールします。これで、ボード情報は再設定されました。

この後ビルドするとエラーはなくなり、プログラムの動作が正常にできるようになりました。

開発環境の不整合は良く起こる

ENV Hat IIIを使った高度計

今回の事件の発端は、ENV Hat IIIが動作しないことでした。Arduino IDE 1.x系でビルドしたプログラムを動作させると、ENV Hat IIIから0しか返答しなくなりました。Raspberry Pi上のArduino IDE 1.xだと大丈夫なので、Windows版のArduino IDE環境がおかしいことが分かりました。

Windows版でいろいろやって、どうせならArduino IDE2.0系にしようとしたら、今回のstd::round未定義になりました。プログラムの環境開発の維持って難しいです。組み合わせによって症状が異なるので、web検索しても解決に至るとは限りません。

M5Stackのようなシンプルなデバイスでも開発環境問題を避けられないのが、8ビット時代からプログラムをしていた自分には残念な気がしてしまいました。