以下の記事で、Flashサイズを確認してください。
ESP-WROOM-02 ( ESP8266 ) チップ・メモリ・MACアドレス情報確認方法
(2018/06/18)
Arduino core for the ESP8266 ver 2.4.1
では、OTAでなくても USBシリアルで 4M/3M SPIFFS アップロード可能になりました。
試してみて下さい。
以下、古い記事です。
(2018/06/18)
今回は、私が何度も遭遇した ESP-WROOM-02 ( ESP8266 ) SPIFFS ファイルシステムアップローダーのトラブルシューティングについてです。
Arduino IDE 1.6.8 では フラッシュ設定を 4M ( 3M SPIFFS )にするとシリアルポートではアップロードできないことは分かっていました。
それを解決する方法はArduino IDE 1.6.9 にすれば問題なくアップロードできると思ってました。実際にそうすれば出来たんです。
しかし、今回、もう一つ別のESPr Developer ( ESP-WROOM-02 開発ボード )にしたら、なぜかシリアルポートでアップロードすると、こんなエラーが出ます。
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!
つまり、IDEとESP8266との通信でコマンドのやり取りが上手くいってないということですね。
前のバージョンのESP8266ボード設定が残っているせいかと思ってこちらの記事にあるようにArduino15フォルダを削除してIDEを再インストールしてみたりしてもダメでした。
GitHubのArduino core for ESP8266 WiFi chip ページの中のSPIFFS Issue ページでもその議論が沢山あったのですが、根本的な解決策が出ていないようでした。
いろいろと試した結果、一番確実な解決策は以前の記事でも取り上げたOTA機能を使ってアップロードすることが現時点で最良のトラブルシューティングという結論に至りました。
改めて、その方法を紹介しておきます。
ちなみに、ここではWindows PCの方法しか紹介できません。残念ながら私はMacを持ち合わせておりませんのでご了承ください。
※OTAアップロードではWi-Fi経由でアップロードします。
ですから、Wi-Fiルーターが必要です。予めSSIDやパスワード設定は済ませておいてください。 そして、Wi-Fiルーターを立ち上げておいてください。
1.Arduino IDE に ESP8266 ボードと SPIFFS ファイルシステムアップローダーをインストールしておく
Arduino IDE は Arduino.cc ページの 1.6.12 が推奨です(2016/10/20時点)。
ESP8266ボードは現在のバージョンは 2.3.0 です。
このインストール方法はこちらのページをご覧ください。
古いバージョンの設定が残っているとエラーになる場合がありますので、そのページにあるようにArduino15フォルダを削除してから再インストールしてください。
SPIFFSファイルシステムアップローダーの現在のバージョンは 0.2.0 です。
こちらのインストール方法はこちらのページをご覧ください。
2.Pythonをインストールする
汎用プログラミング言語の Python をインストールします。
正直、私はこのPythonは全く分かりませんので説明できません。
ただ、このOTA機能を使うにはこれが必要なのです。
まず、以下のリンクのページを開いて、Pythonをダウンロードします。
2016/7/6時点でバージョン2.7.12の方をダウンロードしてください。
https://www.python.org/downloads/
ページの様子は以下のような感じです。
3.5.2の方では動作しないようですので、注意してください。
ダウンロードしたら、python-2.7.12.msiファイルをクリックします。
すると以下のような画面が出てきますので、Install for All users をクリックしてください。
これは自分のPCが他のすべてのユーザーにpythonが使えるようにするということです。
その後Nextを押して次へ進んでください。
すると、以下のような画面が出ますので、デフォルトで良ければ次へ進みます。
違うフォルダにしたい場合はパスを設定してください。
次の画面が大事なところです。
Add python.exe to Path の赤い×のところをクリックしてください。
すると、以下のような画面が出てきます。
とりあえず、
Will be installed on local hard drive
を選択すればOKです。
これはローカルドライブにインストールされますよ、ということです。
下の Entire feature … はすべての機能をインストールしますよ、という意味ですが、とりあえず、一部だけでもOKです。
これを飛ばすとOTAが動きませんので注意してください。
これはインストールした python.exe のあるフォルダにWindowsのPathを通すということですのでとても重要です。
これを飛ばすとOTAが動作しませんので注意してください。
インストールが終わったら以下の画面が出ますので終了してください。
その後にWindows を必ず再起動してください。
私は再起動せずに使っていて、OTAが動作しなくて、永遠にハマったことがありますので要注意です!!!
SPIFFS Upload failed! というエラーが出たらここが注意するポイントです。
それでもWindows10で再びOTAアップロードできなくなった場合の対処方法
パスを通してインストールしたのにも関わらず、パスが通っていないことがありました。これは何故だかわかりません。 おそらく、pythonのインストーラーがバグっている可能性があるのでしょうか? その場合は以下の手順でパス(Path)を通してください。1.Windowマークを右クリック
2.システムをクリック
3.システムの詳細設定をクリック
4.環境変数をクリック
5.Pathを選択して編集をクリック
6.新規をクリック
7.pythonのpathを入力
下図の様にPathに先ほどインストールしたpythonのローカルフォルダパスを入力します。 デフォルトでは C:\Python27 です。 全て入力したら、ウィンドウのOKをクリックして全て閉じればパス通し完了です。
3.Arduino OTA の Basic OTA スケッチをコンパイルする
Arduino IDE を再起動したら、サンプルスケッチの Basic OTA を開きます。
次にこのスケッチの以下のところをご自分のWi-FiルーターのSSIDとパスワードに書き換えます。
次に、名前を付けて保存しておきます。
次に、その保存したスケッチのフォルダを開きます。
フォルダを開いたら、下図のように data という名前のフォルダを新規に作成します。
そのデータフォルダの中にESP-WROOM-02 ( ESP8266 ) のSPIFFSフラッシュにアップロードしたいファイルをコピーしておきます。
例えば、こんな感じでコピーしておきます。
その後、BasicOTAスケッチをUSBシリアルポートでコンパイル書き込みします。
次に、大事なのは、Arduino IDE を再起動します。
これをしないとOTAが使えませんので注意してください。
4.OTA機能でSPIFFSファイルをアップロードする
Arduino IDE を再起動して、保存したBasicOTAを開いたら、下図のようにシリアルポートの中にESP8266のWi-Fiポートがあるので、それをクリックして選択します。
次にいよいよ予めインストールしておいたSPIFFSファイルシステムアップローダーでdataフォルダに保存したファイルをアップロードします。
(ここで、上手く書き込めない場合は、再度IDEを再起動してみてください。
シリアルポートにESP8266のIPポートが無ければ、再度シリアルUSB経由でBasicOTAファイルをコンパイル書き込みしてみてください。)
SPFFSアップロード中は書き込み中はこういう画面になりますが、進行具合は全然わかりません・・・。
書込み終了したらこんなメッセージが出ます。
5.普通にシリアルUSBでスケッチをコンパイルする。
以上が終わったら、その後は普通にコンパイルしたい対象のスケッチをシリアルCOMポート( USB ) で選択してコンパイル書き込みしてください。
今回は以上です。
やはり、ESP-WROOM-02 でも個体差があるのでしょうか・・・。
OTAを使わなくてもシリアルで3Mでアップロードできるものとできないものがあるようです。
結局、OTAでアップロードした方が確実かもしれません。
その他の対処方法があったら是非教えていただきたいものです。
ではまた・・・。
Amazon.co.jp 当ブログのおすすめ
コメント
初めましてOTAでの書き込みについてこのサイト様を参考にさせて頂いております。
一つの点で悩んでいるのですが、このサイト様に記述してある通りの注意事項をいくつか確認したのですが、ツール→シリアルポート選択のところにNetworkPortsが現れません。 この問題が起こりうる原因として、どのような問題がありますでしょうか?
iectecさん
お返事遅くなり、すみません。
次のことを確認してみてください。
1.サンプルスケッチのBasic OTAをコンパイル書き込みしたら、一旦Arduino IDEを閉じて、再度起動してみてますでしょうか?
2.Python のPathが通っていますでしょうか?
Windowsでこれを確認するには、コマンドプロンプト(管理者)を開いて、pythonと入力してみてください。
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500 32 bit (Intel)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.
>>>
みたいに表示されればOKです。
3.Basic OTAスケッチのSSID、パスワードをご自分のルーターのものに書き換えてますでしょうか?
4.ご自分のルーターでESP-WROOM-02がアクセスできるように設定できていますでしょうか? 例えば、最大アクセス数を超えてしまっているとか、MACアドレスフィルタリングがかかっているとか・・・。
私も SPIFFS Upload failed! が出て書き込めず悩んだ事がありました。
私の場合は、SPIFFSをUSBハブ経由で書き込んでいたものを、USB直結にしたら正常に書き込めました。
スケッチはUSBハブ経由でも正常に書き込めていたので、なかなか
気が付かなかったのですが、ふと試しにUSBハブを使わずに書き込んでみたところ、すんなり書き込めてしまいました。
USBハブを使っている方は一度試されると良いかもです。
obiwanさん
コメントありがとうございます。
そうそう、OTAアップロードに関しては電流量が問題になりますので、パソコン直挿しか、1A以上のUSB-ACアダプターか、モバイルバッテリー電源にしないとアップロードできないようです。
USBハブは電流量が足りませんので気を付けた方が良いですね。
私もハマリました。
シリアルUSB場合は、ESPr Developer に関しては、Rev印なし、Rev.3 両方とも、パソコンにUSB直挿しでやっていますが、アップロードできませんでした。
Rev.2では書き込みできるようです。。
今は、有線シリアルの4M/3Mアップロードは諦めています。
もっぱら、OTAアップロードができているので、いいかな・・・、と思ってます。
大変参考になり、SPFFSのOTAでのアップロードがうまく行きました。
「SPFFSアップロード中は書き込み中はこういう画面になりますが、進行具合は全然わかりません・・・」と、ありますが、Serialを繋いでおくと、Serialの方に、進行状況が出力されますよ。
SoftwareSeriarlの設定がされていると、そちらにも出力されるみたいです。
大室さん
コメントありがとうございます。
なるほど、そういえば、BasicOTA のサンプルコードにはSerial.print がありますね。
シリアルモニターには出力できませんが、他のシリアル機器に出力できますね。
シリアルUSB変換を介してパソコンへ出力できそうですね。
家にWi-Fiルーターがないときは、BasicOTAを書き換えてsoftAPIPで動作させてノートpcとESP8266を直接接続しても書き込めました。
カンパニーさん
とても有益な情報ありがとうございます。
なるほど! softAP モードでOTAという方法がありましたか・・・。
これは思いつかなったです。
もう、これから将来はUSBケーブルを使わず、OTAの時代になってくると思います。
この機能を存分に生かしたいですね。
情報ありがとうございました。
m(_ _)m
USBシリアルで書き込めました!(自分の環境でしか検証していません)
https://github.com/esp8266/arduino-esp8266fs-plugin/issues/12(英語ページ)を参考にして。
下記のように2つのファイルの内容を書き換えました。
ただし、SPIFFSに書き込める最大容量がほんのわずかに減るみたいです。
“C:\Users\\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\boards.txt”ファイルの
169行目”generic.menu.FlashSize.4M3M.build.spiffs_start=0x100000″を”generic.menu.FlashSize.4M3M.build.spiffs_start=0x108000″に書き換え
171行目”generic.menu.FlashSize.4M3M.build.spiffs_blocksize=8192″を”generic.menu.FlashSize.4M3M.build.spiffs_blocksize=4096″に書き換え
“C:\Users\\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\tools\sdk\ld\eagle.flash.4m.ld”ファイルの
14行目”PROVIDE ( _SPIFFS_start = 0x40300000 );”を”PROVIDE ( _SPIFFS_start = 0x40308000 );”に書き換え
17行目”PROVIDE ( _SPIFFS_block = 0x2000 );”を”PROVIDE ( _SPIFFS_block = 0x1000 );”に書き換え
なぜかわからないけど書き込みに失敗することもありました。
失敗した→一度OTAでSPIFFS書き込み→シリアルでSPIFFS書き込み→成功
ってこともありました。
なんか不安定です。
カンパニーさん
コメント有り難うございます。
昨日やっと発売されたばかりのESP-WOOM-32の記事を書き上げたばかりですので、今度試してみたいと思います。
OTA機能でSPIFFSファイルをアップロードする時、ESP-WROOM-02開発ボードを使用せず、IO0(Upload_SW)と RST(RESET_SW)でのUSBで書き込みを行う場合のボードでは、OTAモードでのアップロード時は IO0_SW RST_SW 共何もしない状態でそのまま書き込むのが分からず、苦労しました。python-2.7.13.msi を使用してます。
他の方に参考になればとコメントしました。
太田さん
当ブログをご覧いただき、ありがとうございます。
なるほど・・・。
ボードによっていろいろ違いがあるんですね。
私は、ESPr Developer ( ESP-WROOM-02開発ボード )以外のボードで OTA はやったことが無いので何とも言えないのですが、この情報が他の方々の役にたってくれるといいですね。
情報ありがとうございます。
m(_ _)m