6.SPIFFS ファイルシステムアップローダー、4M ( 3M SPIFFS )で SPIFFS Upload failed! エラーが出る
【原因その1】
ESP-WROOM-02 や ESPr Developer の初期の Flash は全て 4MB で流通していましたが、最近は 2MB になったものが流通しています。
2MB だと 3MB のアップロードはできません。
【対策その1】
3MB のアップロードは諦め、micro SDカードから読み込む方式に変える。
又は、データファイルを1MB以下に作り直す。
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!
【原因その2】
スイッチサイエンスさんの ESPr Developer ( Rev.3 ) を使った場合はこのメッセージが出ます。(2016/12/18時点)
USBシリアルで 4M( 3M SPIFFS )でアップロードできたのは、1世代前の Rev.2 だけですが、現在販売しているものは、Rev.3 です。
【対策その2】
Wi-Fi で OTA アップロードならば可能です。
Arduino core for the ESP8266 ver 2.4.1
では、OTAでなくても USBシリアルで 4M/3M SPIFFS アップロード可能になりました。
試してみて下さい。
(2018/06/18)
その他の方法は、以下のページを参照してください。
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 というエラーメッセージが出て、リセットしてしまう場合です。
こんな感じです。
【原因】
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 の動作周波数を下げるなどの対応が必要です。
コメント
非常に参考にさせていただいております。
以下のエラーで色々やっているのですが、うまくコンパイルしたのが転送できておりません。
アドバイスいただけると嬉しいです。
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
「ファイル」メニューの「環境設定」から
「より詳細な情報を表示する:コンパイル」を有効にすると
より詳しい情報が表示されます。
藤田さん
当ブログをご覧いただき、ありがとうございます。
さて、私はMac を持っておりませんので、どうしてそういうエラーになるのか、正直分かりません。
と出ているので、おそらくシリアルポートの速度が速すぎるのかもしれません。
試しに、115200 bps でアップロードしてみるとかですかね。
ご回答いただいていたのにもかかわらず、お返事が遅くなり申し訳ございません。一度試してみます。よろしくお願いします。
いえいえ。
全然遅れても大丈夫ですよ~。
esp8266でespNow通信を試そうとしています。
esp8266のボードやその他のライブラリーはインストールが成功し正常に動作しています。
しかしながらesp_now.hがインストールできません。
何か方法が有るのでしょうか?
よろしくお願いします。
匿名さん
記事をご覧いただき、ありがとうございます。
コメント投稿が連続で2つ投稿されていたので、最初の方のコメントを採用させていただきました。
私は現在ESP8266を全く使用しておらず、当時とは環境が大幅に変化しており、しかもESP-NOWは全く使ったことがありませんので、あまりまともにお答えできないかも知れません。
ESP-NOWについてザッとネットで調べてみたところ、Arduinoスケッチ上で、
#include <esp_now.h>
と入力するのは、ESP32の場合っぽいです。
ESP8266 の場合は、
#include <espnow.h>
で良いのではないかなと思いました。
一応、現在の私の環境
Arduino IDE 1.8.19
Arduino core for the ESP8266 ver 3.0.2
でコンパイルしてみたところ、エラーせずに通ったので、ライブラリマネージャでESP-NOWをインストールする必要も無いように思います。
違っていたらゴメンナサイ。