arduino_esp32_trouble00

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

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


スポンサーリンク

43.Arduino IDEで、sorry, unimplemented: non-trivial designated initializers not supported.というコンパイルエラーが出る

原因

Arduino core for the ESP32を使う場合、何も宣言しないと、C++でコンパイルされるようです。
その場合、以下の様な構造体の初期化方法

esp_http_client_config_t conf = {
  .url = "xxxx", .port = 81
};

を使うと、
sorry, unimplemented: non-trivial designated initializers not supported.
というエラーが出ます。
これは、C99で許可された初期化らしいのですが、C++では不可みたいです。

対策

宣言と初期化を分けると良いと思います。
例えば、以下のような感じです。

esp_http_client_config_t conf;
conf.url = "xxxx";
conf.port = 81;

その他、extern “C” を使うという方法がありますが、externはヘッダファイル内でしか使えないので、Arduinoスケッチ上ではちょっと面倒ですね。
この辺は私も素人なので、詳細は良く解りません。

44.M5Stack FIRE のWiFi通信で、距離を放すと途切れる。WiFi感度が悪い

私が持っているM5Stack FIREは、2019年8~10月頃のロットです。
その場合、WiFiルーターとの距離が離れると、途端に受信状態が悪くなります。
1.5m 以上離れるともうダメです。
M5Stack Basicでは問題ありませんでした。

原因

Twitter で三太さんから教えて頂きました。
(情報ありがとうございました m(_ _)m )
どうやら、M5Stack Fire のBottomユニットが問題を起こしているようです。

対策

2019年8~10月頃のロットの場合、グレー色(バッテリー入り)のBottomユニットを外せば、通信状態がよくなるようです。
ただし、Bottomを外すと、コンパイルデータの書き込みに失敗する可能性が高くなります。
それは、以下の記事でBottomユニットに抵抗をハンダ付けした対処をした場合によるものですので、ご注意ください。
M5Stack FIRE (PSRAM付き)およびIPSタイプのLCD ILI9342Cを使ってみた

45.M5Stackでmicro SD(SDHC)カードのデータが読み込まない。LCDに文字が表示されない

M5Stackで、micro SD および micro SDHC カードにフォントデータなどを入れて読み込ませようとすると、なぜか読み込まれないことがあります。
シリアルモニターにSDカード読み取りエラーが表示される場合があります。
LCDにフォントデータが表示されなかったりします。

原因

M5Stack販売初期のロットでは、32GBのmicro SDHCカードでも読み書きOKでしたが、最近の流通しているロットでは32GB以上は読み書きできないようです。

対策

M5Stackを購入すると、取扱説明書が入っていますが、それをよく見ると、micro SD カードは 16GB 以下までと記載されています。
(※micro SDXCは使えません)
4~16GBまでのmicro SDHCカードを使えば良いと思います。
ただ、M5StackではSPIモード通信なので、高速スピードクラスのmicro SDカードを使っても意味ありません。
標準的なmicor SDHCカードで良いと思います。
古い製品ですが、私の手持ちでは以下のカードを使っています。

Amazon.co.jp

Amazon.co.jp

46.softAPモードでスマホのブラウザから接続できない

Arduino core for the ESP32 を使っていて、softAPモード(ESP32自身がアクセスポイントになるモード)で動作させている時、スマホからESP32に接続できないことがあります。
ブラウザのURL入力欄に、192.168.4.1 と入力してもタイムアウトしてしまうなどです。

ここでは、Android 10.0 スマホの場合で説明します。

原因

スマホ画面上部にメッセージが出ているのに無視していることが原因です。

対策

まず、Arduino プログラミングで設定したsoftAPのSSIDへ、スマホのWiFiで接続して、パスワードを入力します。
すると、10秒くらい経つと、下図の様にスマホ上部にポップアップウィンドウメッセージが表示されます。
これは、ESP32のsoftAPモードではインターネットには接続されていない為にメッセージが出ます。


このメッセージは無視しがちなので気を付けてください。
私は何度も無視してハマりました。

このメッセージを無視せず、タップしてください。
すると、以下のようなメッセージが出ます。


「このネットワークはインターネットに接続していません。接続を維持しますか?」
と聞いてきます。
もちろん「はい」をタップすれば良いです。
そうすれば、ブラウザのURL欄に192.168.4.1 と入力すれば接続できると思います。

これは、このブログの読者の方々も同じ症状でしばらく悩んだということがありました。
以下の記事の一番下のコメント投稿欄を参照してみてください。

ESP32 の Wi-Fi アクセスポイントをスマホで選択できるようにしてみた

47.CORRUPT HEAP: Bad tail at~というエラーメッセージが出て、リセット(再起動)を繰り返す

ESP32 および M5Stack などをArduino IDEでプログラミングして、シリアルモニター出力させていると、以下のようなエラーメッセージが出て、延々とリセットを繰り返すことがあります。

CORRUPT HEAP: Bad tail at 0x3ffb8460. Expected 0xbaad5678 got 0x3e8ab92c
assertion "head != NULL" failed: file "/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/heap/multi_heap_poisoning.c", line 214, function: multi_heap_free
abort() was called at PC 0x400d9d03 on core 1

原因

malloc や calloc、また、new や vector等でヒープメモリ領域を確保していて、そのサイズを超えた位置に値を書き込むと、このエラーが出てリセットを延々と繰り返しました。

対策

mallocやnew、またはvector等で確保したヒープメモリサイズをもう一度入念に確認し、その範囲内で値を書き込んだり代入をするように訂正してみてください。

48.A stack overflow in task loopTaskと表示されて延々とリセット(再起動)を繰り返したり、その他謎のリセットを繰り返したりする

Arduino core for the ESP32でプログラミングして、シリアルモニター出力させると、以下のメッセージが出て、延々とリセット(再起動)を繰り返すことがあります。

***ERROR*** A stack overflow in task loopTask has been detected.
abort() was called at PC 0x4008b7cc on core 1

また、このメッセージが出なくても謎のリセットを繰り返すことがあります。

原因

Arduino core for the ESP32のsetup関数やloop関数内のスタックサイズは8192byteと定義されていて、それを超えて巨大な配列を定義してしまうことが原因です。

対策

setup関数内やloop関数内の配列定義の容量を減らすことです。
ただ、注意しなければならないのは、他の色々な変数や関数を定義していると、その分メモリが消費されているので、8192byteよりも容量は少なくなっていると思います。
例えば、以下のコードでコンパイル実行させると、延々とリセットを繰り返します。

void setup() {
  Serial.begin(115200);

  const int max_ary = 8192;
  
  uint8_t arry[max_ary];

  for(int i = 0; i < max_ary; i++){
    arry[i] = 123;
  }
  
  Serial.println(arry[max_ary - 1]);
}

void loop() {
  
}

この配列サイズを7000にして、以下のようにすると正常に終了します。

void setup() {
  Serial.begin(115200);

  const int max_ary = 7000;
  
  uint8_t arry[max_ary];

  for(int i = 0; i < max_ary; i++){
    arry[i] = 123;
  }
  
  Serial.println(arry[max_ary - 1]);
}

void loop() {
  
}

これはメインループ内でも同じで、他の関数を定義しても、setup関数内やloop関数内でその関数を実行していれば同じことです。

ただ、定義した配列の容量がもっと膨大な場合は、「stack overflow in task loopTask」というエラーは出現せず、「Core 0 panic’ed」というメッセージが出る場合もあれば、もっと深刻なリセットを繰り返すこともありますので注意してください。

編集後記

トラブルシューティング記事を一人で書くというのも、かなり辛いものがありますね。
ホントに、個人ブログ作成というのは、割に合わない作業です。
やればやるほど気が滅入ってきます。

ということで、もう一度言っておきますが、この記事はあくまで私の個人的見解と、コメント投稿などの意見をまとめただけなので、Espressif Systems 社公式の見解ではありません。
もし、誤り等がありましたらコメント投稿等でご連絡いただけると助かります。
今後、他に気付いたことがあれば、追記していこうと思っています。

ではまた・・・。

【目次ページへ】


スポンサーリンク


 

mgo-tec電子工作ブログ管理人おすすめ
Amazon.co.jp
M5Stack Basic
スイッチサイエンス
Amazon.co.jp
ESPr Developer 32
スイッチサイエンス(Switch Science)
Amazon.co.jp
Amazon.co.jp

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

  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のことですか?

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

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

    1. とんかつさん

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

コメントを残す

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

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