ESP8266, ESP-WROOM-02, ESPr Developer トラブルシューティングまとめ

記事公開日:2016年12月19日
最終修正日:2017年6月29日

スポンサーリンク

今回は、ESP8266, ESP-WROOM-02, ESPr Developer のトラブルシューティングについて、コメント等でお問い合わせがあったものと、私の過去の体験等を含めて、まとめてみました。
以下、Windows 8.1 以上で、Arduino IDE を使った場合で説明します。

Aruino IDE 、ESP8266 ボード、SPIFFSアップローダーのバージョンは以下の場合で説明します。

Arduino IDE — ver 1.8.1
Arduino Core for ESP8266 WiFi chip — stable ver 2.3.0
SPIFFS ファイルシステムアップローダー — ver 0.3.0

Arduino IDE のインストール方法、ESP8266ボードの設定については以下のページを参照してください。
Arduino IDE に Staging(Stable)版ESP8266 ボードをインストールする方法

Arduino IDE にSPIFFSファイルシステムアップローダープラグインのインストール方法は以下のページを参照してください。
Arduino IDE に ESP8266 SPIFFS ファイルシステムアップローダーをインストールする方法

ESPr Developer とは、スイッチサイエンス製で、ESPRESSIF社製 の技適認証済みWiFiボード ESP-WROOM-02 を、700mA 電源レギュレーター、USBシリアル変換、ロジック変換、リセットスイッチ等でパッケージ化した、とても使いやすく安定した超おすすめボードです。
Amazon.co.jp
この組み立て方法や使い方については、以下のページを参照してください。
ESPr Developer ( ESP-WROOM-02 開発ボード )の使い方をザッと紹介

では、トラブルシューティングについては以下の目次をクリックするとそこへジャンプします。

    【目次】

  1. Arduino IDE には警告やエラーが無いのに、シリアルモニターに Exception や wdt、loadエラーが出て、永遠とリセットを繰り返す
    (2017/1/23追加)
  2. espcomm_sync failed や espcomm_open failed エラーが出る
  3. シリアルモニターで全ての文字が文字化けする
  4. シリアルモニターで 115200 bps にしているのに、最初の行だけが文字化けする
  5. SPIFFS アップロードで、SPIFFS Upload failed! エラーが出る
  6. SPIFFS ファイルシステムアップローダー、4M ( 3M SPIFFS )で SPIFFS Upload failed! エラーが出る
  7. 起動が安定しない、動作が不安定
  8. SDカード使用で、「SD.h」に対して複数のライブラリが見つかりました、というエラーが出る
  9. Soft WDT reset というメッセージが出て、リセットされてしまう
    (2017/1/24更新)
  10. ESPr Developer ( ESP-WROOM-02, ESP8266 )に接続したデバイスがうまく動作しない
  11. 正常に動作するプログラムでも、コンパイル後の実行で、シリアルモニターに文字化けデータしか表示されない
  12. Web と連動してテキストを抽出する場合に、途中でフリーズ(固まる)する
  13. ESPr Developer ( ESP-WROOM-02, ESP8266 )にLEDを接続したら壊れた
  14. Arduino IDE スケッチのコンパイル書き込みで、「シリアルポート「COM9」が開けません。」というメッセージが出る
  15. ライブラリマネージャーでインストール、アップデート、アンインストールができない
  16. ZIP形式ライブラリがインストールできない
  17. ライブラリをアップデートしたが、うまく動作しない
  18. EasyWebSocketライブラリでブラウザ表示が文字化けする
  19. Arduino IDE のシリアルポート(COMポート)がグレー表示になっていて、選択できない
  20. マイコンボードに書き込もうとしましたが、エラーが発生しました。というメッセージが出る
  21. ESP8266ボード や Arduinoボードで、配列やポインタを使用すると、シリアルモニター表示が変だ
  22. グローバル変数とローカル変数のメモリに余裕があるのに正常に動作しない
    (2017/1/25更新)
  23. Arduino IDE のシリアルモニター出力で、日本語漢字が文字化けする
    (2017/5/16追加)
  24. ブラウザからスケッチ(ソースコード)をコピーして、Arduino IDE スケッチ画面に貼り付け、そのままコンパイル書き込みしたら、うまく動作しない
    (2017/6/29追加)

1.Arduino IDE には警告やエラーが無いのに、Exceptin や wdt、load エラーがシリアルモニターに出て、永遠とリセットを繰り返す

Arduino IDE で ESPr Developer ( ESP-WROOM-02, ESP8266 )ボードをコンパイルすると、コンパイラの警告やエラーメッセージが一切なく、RAM使用領域も余裕があって、正常なスケッチのはずなのに、シリアルモニターで以下のようなエラーメッセージが出て、永遠とリセットを繰り返す場合があります。

ets Jan  8 2013,rst cause:4, boot mode:(3,6)

wdt reset
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v09f0c112
~ld
Exception (9):

epc1=0x40104278 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00050a26 depc=0x00000000

ctx: sys
sp: 3ffffbb0 end: 3fffffb0 offset: 01a0

>>>stack>>>
3ffffd50:  5c5c5c5c 5c5c5c5c 5c5c5c5c 5c5c5c5c
・・・etc
ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v09f0c112
~ld

【原因】
こういう場合は、プログラム(スケッチ)中で RAMメモリを多く消費し過ぎている場合があります。
例えば、配列宣言の文字数が多すぎるなど・・・。

【対策】
配列宣言の文字数や大きさを少なくしてみて下さい。
詳細は以下の記事を参照してください。
Arduino / ESP8266 の使用できるRAM 領域を再考

2.espcomm_sync failed や espcomm_open failed エラーが出る

ESPr Developer ( ESP-WROOM-02 開発ボード) を使っていて、Arduino IDE に以下のようなメッセージが出た場合です。

warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
error: espcomm_upload_mem failed

【原因】
Arduino IDE の ESP8266ボード設定の Reset Method が ck になっていることが原因です。

【対策】
Arduino IDE の ESP8266ボード設定の Reset Method を “nodemcu” にする必要があります。
“ck” の場合は、ご自分でGPIO #0 を押しながらリセットキーを押すと書き込み可能になります。
“nodemcu” にするとリセットキーを押さずとも、自動で書き込みモードに切り替えて書き込みできます。
これは、スイッチサイエンスさんのESPr Developer のトランジスタで構成された、リセット回路の素晴らしいところです。
ESP8266 ボードの設定については、以下のページを参照してください。

Arduino IDE に Staging(Stable)版ESP8266 ボードをインストールする方法

3.シリアルモニターで全ての文字が文字化けする

【原因】
Arduino IDE のシリアルモニターの右下のところの通信速度が 115200 bps 以外になっている。

【対策】
ESP8266, ESP-WROOM-02 のシリアル通信速度のデフォルトは 115200 bps です。
それ以外にすると、すべての通信が文字化けしてしまいますので、115200 bps に変更してください。
TroubleShooting02

4.シリアルモニターで 115200 bps にしているのに、最初の行だけが文字化けする

【原因】
ESP-WROOM-02 ( ESP8266 ) の起動直後は76800 bps で起動メッセージをシリアル出力します。
その後起動完了後に 115200 bps でシリアル通信するので、最初の1行が文字化けするわけです。

【対策】
そのメッセージを読み取りたいのであれば、シリアルモニターの速度を74880 bps にすれば読み取れます ( Arduino IDE 1.6.13 の場合 )
こんな感じのメッセージです。

ets Jan 8 2013,rst cause:2, boot mode:(3,2)

load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v60000318

ただし、その後のメッセージは全て文字化けしてしまいますが・・・。
ですから、シリアルモニターの速度を115200 bps にしてあれば、最初の1行の文字化けは無視して良いです。

5.SPIFFS アップロードで、SPIFFS Upload failed! エラーが出る

【原因】
SPIFFS アップローダーをクリック後、即以下のようなメッセージが出た場合、

error: Failed to open COM6
error: espcomm_open failed
error: espcomm_upload_mem failed
SPIFFS Upload failed!

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

【対策】
SPIFFS ファイルシステムアップローダーはシリアルモニターが起動していると動作しません。
シリアルモニターを閉じてください。

 6.SPIFFS ファイルシステムアップローダー、4M ( 3M SPIFFS )で SPIFFS Upload failed! エラーが出る

USBシリアルでアップロードしようとして、Arduino IDE に以下のようなメッセージが出た場合

warning: espcomm_send_command: didn't receive command response
warning: espcomm_send_command(FLASH_DOWNLOAD_BEGIN) failed
error: espcomm_upload_mem failed
SPIFFS Upload failed!

【原因】
スイッチサイエンスさんの ESPr Developer ( Rev.3 ) を使った場合はこのメッセージが出ます。(2016/12/18時点)

USBシリアルで 4M( 3M SPIFFS )でアップロードできたのは、1世代前の Rev.2 だけですが、現在販売しているものは、Rev.3 です。

【対策】
Wi-Fi で OTA アップロードならば可能です。
その方法は、以下のページを参照してください。

4M ( 3M SPIFFS ) をシリアルポートでアップロードできない場合のトラブルシューティング( ESP-WROOM-02 ESP8266 )

7.起動が安定しない、動作が不安定

【原因】
ESP-WROOM-02 ( ESP8266 ) に供給する電流量が足りない場合があります。
常時70mA以上電流を消費していて、起動直後は100mAを超える場合があります。
ESPr Developer と 有機EL ( OLED )ディスプレイなどを接続していて、ESPr Developer から電源を供給している場合、リセットをした直後は、一瞬でも400mA を超える場合があります。
そうなると、USBハブを使っていた場合、うまく起動しない場合があります。
また、Arduino UNO の3.3Vから電源供給している場合、Max 50mAまでしか対応してませんので、当然まともに動作しません。

【対策】
パソコンのUSBポートに直挿しする。
または、500mA以上のACアダプターや、モバイル用電源等を使う。
因みに ESPr Developer の最大電流は700mA ですので、パソコンのUSBポートに直挿しすれば、大抵は問題なく動作します。
パソコンのUSBポートでも電流容量が少ないものは避けてください。大抵は500mAだと思います。
ただ、ESPr Developer の電源を通して、他の大容量のディスプレイやLED に電源を供給すると、ESP8266 への電流量が足りなくなる場合がありますのでご注意ください。
その場合、別電源に分けた方が良いです。

また、USBハブによっては、外部ACアダプターで電源を強化できるものがあります。
それを使ってみるということも有効な手段かもしれません。

【関連記事】
ESP-WROOM-02とArduinoで初めてのATコマンド通信

8.SDカード使用で、「SD.h」に対して複数のライブラリが見つかりました、というエラーが出る

ESP8266ボードのSDカードライブラリ、 SD.h をインクルードした時に、以下のようなメッセージが出てコンパイルできないことがあります。

「SD.h」に対して複数のライブラリが見つかりました
使用済:C:\Users\xxxx\Documents\Arduino\libraries\SD
未使用:C:\Users\xxxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\SD
未使用:E:\arduino\IDE\arduino-1.6.13\libraries\SD
exit status 1
ボードGeneric ESP8266 Moduleに対するコンパイル時にエラーが発生しました。

※xxxx はご自分のPCのユーザーネーム

【原因】
このメッセージをよく見てください。
SDカードライブラリの SD.h が3つあります。

C:\Users\xxxx\Documents\Arduino\libraries
というフォルダは、ユーザーがインストールしたライブラリのフォルダです。

C:\Users\xxxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries
というフォルダはArduino core for ESP8266 ボードライブラリのフォルダです。

E:\arduino\IDE\arduino-1.6.13\libraries
というフォルダは私が別のハードディスクにZIP形式のIDEをダウンロードして解凍し、任意のフォルダに保存しておいたものです。
私はArduino IDE はそこから起動しています。

私はArduinoのインストーラーファイルを使っていません。なぜならば、他のバージョンも使うことがある為、複数のバージョンを共存させているからです。
IDEをいろいろとインストールしていると、知らぬ間にユーザーライブラリフォルダの
C:\Users\xxxx\Documents\Arduino\libraries
にSDカードライブラリが入っていることが何度かありました。

実はこれは、ライブラリの自動アップデート通知で、
SD built-in by Arduno, SparkFun
の通知が来て、アップデートしてしまうと、librariesフォルダにSDカードライブラリが新たにインストールされてしまいます。

このドキュメントフォルダにあるSD.h ライブラリは、SparkFunのSDカードライブラリを使用していなければ、不要です。
Arduino UNO などを使用する場合は IDE のlibraries フォルダのSD.h が自動で使用され、ESP8266 ボードを使う時には、自動でArduino15フォルダのSD.h がインクルードされるようになっているので、それ以外は不要です。

【対策】
上記のメッセージが出たら、ドキュメントフォルダ
C:\Users\xxxx\Documents\Arduino\libraries
の SD フォルダをフォルダごと削除してください。
その後、Arduino IDE を再起動してください。

9.Soft WDT reset というメッセージが出て、リセットされてしまう

Arduino IDE シリアルモニターに、Soft WDT reset というエラーメッセージが出て、リセットしてしまう場合です。
こんな感じです。
SPI_SPEED_UP2_05

【原因】
ESP-WROOM-02 ( ESP8266 ) のチップに装備されているウォッチドッグタイマ(略して WDT )が機能しなくなったことによるものです。
ESP8266 は電源が起動すれば、何もプログラムを実行しなくても、Wi-Fi通信機能などがちゃんと動作できるかどうか監視する機能が定期的に働いています。
マイコンはすべてこのウォッチドッグタイマがあると思って良いと思います。
自作プログラムによる休みの無い連続動作が、ウォッチドッグタイマ割込みを行う余地を与えないとこういうエラーがでるようです。

また、String型変数に、SRAM の限界を超えて文字列を代入してしまっている場合もこのエラーになります。

また、EasyWebSocket ライブラリを使って、スマホからデータを休みなく連続送信した場合も発生します。

【対策】
無限ループ内 ( while または forループ内 )に yield(); などを置いて、プログラムの休止期間を与えてやる。
Arduino IDE に関しては、メインloop内はこれを置かなくても良いらしいですが、エラーが出る場合は置いてみてください。
delay(1); でも良いですが、これは1ms で、時間が長すぎる場合は、delayMicroseconds を使ってみてください。
yield(); は最も短い休止期間だと思います。

EasyWebSocket ライブラリ beta 1.48 ではwhileループ内に全て yield(); を置いてます。
(関連記事)
ESP8266 ( ESP-WROOM-02 ) SPI 通信高速化、その2 ( 複数デバイス、Mode、Watchdog Timer 問題 )

また、Stringクラスの文字列を少なくしてください。
ESPr Developer ( ESP-WROOM-02, ESP8266 )の場合は、ローカル関数内では約25000文字が限界です。
もちろん、プログラム構成によって、この数は変動します。
(参考記事)
Arduino / ESP8266 の使用できるRAM 領域を再考

10.ESPr Developer ( ESP-WROOM-02, ESP8266 )に接続したデバイスがうまく動作しない

【原因】
ESP-WROOM-02 ( ESP8266 )の必要電源電圧は3.3V です。
ESPr Developer はUSB 5V から供給されて、ESP-WROOM-02 へは3.3Vに電圧変換して電源を供給しています。
よって、ESP-WROOM-02 ( ESP8266 ) のGPIOポートの信号電圧は 0~3.3V の範囲内です。
接続されたデバイスが5V動作のものでは正常に動作しない場合があります。

【対策】
ロジック電圧が3.3V のデバイスを使う。
又は、ロジックレベル変換を使用して、ESP-WROOM-02 ( ESP8266 ) のロジック電圧を5V に変換する。
ただし、ロジックレベル変換の動作周波数に注意してください。
ロジックレベル変換の動作周波数よりも ESPr Developer ( ESP-WROOM-02, ESP8266 )のGPIO の動作周波数が大きいと、ロジックレベル変換が処理し切れなくなります。
その場合は、GPIO の動作周波数を下げるなどの対応が必要です。

11.正常に動作するプログラムでも、コンパイル後の実行で、シリアルモニターに文字化けデータしか表示されない

正常に動作するプログラムのはずが、コンパイル後のシリアルモニターに稀に文字化けデータしか表示されない時があります。
もちろん、シリアルモニターの速度は115200 bps に設定されていてる場合です。

【原因??】
電源を起動して、前のプログラムが走っていて、その途中でコンパイルした時、稀に文字化けデータしか表示されない時があります。
恐らく、前のプログラムの実行が連続高速処理されている場合に、途中でコンパイル指令を出すと、こういうことが起こるような気がします。

【対策】
再度、コンパイルすると、正常にコンパイルされる場合が殆どです。

12.Web と連動してテキストを抽出する場合に、途中でフリーズ(固まる)する

以下の記事でツィッター検索記事を定時取得した場合に発生します。

Twitter 検索結果のツイートを有機EL ( OLED )に表示させてみた

【原因??】
まだハッキリと原因は突き止められておりませんが、Twitter検索結果記事の取得の場合、決まってフリーズするのは、記事取得最中に同じルーター環境内の他のパソコンでインターネット通信している時に発生しているようです。
client.read() のところでフリーズしていて、タイムアウト設定を作ってもフリーズしてしまう為、機能しなくなります。
プログラム中にyield(); やdelay(1); を散りばめて配置してもフリーズしてしまいます。
恐らく、Webから送られてくるパケットの断片化が原因でしょうか・・・。

【対策??】
残念ながらまだ判りません。
ESPr Developer ( ESP-WROOM-02, ESP8266 ) をリセットするしかないようです。

13.ESPr Developer ( ESP-WROOM-02, ESP8266 )にLEDを接続したら壊れた

【原因】
ESP8266 ( ESP-WROOM-02 ) のGPIO 端子に流すことができる最大電流は 12mA までです。
これは、ESPRESSIF社で公開されているデータシートに掲載されています。
GPIO に 電流制限抵抗等を接続せずに LED を直結して、12mA 以上の電流が流れてしまうと、殆どの場合、即故障します。
私の手持ちの一般的で安価な砲弾型LED (5V) は、GPIOに直結しても5mA ほどしか流れないものでしたので、過去に挙げた記事のように直結しても問題ありませんでした。
高輝度LED を直結してしまうと、12mA を超えてしまう場合があります。

【対策】
ESPr Developer ( ESP-WROOM-02, ESP8266 ) のGPIO にLED を直結する前に、そのLED が3.3V をかけても12mA 以上電流が流れないかどうか、データシートで確認してください。
また、別電源でLEDに可変抵抗器などを接続して、電流計でチェックしながら3.3V をかけてみてチェックしておくことが必要です。それから必要に応じて抵抗を挟みながら、GPIOに接続してください。
また、定電流ダイオードを間に接続するという方法もあります。
例えば、以下のような10mAのものがあります。

14.Arduino IDE スケッチのコンパイル書き込みで、「シリアルポート「COM9」が開けません。」というメッセージが出る

複数のESPr Developer ( ESP-WROOM-02 開発ボード )を使ってそれぞれ USB を差し替えてコンパイル書き込みするときにこのメッセージが出る時があります。

【原因】
別のESPr Developer にUSBを差し替えた時に、Arduino IDE の「ツール」メニューのシリアルポートが選択されていない

【対策】
ESPr Developer のUSB を差し替えた後は Arduino IDE の「ツール」メニューのシリアルポートで、COMポートを選択すればOKです。

15.ライブラリマネージャーでインストール、アップデート、アンインストールができない

【原因】
当方自作のライブラリ、EasyWebSocket、Utf8toSjis、ShinonomeFNTread 等は、Arduino IDE のライブラリマネージャーではインストールやアンインストール、アップデートはできません。
残念ながら、ライブラリマネージャーを使用できるような申請をしておりません。

【対策】
Arduino IDEのフォーマットに沿ったZIP形式ライブラリならば、IDE の「ZIP形式のライブラリをインストール」機能を使えば簡単にインストールできます。

うまくいかない場合は、手動でZIPファイルを解凍して、Arduino IDE のlibrariesフォルダにコピーしてください。
Windows10 の場合は
ドキュメント/Arduino/libraries
というパスにあります。
EasyWebSocket_SPIFFS-master の場合、解凍したフォルダの中に更に同じ名前の EasyWebSocket_SPIFFS-master というフォルダがあるので、そのフォルダごとコピーすれば良いです。

16.ZIP形式ライブラリがインストールできない

Arduino IDE の「ZIP形式のライブラリをインストール」機能を使ってインストールできない場合

【原因】
まず、Arduino IDEのフォーマットに沿ったZIP形式ライブラリでなければ正常にインストールできません。
library.properties ファイルが正しく記載されていないと反映されませんし、フォルダ名やサンプルファイル名も合っていないとIDEに反映されません。

また、同じ名前のライブラリがある場合はエラーとなり、インストールできません。

【対策】
同じ名前のライブラリがある場合は、IDE の libraries フォルダやドキュメントフォルダ内のlibraries フォルダにあるライブラリをフォルダごと削除してください。
IDEのフォーマットに沿っていないZIP形式ライブラリは、上記のように手動で解凍してフォルダごとコピーしてください。
当方自作の最新のEasyWebSocketライブラリ等はZIP形式インストールに対応しています。

17.ライブラリをアップデートしたが、うまく動作しない

【原因】
同じ名前のライブラリが存在する場合が考えられます。

【対策】
バージョンアップしたライブラリは、フォルダ名が異なっていても、インクルードするライブラリ名が古いライブラリ名と同じ場合があります。
その場合は古いライブラリをフォルダごと削除してください。

また、ESP8266ボードを使っている場合は、以下のフォルダをチェックしてください。
(Windows10 の場合)
●インストールしたArduino IDE の中のlibrariesフォルダ内
●C:\Users\ユーザー名\AppData\Local\Arduino15
●ドキュメント\Arduino\libraries

18.EasyWebSocketライブラリでブラウザ表示が文字化けする

当方自作のEasyWebSocketライブラリを使って、日本語文字列があるサンプルスケッチをコンパイル実行させたら、ブラウザ画面で文字化けした場合

【原因】
Arduino IDE のスケッチ入力で、OSの入力用文字コードが UTF-8 でない場合は、スマホのブラウザに表示させた場合は文字化けします。
例えば、spiffs_01.txt ファイルなどのHTMLヘッダの charset で文字コードを指定してます。

<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>

これは、スマホのブラウザ表示画面は UTF-8 で表示させている指令になります。
Arduino IDEで入力した文字列が別の文字コードだと当然文字化けするわけです。

【対策】
Arduino IDEのスケッチエディタの入力をUTF-8 にする必要があります。
実は、私は Windows10 日本語版の場合で Microsoft IME の文字入力の場合、普通にインストールすれば、UTF-8 になると思っていたのですが、最近、Shift_JIS入力だったというコメント投稿をいただきました。
こちらの記事のコメント欄参照

Web News記事自動取得 OLED ( 有機EL )ミニ電光掲示板に16×16フリー日本語フォント( 東雲 ) を使う

その場合は、恐らく Microsoft IME の文字コードをUTF-8 にすれば良いと思うのですが、残念ながらその方法がまだ分かっておりません。
そうすると、HTMLヘッダファイルを
charset=Shift_JIS
と変更すればうまくいくかも知れません。
今、殆どのアプリやブラウザはUTF-8 が標準になっているので、できるだけ全てのアプリは UTF-8 にしておいた方が良いと個人的に思っています。

19.Arduino IDE のシリアルポート(COMポート)がグレー表示になっていて、選択できない

【原因】
もしかしたら、Arduino や ESPr Developer ( ESP-WROOM-02, ESP8266 ) とパソコンを接続しているUSBケーブルが充電専用か、ケーブル自体が不良の可能性があります。

【対策】
充電ケーブルの場合は、正常な普通の通信用USBケーブルに替えてください。
USBケーブルの中途半端な挿し込みの可能性もありますので、再度挿し直してください。

20.マイコンボードに書き込もうとしましたが、エラーが発生しました。というメッセージが出る

【原因】
一つ上の18項目の原因と同じで、USBケーブルに原因があるかも知れません。
そちらを参照してください。

【対策】
Arduino IDE のメニューで「ツール」を見てください。
「シリアルポート」または「COMポート」がグレー表示になっていて、クリックできなければ、マイコンボードとパソコンが通信不可能な状態です。
USBケーブルを指し直すか、充電ケーブルの場合は、普通の通信用USBケーブルに替えてください。

21.ESP8266ボード や Arduinoボードで、配列やポインタを使用すると、シリアルモニター表示が変だ

Arduino IDE でArduino UNOボードを使って、配列の初期化や、ポインタを使用していて、それをシリアルモニターに表示させると、意味不明な文字や、期待通りの結果にならない時があります。

また、同様に、ESP8266ボード上では、Arduinoボードと異なる表示結果になったりします。
ESP8266ボードではエラーになったのに、Arduino UNOボードでは正常にコンパイルできることがあります。

【原因】
配列やポインタの使い方を誤っている場合が考えられます。
Arduino IDE は全てのC言語仕様をサポートしていて、一部のC++言語をサポートしているそうです。
Arduino言語はビギナーにとって、とても使いやすくできていますが、複雑難解な本来のC言語の文法が隠れてしまって、なかなかアマチュアでは分からないことがあります。

【対策】
ポインタや配列の初期化については、以下の記事を参照してみてください。
そして、最後の方のコメント欄も参照してみてください。
その道の熟練者からアドバイスを頂きました。
意外な事実があったりします。
改めて、ポインタ・配列・初期化などを再考

22.グローバル変数とローカル変数のメモリに余裕があるのに正常に動作しない

Arduino IDE の警告やエラーメッセージが無く、グローバル変数とローカル変数のバイト数に余裕があって、プログラムも誤っていないのに、正しく動作しないことがあります。

【原因】
ローカル関数内の配列の領域確保が大きすぎたり、String 変数に文字列を多量に代入していたりすることが原因の場合があります。

【対策】
ローカル関数内の配列の領域を少なくしたり、String文字列の文字数を少なくしてください。
ESPr Developer ( ESP-WROOM-02, ESP8266 ) の場合、ローカル関数内で確保できる配列のバイト数限界は、25KB 程度と思ってください。
要するに、25000文字程度です。
ESP8266 のデータシートによると、RAM のユーザー使用領域は約50KB とありますが、ローカル関数内ではその半分程度しか確保できません。
Arduino UNO は1600文字程度です。
もちろん、これはプログラムによって変動します。

詳細は以下の記事を参照してください。
Arduino / ESP8266 の使用できるRAM 領域を再考

23.Arduino IDE のシリアルモニター出力で、日本語漢字が文字化けする

Arduino IDE で、Serial.print や Serial.write 関数などを使って、シリアルモニターに日本語漢字を出力する場合と、文字化けしている場合があります。

【原因】
日本語 Windows 10 の場合で説明します。
Arduino IDE 1.8.2 から、UTF-8 コード文字列をそのまま出力しても、シリアルモニターに日本語漢字が表示できるようになりました。
例えば、

Serial.println(“日本語漢字です”);

とすると、そのままシリアルモニターに日本語文字が出力できるようになりました。
そのため、今まで、私の自作の UTF8toSjis ライブラリを使って、Shift_JISコードで出力すると文字化けしてしまいます。

また、旧バージョンの Arduino IDE 1.8.1 以下では、Shift_JIS コードで出力しないと、シリアルモニターには正しく日本語表示されません。

【対策】
Serial.print関数で日本語をそのまま出力したい場合は、Arduino IDE 1.8.2 以降を使って下さい。
私の自作 Utf8toSjis ライブラリを使って、Shift_JIS コードで日本語を出力したい場合は、Arduino IDE 1.8.1 以下を使用して下さい。

24.ブラウザからスケッチ(ソースコード)をコピーして、Arduino IDE スケッチ画面に貼り付け、そのままコンパイル書き込みしたら、うまく動作しない

Webページにあるソースコードを、ブラウザ ( Google Chrome 等 )画面上でクリップボードにコピーし、そのまま Arduino IDE に貼り付けて、すぐコンパイルおよび書き込み、実行すると、うまく動作しないことがあります。

【原因】
以下の環境でそういう現象が起きました。

OS: Windows10
ブラウザ: Google Chrome
日本語漢字変換: Microsoft IME
Arduino IDE: ver 1.8.2 , 1.8.3

恐らく、Arduino IDE 1.8.2 から、UTF-8文字コード変換方法が変わったことによるものと考えられます。
Arduino IDE 1.8.2 からスケッチにUTF-8コードの日本語漢字を入力すれば、シリアルモニターにもUTF-8文字コードのまま日本語漢字が表示されるようになりました。
そこで、ブラウザ上のソースコードに日本語漢字のあるものだと、そのままクリップボードにコピーして Arduino IDE に貼り付けただけでは、他の文字コードのままの場合があり、そのままコンパイル書き込みしても、正しく動作しない場合があります。
これは、日本語文字列に限って起こる現象と思われます。
特に、Web から GET した文字列を抽出する場合に全角文字をつかって検索したりする場合はうまく動作しません。

【対策】
Arduino IDE のスケッチを一旦、名前を付けて保存してください。
その後、コンパイル書き込みすれば、UTF-8文字列は正しく表示されると思います。
Arduino IDE スケッチ上の日本語漢字または全角文字が画面に正しく表示されていれば、保存さえすれば正しい文字コードに変換されます。

まとめ

現段階で思いついたトラブルシューティングは以上です。
もし、誤りや、その他のトラブル対処方法等がありましたら、コメント等でご連絡いただけると幸いです。
新たに見つかったものは、随時、この記事に足していこうと思っておりますので、よろしくお願いいたします。

mgo-tec電子工作 関連コンテンツ ( 広告含む )

スポンサーリンク

Amazon.co.jp 当ブログのおすすめ







投稿者:

mgo-tec

Arduino , ESP32 ( ESP-WROOM-32 ) , ESP8266 ( ESP-WROOM-02 )等を使って、主にスマホと連携した電子工作やプログラミング記事を書いてます。ライブラリも作ったりしてます。趣味、独学でやってますので、動作保証はしません。 電子回路やプログラミングの専門家ではありません。 畑違いの仕事をしてます。 でも、少しだけ電気の知識が必要な仕事なので、電気工事士や工事担任者等の資格は持ってます。

「ESP8266, ESP-WROOM-02, ESPr Developer トラブルシューティングまとめ」への4件のフィードバック

  1. 非常に参考にさせていただいております。
    以下のエラーで色々やっているのですが、うまくコンパイルしたのが転送できておりません。
    アドバイスいただけると嬉しいです。

    Arduino:1.8.1 (Mac OS X), ボード:”Generic ESP8266 Module, 160 MHz, 80MHz, QIO, 921600, 4M (3M SPIFFS), nodemcu, Disabled, None”

    ビルドオプションが変更されました。全体をリビルドしています。
    最大1044464バイトのフラッシュメモリのうち、スケッチが230557バイト(22%)を使っています。
    最大81920バイトのRAMのうち、グローバル変数が32108バイト(39%)を使っていて、ローカル変数で49812バイト使うことができます。
    warning: serialport_set_baudrate: baud rate 921600 may not work
    Uploading 234704 bytes from /var/folders/z0/ggnt7s1d3cx7v_ynhpp295jr0000gn/T/arduino_build_551472/sketch_feb19a.ino.bin to flash at 0x00000000
    …………………………………………………………………….. [ 34% ]
    …………………………………………………………………….. [ 69% ]
    ….スケッチの書き込み中にエラーが発生しました
    .warning: espcomm_send_command: didn’t receive command response
    warning: espcomm_send_command(FLASH_DOWNLOAD_DATA) failed
    warning: espcomm_send_command: didn’t receive command response
    error: espcomm_upload_mem failed

    「ファイル」メニューの「環境設定」から
    「より詳細な情報を表示する:コンパイル」を有効にすると
    より詳しい情報が表示されます。

    1. 藤田さん

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

      さて、私はMac を持っておりませんので、どうしてそういうエラーになるのか、正直分かりません。

      warning: serialport_set_baudrate: baud rate 921600 may not work

      と出ているので、おそらくシリアルポートの速度が速すぎるのかもしれません。
      試しに、115200 bps でアップロードしてみるとかですかね。

      1. ご回答いただいていたのにもかかわらず、お返事が遅くなり申し訳ございません。一度試してみます。よろしくお願いします。

コメントを残す

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

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