arduino_esp32_trouble00

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

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


スポンサーリンク


【目次ページへ】

4.SPIFFS アップローダープラグインでファイルをアップロードできない(その1)

Arduino IDE の ESP32 SPIFFS フラッシュアップローダープラグインを使って、ESP-WROOM-32 の Flash メモリへデータをアップロードしようとする時、Arduino IDE に以下のメッセージが表示されてアップロードできない場合があります。

serial.serialutil.SerialException: could not open port 'COM5': WindowsError(5, '\x83A\....\x81B')
Failed to execute script esptool
SPIFFS Upload failed!

原因

シリアルモニターが起動していることが原因の場合が多いです。

対策

シリアルモニターを閉じてから、再度アップロードしてください。

5.SPIFFS アップローダープラグインでファイルをアップロードできない(その2)

原因

ESP-WROOM-32 のデフォルトでは、SPIFFS メモリ領域にアップロードできるファイルサイズは約 1MB 程度です。
それ以上のファイルをアップロードしようとするとエラーになる場合があります。

対策

トータル 1MB以上のファイルをアップロードしたい場合、以下の記事を参照して、SPIFFSフラッシュ領域をサイズアップしてから、アップロードしてください。

ESP-WROOM-32 ( ESP32 ) SPIFFS メモリサイズを大きくする方法

6.SPIFFS アップローダープラグインでファイルをアップロードできない(その3)

上記の SPIFFS アップロードできない以外にもう一つ、以下のようなエラーメッセージがでることがあります。

UnicodeDecodeError: ‘ascil’ code can’t decode byte 0xef in position 0: ordinalnot in range(128)

原因

SPIFFS メモリのサイズアップするために、パーティションテーブルをメモ帳などの簡易エディタで編集したことによる、文字コード変換エラーが原因です。

対策

UTF-8 コードで保存できる、プログラム開発用のテキストエディタを使用した方が賢明です。
私の場合は、フリーの Adobe Brackets を使っていますが、サクラエディタなどでも良いと思います。
要するに、スペースやTAB など、半角と全角スペースを間違えて入力してしまわないように、明確に判別できるテキストエディタであれば良いと思います。

7.SPIFFS アップローダープラグインで正常にファイルをアップロードできたのに、ファイルの読み込み不具合

SPIFFS アップローダープラグインでファイルをフラッシュにアップロードして、正常に終了したのに、読み込みがうまくいかない場合があります。

原因

ファイルサイズが大きすぎても、SPIFFS アップローダープラグインでアップロードしてエラーが出ない場合があります。
その場合、大きいファイルはファイルの一部だけしかアップロードされていなかったり、ファイルサイズがゼロだったりしています。

対策

デフォルト設定では、アップロードできるファイルサイズは約 1MB 程度です。
それ以上のサイズをアップロードする場合は、パーティションテーブルを修正しなければなりません。

SPIFFS フラッシュ領域のサイズを大きくするために、フラッシュメモリのパーティションテーブルを編集する必要があります。
ただし、大きくし過ぎると、スケッチプログラムや、他の動作領域が小さくなってしまうので注意です。
これについては以下の記事を参照してください。
※メモ帳で編集しないでください。
テキストエディタで編集してください

ESP-WROOM-32 ( ESP32 ) SPIFFS メモリサイズを大きくする方法

また、パーティションテーブルを変更して、スケッチをコンパイル書き込みしても、1回目はうまく読み込んでくれない場合があります。
その場合、恐らく、SPIFFS アップロードが完全でない場合がありますので、再度、アップロードと、スケッチのコンパイル書き込みを実行してみてください。
私の場合、2回目がダメでも、3回繰り返してようやく正常に戻ったということがありました。
これの原因は謎です。

8.SPIFFS フラッシュメモリ内のデータが、正常に読み取らなくなってしまった

今まで正常に動作していたのに、急に、SPIFFS フラッシュメモリ内のデータが正常に読み取らなくなってしまうことがあります。
または、初めて、Arduino core for the ESP32 をインストールして、SPIFFS を使用しようとしたけど、データが正常に読み取ってくれない場合があります。

原因

GitHub の Arduino core for the ESP32 で、以下の Commits バージョンは、SPIFFS が正常動作しません。

●Commits on Jan 18, 2018 バージョン
●Commits on Jan 19, 2018 バージョン
●Commits on Jan 23, 2018 バージョン

対策

2018/03/05 時点では、2018/03/05 バージョンでは、不具合が修正されました。
Commits on Mar 5, 2018 バージョンをインストールしてください

因みに、正常に動作したバージョンをバックアップとして保存しておくことをお勧めします。
過去のバージョンに戻したい場合は以下の記事を参照してください。

旧バージョン Arduino – ESP32 のインストール方法

因みに、旧バージョンをインストールしたら、再度、SPIFFS アップローダーでファイルをアップロードし直し、スケッチをコンパイルし直してください。
SPIFFS フラッシュメモリのサイズアップをしている方は、それも忘れないでください。

9.今まで問題無かったのに、急に Wi-Fi ( WiFi )に繋がらなくなった

【2018/06/02時点】
Arduino-ESP32 で、WiFi.begin や、wifiMulti 関数で、Wi-Fi アクセスポイントに繋がらなくなっています。
WiFi.begin関数を使うことを止め、WiFiMulti をインクルードして、以下のように Wifi.disconnect(true); の後に WiFiMulti 関数に修正してみてください。

#include "WiFiMulti.h"
......
......
void setup(){
  Serial.begin(115200);
....
....
  WiFi.disconnect(true);
  delay(1000);
  WiFiMulti wifiMulti;
  wifiMulti.addAP(ssid, password);

  Serial.println("Connecting Wifi...");
  if(wifiMulti.run() == WL_CONNECTED) {
      Serial.println("");
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
  }

 

 

上記の他に、ESP32 ( ESP-WROOM-32 ) や M5Stack を Arduino – ESP32 で開発したり、ESP-IDF で開発していて、ある日、急に WiFiルーター(アクセスポイント)に接続できなくなることがあります。

原因その1

Wi-Fi ルーターやアクセスポイントの、DHCP ユーザー最大数をいつの間にか超えてしまっている可能性があります。

対策その1

ご自分の Wi-Fi ルーターの管理者設定画面で、DHCP ユーザー最大数を増やすか、接続されている不要な Wi-Fi機器の電源をOFFにしてください。
そして、Wi-Fiルーターの電源を消して再起動してみてください。


原因その2

Arduino – ESP32 でスケッチを何度も繰り返し書き込んでいたり、SPIFFS パーティションテーブルを変更したりしていると、Flash メモリの NVS 領域を壊してしまっている可能性があります。
また、ESP32 の STA モードがリセットできなくなっている可能性があります。

対策その2

GitHub の Issue で同じような悩みの解決方法が載っていました。
https://github.com/espressif/arduino-esp32/issues/653

このページの最後の方にある Arduino – ESP32 用スケッチをご自分のルーターの SSID とパスワードに書き換えて、コンパイル実行してみてください。

私の場合、以下の手順で進めました。

M5Stack で何度も Arduino – ESP32 でコンパイル書き込みしていて、ルーターをリセットしたら、ある日突然ルーター(アクセスポイント)に接続できなくなり、シリアルモニターに「…..」表示が延々と出ている状態になりました。

Arduino – ESP32 を最新版に入れ替えたり、ESP-IDF でコンパイルし直してもダメで、Arduino – ESP32 の「ツール」メニュー設定をいろいろ変えてもだめでした。
そこで、以下のスケッチのように、WiFiのSTAモード設定が書き込まれている Flash メモリの NVS 領域を初期化してみました。
(※これは自己責任で行ってください。これによるトラブルは一切責任を負いません)

#include <nvs.h>
#include <nvs_flash.h>
void setup() {
    int err;
    err=nvs_flash_init();
    Serial.printf("nvs_flash_init: %d\n" ,err);
    err=nvs_flash_erase();
    Serial.printf("nvs_flash_erase: %d\n" ,err);
 }
void loop() {
}

これで、再度、WiFiスケッチを書きこんでもダメでした。

そこで、先ほどの、GitHub の Issue にあるページの最後の方の Arduino-ESP32 スケッチを書きこんでみたら、無事、WiFi アクセスポイントに繋がったのです。

恐らく、
WiFi.begin(ssid, password);
の前に、
WiFi.disconnect(true);
を実行したことによって、ESP32 の WiFi の STA モードがリセットされたものと予想されます。
あくまで予想なので、詳しい理屈は分かりません。
要するに、こういうことです。

WiFi.disconnect(true);
WiFi.begin(ssid, password);

これで試してみて下さい。


原因その3

Arduino core for the ESP32 の Serial.begin 関数を2重使用していると、WiFi接続できなくなるようです。

対策その3

私の自作ライブラリで、AP_Connect関数を使うと、中には Serial.begin を使用しているものがあります。
ESP8266 を使用していた昔は問題無かったので、それを ESP32 で流用していました。
ライブラリ内の関数の Serial.begin関数をコメントアウトするか、スケッチ上の Serial.begin関数を消去するなどの対策をしてみてください。
今後、私の自作ライブラリでは、関数内に Serial.begin を置かない様に修正していきます。
(2018/06/07時点)

10.エラーや警告が全く出ないのに、プログラムが動かない

Arduino IDE で、エラーや警告が一切出ないのに、プログラムが全く動作しないことがありました。

原因

過去、私の経験では、Arduino – ESP32 で、SPIFFS ファイルシステム使用時に、Serial.begin関数を重複使用すると、そこから先のプログラムは一切動きませんでした。
特に気を付けなければならないのは、ライブラリを自作しているとき、Serial.begin を複数の関数に入れ込んでしまうと、重複使用していることに気が付かないことがあります。
Arduino – ESP8266 では特に問題無く、Arduino – ESP32 では SDカードを使う時には問題ありませんでした。
SPIFFS を使う時に、この症状が出ました。

対策

Serial.begin 関数は、プログラムに1度だけ実行するように、ライブラリやスケッチを修正する。

【目次ページへ】


スポンサーリンク


「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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください