arduino_esp32_trouble00

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

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


スポンサーリンク


【目次ページへ】

16.WEB上のスケッチ(プログラム)コピーして、Arduino IDE に貼り付けたのに、うまく動作しない

私のブログ記事で掲載しているスケッチ(プログラム)には、長文のものがあります。
それをうまくコピーペースト出来ない方がいらっしゃいました。

対策

まず、次のようにします。

1.ブラウザ画面上のソースコード枠内の先頭位置をクリック。
2.ドラッグせずに、ソースコード枠内の最後にShiftキー」+マウスクリックすると、ソースコード全体が選択される。
3.「Ctrl キー」+「Cキー」または、右クリックでコピーして、貼り付ければOK。

ソースコード(プログラム)内に全角スペースなどが無いように注意してください。
String型や、Char 型の日本語文字列、およびコメント以外は全て半角英数値です。

17.WiFi ライブラリを使って Web から記事やデータを取得できていたのに、急に取得できなくなった

Arduino core for the ESP32 の WiFi ライブラリを使っていて、以前は問題無く Web から記事やデータを取得できていたのに、急にできなくなることがあります。

原因

昨今の世間の Webセキュリティー強化により、SSL化されたサイトが多くなってきました。
今後は全て SSL 化されていくと思われます。

HTTP 通信で GET リクエストできていたサイトが、https の SSLサイトに変更になると、今まで取得し出来ていた記事やデータも取得できなくなります。

対策

Arduino core for the ESP32 の場合は、WiFiClientSecure ライブラリを使ってプログラムを組み直すことです。
WiFiClientSecure.h をインクルードします。

暗号化通信を行うため、その分、普通の WiFi ライブラリよりも多くの SRAM メモリを消費します。

プログラミング方法については、Arduino IDE の「スケッチ例」のサンプルスケッチを参照してください。
その他、以下の記事を参照してください。

Arduino – ESP32 WiFiClientSecure ライブラリで、安定して https ( SSL )記事をGETする方法

18.バージョンアップしたライブラリがインストールできない

私の自作ライブラリ等をArduino IDE にインストールしていて、新たにバージョンアップしたライブラリをインストールし直したい場合は、古いライブラリをフォルダごと削除する必要があります。

GitHub から ZIP形式のまま Arduino IDE にインストールした場合、Windows10 ならば、以下のフォルダにあります。

C:\Users\UserName\Documents\Arduino\libraries

UserName のところはご自分のパソコンのユーザー名です。
そのフォルダの中の古いライブラリフォルダを、フォルダごと削除してください。
その後、Arduino IDE を起動し、新しいライブラリをインストールしてください。
ZIP形式のまま Arduino IDE にインストールする方法は以下の記事を参照してください。

GitHubにある ZIP形式ライブラリ のインストール方法 ( Arduino IDE )

19.ESP32 の MAC アドレスを知りたい

ご自分の Wi-Fi ルーターのセキュリティーを高めるために、MAC アドレスフィルタリングをかけたいことがあると思います。
ESP-WROOM-32 ( ESP32 ) の MAC アドレスを調べる方法は、以下の記事を参照してください。

ESP-WROOM-32 ( ESP32 ) チップ・メモリ・MACアドレス情報取得方法

20.ESP-WROOM-32 開発ボードの USB-シリアルによるスケッチコンパイル書き込みが、1回目は必ず失敗する

2017年9月頃~12月頃は特に失敗も無くスムースな書き込みだったのですが、Arduino core for the ESP32 の 2017/12/20バージョンからは、1回目は必ず失敗するようになりました。

原因

Arduino core for the ESP32 のバージョンによる違いが原因。
また、ESP32 の Chip revision 0 のものは、シリアル通信のバグがあるようです。

対策

1回目のコンパイル書き込みは失敗しても、続けて再度コンパイル書き込みすると成功することが殆どです。

ただ、どうしても1回目から成功させたい場合は、問題が無かった時のArduino – ESP32 バージョンにインストールし直す。
又は、Chip revision 1 の開発ボードを使ってみる等。

その他、私は試していませんが、ht-deko さんの記事や、mucsbug さんの記事にあるように、開発ボードのENピンにコンデンサを追加するなどしてみてください。

21.Arduino – ESP32 のマルチタスク動作で、シリアルモニターに The following tasks did not reset the watchdog in time というメッセージが表示される

Arduino core for the ESP32 でマルチタスク動作させていて、シリアルモニターに以下のようなメッセージが出る場合があります。

Task watchdog got triggered. The following tasks did not reset the watchdog in time:
- IDLE (CPU 0)
Tasks currently running:
CPU 0: Task1
CPU 1: loopTask

原因

これは、マルチタスクの core 0 動作の While ループ内で、監視役のウォッチドッグタイマ動作できる余地が、まったく無いことが原因です。

対策

while ループ内に、delay(1); をどこかに置いてください。
1ms あればウォッチドッグタイマが動作できる余地ができます。

メイン loop 関数内では、Coreライブラリ内で vTaskDelay という delay(1); 相当のものが予め書かれているので問題ありません。
そもそも、delay関数は vTaskDelay で作られており、そこにウォッチドッグタイマが作動するようにプログラムが書かれています。

注意してほしいのは、メイン loop 内で新たに while ループを作った場合は同じように delay(1) を置く必要があります。

その他、マルチタスクについては以下の記事を参照してください。

Arduino – ESP32 のマルチタスク ( Dual Core ) を試す

22.ESP-IDF のmsys ウィンドウで、CDコマンドが効かない。path設定がおかしい。動作が重いなど

ESP-IDF の msys ウィンドウで、CD コマンドが効かなかったり、path 設定をしたのに、反映されていなかったり、動作がやけに重いなどの場合がありました。

原因

Toolchain-20170918 バージョンは、CDコマンドが効きません。

また、Toolchain-20171123 バージョンは動作がやけに重かったり、パス設定したのに反映されなかったりしました。

対策

Toolchain-20180110 以降のものを使用してください。
これについては、以下の記事を参照してください。

ESP-IDF ( ESP32 開発環境 ) の使い方

23.WebSocket 通信ができない

例えば、私の自作ライブラリ、EasyWebSocket を使ってスマホと通信しようとすると、Webページは表示されても、リアルタイム通信ができない場合があります。

原因

2018/01/31 時点で私が試したところ、EasyWebSocket ライブラリを使って通信できるブラウザは、Google Chrome と Safari だけです。
その他は動作しない場合があります。

また、古いスマホや、CPU やメモリが非力なスマホでは、通信が途中で途切れたりする場合があります。
また、Android OS や iOS のバージョンが古い場合も同様です。

Windows の場合、Google Chrome なら動作しますが、Edge や Internet Explorer は動作しません。

対策

できるだけ高速CPUの最新スマホを使用してください。
そして、Android OS や iOS は、できるだけ最新版を使用してください。
ブラウザは Google Chrome を推奨します。
Google Chrome は最新版にアップデートしておいてください。

今後、WebSocket ライブラリを SSL 化すれば、もしかしたら Windows Edge などで動作するようになるかもしれませんが、私のこれからの課題です。

24.SDカードスロットのSPI接続で、GPIOピンが変更できない

MMC については私は殆ど分かりません。
SDカードについては、SPIモード通信だけの知識しかありませんので、それで説明します。
ESP32 に SD または micro SD カードスロットを接続する時、Arduino core for the ESP32 の SD ライブラリを使う場合、基本的に VSPI 接続しかできません。
(VSPI という名称の意味は不明)
ライブラリ内で、デフォルトで GPIO ピン設定しているからです。

GPIO #18 --- SCLK
GPIO #23 --- MOSI ( Master Output Slave Input )
GPIO #19 --- MISO ( Master Input Slave Output )
GPIO # 5  --- CS ( Chip Select )

自力でライブラリを変更したりして、GPIO ピンを変更できるかもしれませんが、読み取りスピードが落ちてしまう可能性があります。
私が試した結果では、この GPIO ピンで接続して、ハードウェア CS を使用する関数を使うと、高速で読み取りできることが分かりました。
ですから、SD カードスロットへの接続は VSPI 接続が最善だと思います。
VSPI の他に HSPI 接続があり、これは、SPIインターフェースデバイスを複数使いたい場合、SDカードをVSPI 接続にして、他の SPI デバイスは HSPI 接続にすると良いです。
これについては、以下のページを参照してください。

ESP32 の SPI_MODE が修正。HSPI , VSPI , 複数SPIデバイス制御 , SPI高速化などについて

【目次ページへ】


スポンサーリンク


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

  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 さん

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

コメントを残す

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

*画像の文字を入力してください。(スパム防止の為)

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

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