スキップしてメイン コンテンツに移動

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

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


コメント

このブログの人気の投稿

ClojureScriptとBLE

2017年Clojure Advent Calendar 15日目の記事として書きました。 今年、ニャンパスとして、またプライベートでいろいろとBLEを扱うコードをClojureScriptで書きましたので、まとめてみます。 使用したデバイスは、micro:bitです。秋葉原や通販等で手に入り、BLE、25個のLED、加速度センサーがついている学習用のボードです。ブラウザ上でビジュアルプログラミングでの開発ができたりと面白いので、年末年始に遊んでみてください。 ClojureScriptでの環境の作り方から始まって、micro:bitとPCとの接続、リモートでのLチカを試すというIoTなClojureScriptの内容となってます。 1. ClojureScriptで、BLEな環境を作る Node.js、npm、Leiningenを入れておいてください。プロジェクトを作ります。   $ lein new figwheel-node ble figwheel-nodeテンプレートを使い、できたファイルはこんな感じです。 ./project.clj ./README.md ./package.json ./.gitignore ./src ./src/ble ./src/ble/core.cljs ./dev ./dev/user.clj 今回、PC側をBLEのセントラルとして振る舞わせ、micro:bitをペリフェラルとして操作しますので、そのためセントラル側のプログラムとしてnobleというライブラリを使います。 OS毎に依存するものが違いますので、サイトで事前に確認しておいたほうが良いです。    https://github.com/sandeepmistry/noble ※nobleはMac、Linux、Windows、FreeBSDをサポートしており、 僕自身今年nobleを使ったコードをClojureScriptを使って、Windos、Mac、Linuxそれぞれで動かしていて動作は安定していました。 では、nobleを以下のコマンドを実行しておきます。   $ npm install noble ※普段はlein-npm等を使

HaLakeKit Lino開発しました!

少し前になりますが、 デブサミ2017 にて、IoTLTさんのブースで、HaLakeKit Linoを展示させていただきました。 HaLakeKit Lino デブサミでの展示 デブサミでの展示 HaLakeKit Linoは、BLEモジュールとして、昨年からニャンパスで作ってきていたもので、ボタン電池で駆動し、スマートフォン等から、BLEを手軽に操作してもらえるようなプログラムを書き込んであります。 ニャンパスの運営するコワーキングスペースHaLakeでもささやかにワークショップを行いました。 HaLake KitというESP8266を使ったデバイスをすでに開発して、プログラミング教室で利用していますが、HaLake Kitの場合は、IoTではありますが、Wifiモジュールですので、Wifiを前提としない、スマートフォンと直接接続が出来るBLE版が欲しかったというのが開発の動機です。 特徴としては、電圧が最大12Vで駆動し、実装されているMOSFETのお陰で、そのままの電圧をGPIOから出すことが出来ます。プログラムとして、4つのGPIOを制御できるようなBLEのプログラムが予め書き込まれているため、BLEデバイスのプロトタイプとして開発していくことが可能になっています。 また、オープンハードとして公開しており、KiCadで設計しています。BLEモジュールの開発PCBの参考にもぜひどうぞ。 https://github.com/nyampass/halakekit_lino Revisionが3となっていることからも分かる通り、3回目の設計であり、というのも当初想定したSoCが生産中止になったため、最終版で切り替えています。 サンプルとして動作するiOS、Androidアプリのソースコードも、Linoと連携するものをすでに要しており、今後Githubで時間のあるときに整理して公開予定です。 ニャンパス自体がソフトウェア開発がメインの会社ですので、できればライブラリ化して簡単にBLEモジュールを簡単に操作できるようにしたいと思っています。(Linoに限らずそういうことが出来れば理想。) ワークショップの情報は こちらのConnpass で行いますし、HaLakeで毎月開催のIoT勉強会でも触ってもらえるよう