Image

ESP8266で書き込めない時に対処したこと

2016/07/07 12:02:00
ESP8266のチップで書き込めなかった問題が起こり、それについての対処を参考になる可方がいるかもということでブログにもメモとして残しておきます。

書き込みで失敗したケースとしては、


の二つです。
OTAまで使って書き込もうとしている背景は、ニャンパスとしてRobipというプログラミング学習環境を作っていて、そのツールの中でWi-Fi経由での書き込み機能を対応することでスマートフォン、タブレットなどでのビジュアルプログラミングしたものが、OTA経由で電子工作のプログラミングができるようという機能があり、いくつかのESP8266を積んだモジュールへのサポートを増やそうとしたところ(ようはRobipとしての対応デバイスを広げたかった)上記の書き込みできない問題にぶつかりました。

Facebookのこちらに書いたことの詳細版です。



ESP-WROOM-02への書き込み出来ない問題

もともと、HaLake KitというコワーキングスペースHaLakeオリジナル基板は、ESP8266を積んでいますので、この書き込みツールとしてClojureで書いたrobip-toolというのを用意していました。
このツールであればHaLake Kitには書き込めていたのですが、ESP-WROOM-02ピッチ変換済みモジュール《シンプル版》ですと最初の書き込みの段階で失敗することが分かりました。

そこで世界中で人気のESP8266ですので、色んなバージョンの書き込みツールがありまして、書き込みに成功するツールを探す旅が始まりました。
その際には、シンプル版だけでなく、HaLake Kit、ESPr Developer(ESP-WROOM-02開発ボード)、ESP-WROOM-02ピッチ変換済みモジュール《フル版》でも試して、全てで動くツールを検証しました。

途中、Go言語で書きなおしてみたりいろいろテストもしたのですが、結果的に全てに書き込めたのは、esptool-ckで、CLI経由になりますがもっとも安定していました。

ちなみに、書き込むときはこういうふうに使いました。

> ./esptool -cd nodemcu -cb 115200 -cp /dev/cu.usbserial -cf <ファイルパス>

こう書くとシンプルなことですが、もし書き込みに失敗して困るなという方は上記をお試しください。
ESP866対応したArduino IDEをお使いの方は、その内部で使っているesptoolを置き換えてあげれば良さそうですし、それも面倒であれば、Arduino IDEからコンパイル済みのファイルを作るところまでをやって、上記の方法で書き込みのところだけesptool-ckを使うと成功するかと思います。

OTAで書き込みの途中でクラッシュする問題

この問題にどれくらいの方がぶつかっているのか分かりませんが、共有しますとPlatform IOを使って書き込みを行っていると今回の場合、OTAを使ってサーバを取得する最中にクラッシュする問題が発生しました。
Webサーバのログを見るとESP8266のファイルサイズまで取得せずに終えているのた特徴で、シリアル通信で見てみるとクラッシュしている様なログが確認できました。

いろいろ試しましたが、結果的にうまくいった方法はPlatform IOに含まれる(あとでパッケージ追加した)ESP8266のArduino FrameworkのダウングレードでOTAが正常に行くようになりました。

対処法としてはこのリンクの通りです。

念のため記載すると、以下の通りです。
  1. ダウングレードさせる前に、~/.platformio/packages/framework-arduinoespressif/tools/sdk/libにある
    libmesh.a
    libwpa2.a
    このファイルをどこか別のディレクトリにコピー
  2. cd  ~/.platformio/packages
  3. rm -rf framework-arduinoespressif/
  4. git clone https://github.com/esp8266/Arduino.git framework-arduinoespressif
  5. cd framework-arduinoespressif/
  6. git checkout tags/2.0.0
  7. echo 2.0.0 >version.txt
  8. 1番でコピーしたファイルを元の、~/.platformio/packages/framework-arduinoespressif/tools/sdk/libへ移動

まとめ

Arduino IDEに含まれるesptoolがアップグレードしたりするなどで、上記の対処は不要になると思いますがので、書き込めなかった時はまずはツールのバージョンアップを試してみて、それでもダメなときの参考としてということでひとつよろしくお願い申し上げます。

さらに、そんな上記の問題を対応したRobipはこちらから。
https://robip.halake.com/
Robip用書き込みツール:
https://github.com/nyampass/robip-tool-go/releases