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

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等を使

ClojureでCompojureを使わずにサーブレットを書く方法

Clojureでgen-class、proxyを使ってみようと思い、試しにサーブレットを書くとどうなるかを試してみました。 コンパイルにLeiningenを使うためプロジェクトを作ります。 lein new sample-servlet まずはsrc/sample_servlet/servlet.cljを書いてみます。 (ns sample_servlet.servlet (:gen-class :extends javax.servlet.http.HttpServlet)) (defn -servlet [this request response] (.setContentType response "text/html; charset=UTF-8") (let [out (.getWriter response)] (.. out (println "<html><body>hello world</body></html>")))) (defn -doGet [this request response] (-servlet this request response)) 依存関係とクラスファイル生成のオプションを与えたproject.cljファイルを作りました。 (defproject sample-servlet "1.0.0-SNAPSHOT" :description "FIXME: write" :dependencies [[org.clojure/clojure "1.1.0"] [org.clojure/clojure-contrib "1.1.0"] [javax.servlet/servlet-api "2.5"] ] :namespaces [sample_servlet.servlet]) 必要なライブラリを取得しコンパイル。 lein deps lein compile 無事生成されたことが分かります。 % ls -lr