arduino_esp32_trouble00

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

記事公開日:2018年2月1日


スポンサーリンク


【目次ページへ】

25.Arduino – ESP32 で CPUフル稼働しながら、 Wi-Fi機能だけOFFにして消費電力を抑えたい

Arduino core for the ESP32 で開発していて、Wi-Fi 接続していても、Web から記事やデータを GET したあとは、しばらく Wi-Fi アクセス不要な場合が殆どです。

その間、ESP32 ( ESP-WROOM-32 )の Wi-Fi機能を ON にし続けていると、約 100 mA くらいの大電流が無駄に消費されています。
そして、ESP32 ( ESP-WROOM-32 )がかなり発熱し、特に裏側の発熱が多く、触っていられないくらいです。
不要な時は Wi-Fi 機能だけ OFF にすれば、CPUフル稼働でも、消費電力もかなり抑えられます。
これは、ESP32 のデータシートにある、Modem-Sleep のようなものです。
この方法は以下の記事を参照してください。

ESP32 の Wi-Fi のみ OFF および温度・湿度・気圧センサー BME280 の再調整など

26.I2C通信( Wireライブラリ使用)で、すぐに通信エラーになる

Arduino core for the ESP32 のマルチタスク動作プログラムを組んで実行させると、I2C 通信が数十分で途切れ、シリアルモニターに、esp32-hal-i2c.c関連エラーログが多量に吐き出されることがあります。
又は、ACK read Time Out エラー表示されることがあります。

原因

2018/06/28以降更新された、最新版 Arduino – ESP32 で、Wireライブラリが一新されました。
マルチタスクで使用する場合、別タスクで Wire 関数を使うと、数十分後に必ずエラーになります。
Arduino IDE 「ツール」メニューの「Core Debug level」を「Verbose」にすると、esp32-hal-i2c.c関連エラーログが多量に吐き出されます。

対策

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

Arduino – ESP32 大幅更新( 2018/06/28以降 )と I2C 不具合解決、その他気付いたこと

27.ESP32 ( ESP-WROOM-32 )の電源が急に落ち、再起動する

プログラムに問題が無く、順調に動作していた ESP32 ( ESP-WROOM-32 )が、急に電源が落ち、すぐに再起動することがあります。
しかも、定期的にそれを繰り返すことがあります。

原因予想

あくまで私自身が経験した原因は、USBケーブルを延長して1m以上の長距離だったり、粗悪なものを使っていたり、USBケーブルが細かったりした場合に起こります。
また、安物の USB ハブを使ったり、バッテリー電圧が低下した場合にも起こり得ます。
特に、ESP32 が Wi-Fiアクセスしようとする時に起こります。

これは、ESP32 が Wi-Fiアクセスする時、電流を多く吸い込むので、長距離のUSBケーブルや、細い粗悪なUSBケーブルの場合、USB電源ラインの電圧降下が起きて、ESP32 に供給されている電源電圧が 2.3V を一瞬でも下回っているために起こると考えられます。

また、外部電源供給の無いUSBハブは、瞬時の大電流に対応できる回路が無いことが殆どなので、電圧降下して電源が落ちる可能性があります。

バッテリー使用も同様で、電圧が低下していると同じようなことが起こる可能性があります。

対策

USBケーブルを良質な太く短いケーブルに交換する。
私の場合、ht-dekoさんから教えてもらった、以下のケーブルを使用しています。
0.9m のものを使用していて、特にトラブルはありません。

Amazon.co.jp

また、その他、

●USBハブは使わない。
●バッテリーの電圧を管理する回路をつけて、一瞬でも ESP32 の動作電圧以下にならないようにする。

ESP32 に供給される電源は、2.3V 以上ならば安全とは思わないでください。
それ以上でも動作不具合が起きる可能性があります。
できるだけ、3.0V を下回らないようにした方が賢明と私は考えています。

ESP32 ( ESP-WROOM-32 )の電源周りについては、素人の私なりに実験した以下の記事を参照してみてください。

●ESP-WROOM-32 ( ESP32 )の消費電流を電流プローブ無しで測定してみました
●ESP-WROOM-32 (ESP32) の 電流 測定 その2
●ESP-WROOM-32 ( ESP32 ) のUSB電源突入電流(インラッシュカレント)を考える
●ESP-WROOM-32 ( ESP32 ) の保護機能付き電源強化対策の実験

28.Arduino-ESP32で、collect2.exe: error というエラーが出てコンパイルできない

Arduino core for the ESP32 で開発していて、そのスケッチで正常に動作していたのに、ちょっとプログラムを変えてコンパイルしたら、

collect2.exe: error: ld returned 1 exit status

というメッセージが出て、コンパイルが通らない場合があります。

原因

おそらく、配列などの宣言で、ESP32 の RAM 容量をオーバーしていると思われます。
例えば、私の場合、下図の様に配列をべらぼうに大きくしてコンパイルしたら、エラーが出ました。

esp32_trouble_shooting01.jpg


このメッセージを右方向にスクロールして見ると、下図の様な、DRAM が 43008 byte オーバーフローしているというメッセージが出ていることから分かると思います。

ld.exe: region `dram0_0_seg' overflowed by 43008 bytes

esp32_trouble_shooting02.jpg


対策

配列容量を減らすことです。
グローバル変数領域で宣言する場合、容量を注意しながらプログラミングすることです。
配列宣言の場合、できるだけローカル関数内で宣言するようなプログラムを組めば、ローカル関数を抜けると、そのメモリ領域が解放されるので、その領域を別の関数で使い回しができます。

また、読み取り速度がそんなに速くなくても良ければ、SPIFFS や EEPROM から読み取るようにするとメモリを節約できます。

29.Arduino-ESP32でシリアルモニター出力中に謎のリセット(再起動)してしまう

Arduino core for the ESP32 でコンパイル書き込み実行して、シリアルモニターに出力していると、謎の再起動(リセット)してしまうことがあります。

原因

2018/06/28版~
(Commits on Jun 28, 2018~)
の Arduino – ESP32 で、Arduino IDE 「ツール」メニューの「Core Debug Level」を「Verbose」にしていると、Core のログやエラーログを出力中に再起動してしまうことがあります。
おそらく、ログ出力の何らかのバグかも知れません。

対策

Arduino IDE 「ツール」メニューの「Core Debug Level」を「なし」にしてみてください。
今後、最新版では、修正される可能性があります。

30.Arduino-ESP32でシリアルモニター出力中に Guru Meditation Error: Core 0 panic’ed と表示され、強制リセット(再起動)してしまう

原因

おそらく、ESP32 をマルチタスクで動作させていて、Core 0 のタスクのメモリ設定を超えた配列領域を確保したり、多くのヒープメモリを使っている為に、Core 0 の CPU がパニックを起こして再起動してしまうと思われます。

対策

例えば、setup関数内で、以下のように Core 0 を 4096byte でメモリ領域を確保するとします。

xTaskCreatePinnedToCore(Task1, "Task1", 4096, NULL, 5, &th, 0);

これで、Core 0 panic’ed エラーになる場合は、

xTaskCreatePinnedToCore(Task1, "Task1", 8192, NULL, 5, &th, 0);

にしてみてください。
ただし、あまり Core 0 を大きくし過ぎてしまうと、メインloopタスクの Core 1 が動作しなくなる場合もあるので注意してください。
マルチタスクについては以下の記事を参照してください。
Arduino – ESP32 のマルチタスク ( Dual Core ) を試す

31.M5Stack でUSBポート(USBシリアル COMポート)が認識しない

M5Stack をパソコンのUSBポートに接続しても、認識してくれないことがあります。

原因

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

また、M5Stack 等の ESP32 マイコンは、WiFi使用時に瞬間的に大電流(最大600mA程度)が流れます。
ESP32 マイコンは初回起動時に WiFi が必ず起動しますので、その時の大電流によって、USBの電源電圧が瞬時降下します。
1.5m以上の粗悪なUSBケーブルを使った場合や、USBハブを使った場合、0.7Vくらい降下する場合があります。
それによって、ESP32 や 電源レギュレーターの動作範囲電圧を下回ってしまい、ESP32 が正しく起動しない場合があります。

対策

M5Stack 側の USB-TypeC コネクタを、上下逆に挿してみて下さい。

また、USBケーブルや、USBハブが原因の場合、パソコンのUSBポートに直挿しして、USBケーブルは太く短く、良質なケーブルに替えてみて下さい。
パソコンのUSBポートは USB3.0 ポートが望ましいです。

32.WiFi(Wi-Fi)の再接続が上手くいかない。Webサイトへの再接続がうまくいかない。または、WiFi接続できない

原因

私の場合は、USBハブに接続していたり、長い粗悪なUSBケーブル使っていたりすると、WiFi接続できなかったり、再接続できないことがありました。
ESP32 ( ESP-WROOM-32 )や M5Stack は、WiFi起動時に瞬間的に大電流(最大600mA)が流れます。
それによって、電源電圧が大幅にドロップダウンし、ESP32 の最低動作電圧を下回ってしまい、うまく Wi-Fi が起動しないことが考えられます。
ある人は、バッテリー駆動していて、容量が低下したら、アクセスポイントへの接続が極端に遅くなったということがあったようです。

対策

USBハブを使わず、パソコンのUSBポートに直挿し(できるだけ USB3.0 )すること。
粗悪なUSBケーブルを使わず、良質で太く短い USBケーブルをつかうこと。
大容量で、瞬時大電流でも電圧降下しない、良質で大容量なUSB電源(2Aくらいのもの)を使う事。

33.Esp Exception Decoder を起動した時、*.elf ファイルが無い、ファイル選択ウィンドウが出る

Arduino core for the ESP32 のデバッグツールとして、Esp Exception Decoder というものがあります。
https://github.com/me-no-dev/EspExceptionDecoder
これを起動した場合、*.elfファイルが無いらしく、ファイル選択画面が出る場合があります。

原因

Arduino IDE を起動して、何もコンパイルせずに、Esp Exception Decoder を起動したことが原因です。

対策

何でもいいので、ESP32用のスケッチを、Arduino IDE で検証コンパイル、または書き込みコンパイルしてみてください。
その後、すぐに Esp Exception Decoder を起動すれば良いです。


スポンサーリンク


「ESP32 ( ESP-WROOM-32 , M5Stack )自分的 トラブルシューティング まとめ」への12件のフィードバック

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

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

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

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

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

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

    1. H.Wさん

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

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

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

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

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

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

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

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

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

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

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

  3. 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基板は高さ制約が厳しく、実質チップ部品でないと、自由な配置の回路実装はかなり難しいですね…

    1. H.Wさん

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

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

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

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

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

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

    以上、参考までに。

    1. amisuke1701さん

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

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

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

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

  5. はじめまして!

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

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


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

    1. Masaki さん

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

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

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

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

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

    1. リュウさん

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

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

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください