ESP32 ( ESP-WROOM-32 , M5Stack )自分的 トラブルシューティング まとめ

arduino_esp32_trouble00 ESP32 ( ESP-WROOM-32 )

34.自作ライブラリ ESP32_mgo_tec で「SD.h」、「WiFi.h」に対して複数のライブラリが見つかりました、などのコンパイルエラーが出る

私の自作ライブラリ、ESP32_mgo_tec で、Arduino-ESP32 でコンパイルする場合、以下のようなエラーが出る場合があります。

「SD.h」に対して複数のライブラリが見つかりました
使用済:C:\Users\.....\Local\Arduino15\packages\esp32\hardware\esp32\1.0.0\libraries\SD
未使用:D:\...............\arduino-1.8.6\libraries\SD
In file included from C:\Users\.........\Documents\Arduino\libraries\ESP32_mgo_tec-master\src\ESP32_mgo_tec_bV1\Sensor\display_bme280_i2c.cpp:33:0:

「WiFi.h」に対して複数のライブラリが見つかりました
C:\Users\.........\Documents\Arduino\libraries\ESP32_mgo_tec-master\src/ESP32_mgo_tec_bV1/Sensor/display_bme280_i2c.h:44:64: fatal error: bme280.h: No such file or directory

使用済:C:\Users\........\Local\Arduino15\packages\esp32\hardware\esp32\1.0.0\libraries\WiFi
compilation terminated.

未使用:D:\...............\arduino-1.8.6\libraries\WiFi
exit status 1
ボードESP32 Dev Moduleに対するコンパイル時にエラーが発生しました。

原因

このライブラリでは、BOSCH製センサ BME280 と、BME680 ライブラリをincludeしています。
そのライブラリがインストールされていないとエラーが出ます。

対策その1

BOSCH純正ライブラリをインストールするか、不要ならば、そのライブラリを削除します。
インストールする場合、GitHub のBOSCH純正ライブラリは以下のリンクにあります。

●BME280ライブラリ
https://github.com/BoschSensortec/BME280_driver
●BME680ライブラリ
https://github.com/BoschSensortec/BME680_driver

対策その2

使わないセンサライブラリファイルを削除する。
Windows 10 の場合のファイルパスは以下です。

C:\Users\__user_name__\Documents\Arduino\libraries\ESP32_mgo_tec-master\src\ESP32_mgo_tec_bV1\Sensor

このフォルダ中で不要なセンサのライブラリを削除してください。
BME280が不要ならば、以下の2つのファイルを削除。
display_bme280_i2c.h
display_bme280_i2c.cpp

BME680が不要ならば、以下の2つのファイルを削除。
display_bme680_i2c.h
display_bme680_i2c.cpp

両方不要ならば、Sensorフォルダごと削除してください。

35.Web記事取得していて、数時間後に記事取得失敗し、さらに時間が経つと勝手に再起動(リセット)してしまう

Arduino – ESP32 の WiFiClientSecure ライブラリを使って、SSL サイトから記事を定期的に GET している時、数時間後には記事取得に失敗し、さらに時間が経つと勝手に再起動してしまう場合があります。

原因

Arduino IDE の「ツール」の Core Debug Level:”Verbose” にしている状態で起きます
記事取得後に
WiFi.mode( WIFI_OFF );
を実行して、再び
WiFi.begin()
を繰り返すと、mbedtlsライブラリによって heap memory が少しずつ食い尽くされて、SSLコネクション確立できなくなり、記事取得失敗します。
最終的には再起動してしまいます。

対策

以下の記事を参照してください。
ESP32 および M5Stack で数時間後に Web 記事取得失敗する問題について

36.Web記事を複数取得していて、数時間後になぜか最初の一記事だけ取得失敗し、再接続できない

ESP32 や M5Stack で、Yahoo! Japan RSS ニュース記事などを複数記事、連続して取得している場合、数時間後になぜか最初の一記事だけが取得失敗し、再接続できないことがあります。
前項の対策や、固定 IP 設定していても取得できない場合があります。

原因

Arduino – ESP32 で、WiFiClientSecure ライブラリの client.connect 関数で、最初の Host 接続に失敗することが原因です。

対策

以下の記事の最後の方に追記しましたので、そちらを参照してください。

ESP32 および M5Stack で数時間後に Web 記事取得失敗する問題について

37.M5Camera ( M5Stack社 )で、Arduino – ESP32 のサンプルスケッチ CameraWebServer が動かない

M5Stack社の M5Camera を Arduino core for the ESP32 のサンプルスケッチ CameraWebServer を使っていて、以前は問題無くコンパイルできて動いたのに、Arduino core for the ESP32 を最新版にしたら、動かなくなった。
シリアルモニターでエラー表示が出る。

原因

Arduino core for the ESP32 が stable 1.0.1 と 1.0.2 では、「スケッチ例」のサンプルスケッチ構成が異なります。

対策

以下の記事に stable 1.0.1 と 1.0.2 用の2つのサンプルスケッチを掲載しました。
M5Camera をレビューしてみた。分解したり、Arduino IDE でスマホに映したりする実験
(2019/04/28)

38.A fatal error occurred: MD5 of file does not match data in flash! というエラーが出る(Arduino core ESP32 でコンパイル書き込み時)

Arduino core for the ESP32を使って、ESP32開発ボードにコンパイル書き込み実行する時、

A fatal error occurred: MD5 of file does not match data in flash!

というエラーメッセージが出る場合があります。

原因

確かな原因は分かりませんが、GPIO #12 にHSPI用のデバイス以外のものを接続したまま、コンパイル書き込み実行すると、MD5エラーが出るようです。
この端子は、JTAGというシリアルデバッグ用のインプット端子が割り当てられているようで、これが何やら悪さをするかもしれません。
間違えていたらゴメンナサイ。

原因

こちらの記事のコメント投稿で、nopnop2002さんから情報を頂きました。
ESP-IDFのSD MMC使用に関するGitHubの以下のページ
https://github.com/espressif/esp-idf/blob/master/examples/storage/sd_card/sdmmc/README.md
にGPIO #12が使えない理由が書いてありました。
GPIO #12は、フラッシュチップ(VDD_SDIO)に電力を供給する内部レギュレータの出力電圧を選択するためのブートストラップピンとして使用されているためだそうです。
(2021/09/14修正)

対策

GPIO #12には何も接続しないようにした方が良いと思います。

どうしても使いたい場合は、コンパイル時にGPIO #12の接続を外してからコンパイル書き込み実行してみてください。
その後、GPIO #12 に接続すれば、とりあえずはできそうです。

39.コンパイル書き込み後、再起動(リセット)を繰り返してしまう

Arduino core for the ESP32でコンパイル書き込みを行った後、実行させると、再起動を繰り返してしまう場合があります。

原因

Espressif Systems社発行の、ESP32データシートを見てみると、以下の型番のESP32のCPUは240MHzでは動作せず、160MHz限定だと書いてあります。
ESP32-S0WD
ESP32-D2WD

ESP32関連ボードはAmazon等で様々な種類が発売されていて、中には160MHz限定のESP32と知らずに買ってしまって、Arduino core for the ESP32のバージョンv1.0.2以下でコンパイル書き込みすると、再起動を繰り返してしまうということがあるようです。
Twitter のdesmoquattro996さんから情報いただきました。
ありがとうございました。

対策

desmoquattro996さんによると、Arduino core for the ESP32のバージョンをv1.0.3以降にすると良いそうです。

40.コンパイル時に array subscript is above array bounds というエラーが出る

Arduino core for the ESP32 のコンパイラオプションを「全て」にしていて、コンパイルする時に、

error: array subscript is above array bounds [-Werror=array-bounds]

というエラーが出て、コンパイルできない時があります。

原因

配列定義で確保した範囲より外れた位置の値を参照しようとする時にそういうエラーが出ます。
例えば、以下のようなコードです。

void setup() {
  Serial.begin(115200);
  char c[5] = "test";
  Serial.println(c[7]);
}

void loop() {
}

対策

初期化定義で指定した範囲内の配列を参照することです。
例えば、上記の誤ったコードを修正すると、以下のようになります。

void setup() {
  Serial.begin(115200);
  char c[5] = "test";
  Serial.println(c[3]);
}

void loop() {
}

41.コンパイル時に jump to case label というエラーが出る

Arduino core for the ESP32 でコンパイルすると、

jump to case label [-fpermissive]

というエラーが出る場合があります。

原因

switch文の中で、変数の定義、初期化をした場合にエラーが出るようです。
例えば、以下のような例です。
3行目でIPAddress型の定義と初期化をしています。
これはエラーになります。

  switch(event) {
    case SYSTEM_EVENT_STA_GOT_IP:
      IPAddress myIP = WiFi.localIP();
      Serial.print("WiFi connected! IP address: ");
      Serial.println(myIP);
      udp.begin(myIP, udp_port);
      connected = true;
      break;
    case SYSTEM_EVENT_STA_DISCONNECTED:
      Serial.println("WiFi lost connection");
      connected = false;
      break;
    default:
      break;
  }

対策

switch文の外で変数の宣言、および初期化を行うと良いです。
上記のものを改善した例が以下です。

  IPAddress myIP = WiFi.localIP();
  switch(event) {
    case SYSTEM_EVENT_STA_GOT_IP:
      Serial.print("WiFi connected! IP address: ");
      Serial.println(myIP);
      udp.begin(myIP, udp_port);
      connected = true;
      break;
    case SYSTEM_EVENT_STA_DISCONNECTED:
      Serial.println("WiFi lost connection");
      connected = false;
      break;
    default:
      break;
  }

42.M5Stack Fireで、PSRAMを有効にしてArduino IDEでコンパイル書き込みすると、シリアルモニターに spiram: SPI SRAM memory test fail というメッセージが出て、PSRAM領域を確保できない

M5Stack Fireを使って、Arduino IDEでPSRAMを有効にしてコンパイル書き込みすると

spiram: SPI SRAM memory test fail

というメッセージが出て、PARAM領域を確保できず、リセットを繰り返すことがあります。

原因

M5Stack FIRE の場合、生産された時期のロットにより、PSRAMが認識されない場合があるようです。
ただ、私の場合は、2019年8月以降のロットでしたが、それでもPSRAM認識できませんでした。
これは、Bottomのport CのUART通信用のGPIO #16, #17がSRAMと接続されていて、何かしらの影響があることが原因のようです。

対策

私の場合は、手持ちの1kΩチップ抵抗をハンダ付けして対処したら正常に認識するようになりました。
詳しくは以下の記事をご覧ください。
M5Stack FIRE (PSRAM付き)およびIPSタイプのLCD ILI9342Cを使ってみた

コメント

  1. H.W より:

    mgo-tecさん、H.Wです。
    本件記事中の’ESP32トラブルシューティング’の件で、以下ご教示下さい。

    M5stackで当初からスケッチの書込み時に’connecting…—…—…’が永遠に継続し、取りあえずその対処方法として、BOTTOM基板コネクタのRSTとGND間に1.5〜3.3μFのコンデンサを挿入し、この対処法で1ヶ月程継続対応して特に問題なかったのですが、ー昨日、スケッチ書込み時に突然画面が消え、その後リセットを何度繰り返しても全く再起動しなくなってしまいました。。。

    考えられる原因として、BOTTOM基盤の勘合が当初から多少緩く、接触不良or外れていた可能性があります。また、例のマグネット式USBケーブルの接触不良で書込み時の電圧が低下していた可能性もあります。

    目下、購入元のスイッチサイエンスにもこれ迄の経緯も含め、その旨対処方法を問い合わせ中ですが、目下のところ回答が貰えていません…

    この様な状態になってしまったら、ファームウェアを書き直す以外に方法はないのでしょうか?
    またファームウェアを書き直す場合、具体的な手順はどうしたらいいのでしょうか?

    ご多忙中、誠に申し訳ありませんが、ご教示頂けると幸いです。

    • mgo-tec mgo-tec より:

      H.Wさん

      それはそれは面倒なことになりましたね。
      私にも正直分かりませんが、H.Wさんがおそらくおっしゃる通り、スケッチ書き込み中に電源が落ちたということは、ファームが壊れた可能性大ですね。
      粗悪 USB ケーブルは思いのほかインピーダンスが高く、瞬時大電流で思いのほか電圧降下するので、それが原因の可能性もありますね。
      ファームの書き換え方法については私はよく知りませんが、ネットでは情報が沢山あると思います。
      早く治って欲しいですね。

      因みに、私の M5stack で Windows10 環境の場合、最近はUSB書込みに苦労することはありませんでした。
      もしかしたら、H.W さんの今までの書き込み不良はUSBケーブルだったということも考えらそうな気がします。

      ということで、あまりお役に立てる回答ができず申し訳ございません。

  2. H.W より:

    mgo-tecさん、
    早速のご連絡有難うございます。

    実は諸般の事情から、IDE用の基幹PCはWindows7を使用しており、一応USBシリアルドライバはCP2104の最新版とはなっていますが、スケッチ書込が上手く行かない主原因はこの環境のせいではないかと思っています。

    尚、ESP32のファームウェア書込みツール(flash_download_tooles_v3.6.4_0)を以前DLしていたことを思い出し、試しにGithubでM5cloud用のfirmwareは直ぐに見つかったので、これを上記ツールで書き込んで起動&リンクさせることはできましたので、少なくともCPUは死んでいないことは確認できました。

    しかし、どういう訳かm5stackの’工場出荷時firmware’が、思い付くリンクの何処をどう探しても見つかりません。
    (最初に出荷時状態をバックアップしておけばよかったのですが、それを怠ったことが悔やまれます。。。)

    尚、スイッチサイエンス側からは未だ回答がなく、どうも技術的なサポートはされない様なのでちょっと期待薄です。

    もし、工場出荷時firmwareの所在情報等でご存知な事がありましたら、宜しくお願い致します。

    • mgo-tec mgo-tec より:

      申し訳ございませんが、ファームのある場所は知りません。

      私の場合は、ESP32が起動しなくなった時、ファームを書き替えた経験はありませんので、やり方を知りません。
      私は、以下の記事
      ESP32 ( ESP-WROOM-32 , M5stack )自分的 トラブルシューティング まとめ
      の、9番項目の「原因その2」に書いてあるように、Flash の NVS領域を初期化して、最新版 Arduino – ESP32 を入れ直したら、いつの間にか起動できるようになっていた経験があります。
      あまり参考にならないかも知れません。

  3. H.W より:

    mgo-tecさん、
    ご多忙中、煩わしい問い合わせをしてしまい誠に申し訳ありません。

    取りあえずCPUが無事だったことは分かり、M5Cloudのfirmware導入でWeb上のIDEを経由してMicroPythonでプロジェクトが組めたり、既にご存知かもしれませんが、microSDに保存された複数のアプリを自由に切り替えて実行できる、’M5stack_MultiApp_Advance_Firmware’なる素晴しいファームがUPされている事も発見できましたので、結果オーライといったところです。
    (これで必ずしも元のfirmwareが必要ということは無くなりました。。。)

    尚、その後ハード面ではPROTO基板を手に入れ、
    1)RSTとGND間に電解コン(3.3μF)を追加。
    (多少容量が大きいですが、手元に実装できる小型コンデンサがこれしか無かったのと、経時変化で容量が最悪半減するだろう事を想定して良しとしました。)
    2)手持ちのLipo電池(860mAh)を裏側に追加。
    (並列接続するのはあまり良くないとされてますが、BOTTOM基板に実装されてる150mAhと合せて1100mAhまで増量。これで、5時間以上の連続動作が可能となりました。。。)
    3)バッテリーモニタ回路を追加。
    小型LED、チップTr(2SC2712)、チップ抵抗(470, 10k)、半固定ボリューム(5k)で回路を組み、本体側の既存穴からモニターできるようにしました。
    (Lipo電池が3.3Vまで低下したらLEDが消えるように、BE間のボリュームで輝度を微調整。尚、使用しない時は完全消灯できる様に小型SWも一応実装。)

    しかしながら、PROTO基板は高さ制約が厳しく、実質チップ部品でないと、自由な配置の回路実装はかなり難しいですね…

    • mgo-tec mgo-tec より:

      H.Wさん

      いえいえ、あまりお役に立てずスミマセン。
      私も思っていたのですが、必ずしも工場出荷時のファームは必要ないと思っています。
      ですから公開しているサイトが無いんでしょうね。
      CPUやその他の回路が生きてさえいれば、Arduinoスケッチが流し込めるのではないかと、個人的に勝手に思っています。

      バッテリーモニタはイイですね。
      私もいつかバッテリー監視ICで回路を組んで、マウントしたいと思っていました。
      というか、M5StackにはそのICが積まれているので、データシートを見れば、どこかにバッテリーモニター出力がありそうな気がします。

      ということで、いつもコメントありがとうございます。
      なにか面白いものができるといいですね。

  4. amisuke1701 より:

    初めまして、amisuke1701と言います。

    「9.今まで問題無かったのに、急に Wi-Fi ( WiFi )に繋がらなくなった」、大変参考になりました。私も突然wifi接続ができなくなり焦っておりました。残念ながらこちらの手順を試しても復旧せずあきらめていたところ、以下手順で復旧しましたので参考に掲載します。

    無線ルーター(Aterm WG2600HP)
    暗号モードをWPA/WPA2-PSK(AES) => WPA2-PSK(AES)に切り替える
    これで復旧しました。暗号モードを戻しても問題なくなりました。
    原因は不明で、復旧理由も不明ですw。

    以上、参考までに。

    • mgo-tec mgo-tec より:

      amisuke1701さん

      記事をご覧いただき、ありがとうございます。

      それは新しい手法ですね。
      これはルーターとのコネクションに何らかのバグがあるんでしょうか?
      いずれにしても、貴重な情報ありがとうございます。

      Twitter でもこの情報を流しておきますね。
      もしかしたら、悩んでいる方々の解決につながるかもしれません。

      有難うございました。
      m(_ _)m

  5. Masaki より:

    はじめまして!

    とても参考にさせていただいています。

    下記、私も同じ現象でした・・・
    このブログを見なかったら、意味がわからず途方にくれるところでした。


    M5Stack 側の USB-TypeC では、挿し込み方向によって、パソコン側がCOMポートとして認識しないことがあります。
    M5Stack 付属の USB-TypeC ケーブル、または M5Stack 側のUSB-TypeCポートの結線に問題がありそうです。
    (詳しく調べていませんが、私の場合、上下逆に挿し込むと認識しないことが確認されています。)

    • mgo-tec mgo-tec より:

      Masaki さん

      記事をご覧いただきありがとうございます。
      無事に動いて良かったですね!
      そう言っていただけると作った甲斐があり、嬉しいです。
      (^^)

  6. リュウ より:

    ——————————————————————-
    14.「○○.h」に対して複数のライブラリが見つかりました。というメッセージが出て、コンパイルできない
    例えば、Arduino IDE のコンパイルを実行して、

    「WiFi.h」に対して複数のライブラリが見つかりました
    というメッセージが出て、コンパイルできないことがあります。
    ——————————————————————-

    ⇒14番について、私も同じ現象でした。そちらのパタンに該当するかかどうかは分からないですが、一応情報共有させていただきます。
      「WiFi.h」に対して複数のライブラリが見つかりました

    僕はWINDOWS 10を使っています。
    最初僕はWindows Installer版しか使っていないです。何も問題ありません。その後、Windows app版をインストールすると、上記ライブラリ重複エラーが発生してしまいました。
    解決方法はWindows Installer版をアンインストールしかできないようです。(※Windows app版のアンインストールは解決出来ていなかったです)

    • mgo-tec mgo-tec より:

      リュウさん

      ブログにお越しいただき、ありがとうございます。

      Windows Installer版やapp版とは、Arduino IDEのことですか?

    • 通りすがりものです。 より:

      リュウさん
      私も全く同じ状態にハマり、ライブラリのincludeの重複が無いことも確認したのですがエラーが消えず、PCを再起動したらエラーはでなくなりました。
      原因不明で気持ち悪いですが、参考までに。

  7. とんかつ より:

    問題30.
    (Guru Meditation Error: Core 0 panic’ed (LoadProhibited). Exception was unhandled.)
    に関連して。
    こんにちは
    ESP-IDFで書込み、ESP32Webラジオを聴いています。
    プログラムの中に
    ホスト局のURLを記述してる「playlist」ファイルが有るのですが、
    この記述様式が、「デフォルト」状態の様式から逸脱していると
    このエラーが出る様です。
    ホストのURL追加したり削除したりするとき
    うっかりこの「様式」を外して仕舞う場合が有ります。
    この、「誤記」に気づけないと・・・
    make flash
    しても、中で再起動を繰り返してパニクり「訳が解らん・・」となりますが
    現象の直前の自分の行いとコマンドプロンプトのモニタ出力を
    観て、この「誤記」に気づき、修正で正常動作に戻りました。
    「グルの瞑想エラー」は、お遊びの「命名」らしいです。
    モニタでこの記述を観ると、『一瞬、何が起きたのか!』と
    思いますが・・私のケースでは
    その原因は、「playlist」ファイルの中の単なる「誤記」でした。

    • mgo-tec mgo-tec より:

      とんかつさん

      トラブル対処のコメントありがとうございます。
      悩んでいる読者の方々に助けになると思いますので、トラブルシューティングにコメントリンクという形で反映させて頂きますね。
      感謝、感謝です。
      m(_ _)m

  8. 通りすがり より:

    はじめまして。

    >以下の記事を参照して、Wire.begin関数を含めた全ての Wire関連関数を同じタスクに置いて下さい。

    これは過去の情報でしょうか。

    • mgo-tec mgo-tec より:

      通りすがりさん

      記事をご覧いただき、ありがとうございす。
      そのとおり、もう随分前の過去の情報です。
      この記事の1年くらい更新しておりません。
      スミマセン。
      m(_ _)m

  9. 通りすがりの開発初心者 より:

    こんにちは
    Compilation error: WiFi.h: No such file or directoryというえエラーが発生し、先に進むことができません。

    • mgo-tec mgo-tec より:

      通りすがりの開発初心者さん

      ブログをご覧いただきありがとうございます。

      ただ、頂いた情報だけでは私は何も判断できません。
      以下の情報を教えてください。

      1.使っているマイコンは何か?
      2.Arduino IDEのバージョン
      3.Arduino core for the ESP32 のバージョン
      4.何を実行した時にそのエラーが出現したか?

      あと、現在、このブログでのESP32やM5Stackの記事更新はしばらく停止中です。
      私自身もしばらく触っておりませんので、最近の情報は分らないことがあることをご了承ください。

  10. Polinky310 より:

    こんにちは
    急にESP32がWiFiに繋がらなくなり、予備機に交換したら動きます。
    当ESP32は故障で、販売元に文句を言って廃棄かな…と思っておりましたが、
    当記事を見つけてRTSのリセットをしてみました所、うまく動くようになりました。
    これで廃棄せずに済んだのと、今後も発生したであろう現象を回避することが
    できました。
    大変お世話になりました。ありがとうございました。

    • mgo-tec mgo-tec より:

      Polinky310さん

      記事をご覧いただき、ありがとうございます。

      現在はESP32やM5Stackは使っていなくて、この記事も更新しておらず、だいぶ古くなってしまいました。
      私はいろいろすっかり忘れてしまい、RTSって何だっけ? という状態でしたが、何はともあれ、廃棄せずに動いて良かったですね。
      この記事もそろそろオワコンで、削除しようかなと思っていたところです。
      おかげ様で、まだ利用がありそうなので、しばらくこのままにしておこうと思います。
      こちらこそコメント頂き、ありがとうございま~す!
      m(_ _)m

タイトルとURLをコピーしました