次のお題はESP8266で決まり。この機能でこの価格は驚異
2015年の暮れも押し迫ってきた。実は前回のDC-DCコンバーターの工作の最中、気になったディバイスがあって買っておいたものがある。これを次のテーマにしようと決めてはいたものの12月に入って何かと忙しく(忘年会が6回もあった)、あまり先に進んでいない。
この研究所のブログの更新間隔は年々長くなる一方で、今年は遂に一ケ月に1回程度と言うありさまである。今回もこのまま行くと年を越してしまいそうだ。話を切らさないためとりあえず途中経過だけでも記しておくことにする。(12/31/2015記)
WiFiモジュールESP-WROOM-02(ESP8266)について(12/2/2015)
これがそのディバイスの名前である。最初はUARTのインターフェースを持った単なるWiFi(無線LAN)モジュールだと思っていたが、どうもそれだけではないらしい。ArduinoのIDE(統合開発環境)で開発が出来るというのだが、情報が断片的で今一つ全体が見えていなかった。
昨年暮れあたりから話題になっていたが、WiFi部分が日本での技術基準適合証明(いわゆる技適)を取っていなかったので、関心は専門家や一部の好事家だけに限られていた。当研究所はArduinoはやらないし、インターフェースがUARTでは画像や音声は通らないし、WiFiならすでにEdisonがあるので、それほど強い興味を持たずにいた。
それがこの春、技適を通ったモジュールが、次々に大手の電子部品店から発売され、ネット上で盛んに取り上げられるようになって詳しい情報が流れてくると、これがとんでもないチップであることがわかってきた。
何しろ価格破壊なのである。まず無線LANを通るインターフェースが¥500台で手に入るのである。しかもこのモジュールのI/OインターフェースはUARTだけではなく、SPIやI2C、I2S、それにPWM出力3チャンネル、普通のディジタルI/O、さらにADC入力まで持っていて、これらをユーザーで自由にプログラム可能だというのだ。
ちょっと前までは、マイコンをネットにつなぐことだけで、相当な手間と技術力を要していた。ネットワークにつなぐICチップだけでも¥500以上したのである。それが同程度の価格で、無線LANがつながりUARTで制御できるだけですごいのに、色々なことが単体だけで出来てしまいそうなのだ。
Linuxが動き高解像度画像や動画を制御できるBeagleBoneBlack(BBB)や、RaspberryPiなどのボードとは、応用の方向が違うので比較しにくいが、簡単な遠隔操作ぐらいなら、このモジュールだけで殆ど出来てしまうのではないか。Xbeeどころではない、恐ろしい話である。
開発元は、中国の上海に本社があるファブレスメーカーExpressifという会社で、すべてオープンソースを謳っている。はじめArduinoインターフェースというので何かと思ったら、Arduinoのスケッチライブラリでユーザープログラムが開発できるということだった。gccでの開発環境も準備されているようだ。
BBBや、Raspiのときも驚いたが、この中味は当初考えていた以上に隔絶したレベルに達している。まさしくIOT(Internet Of Thing)時代にふさわしい、革新的なディバイスだ。当研究所でも表面実装DC-DCコンバーターの制作が一段落したので、迷わず次のお題とすることとした。
あっさりATコマンドで無線LAN確立。でもまだこれは序の口(12/3/2015)
モジュールは秋月で入手した(¥550)。良く調べずに買ったが、モジュールは2ミリピッチなので変換基板がいる。秋月の変換基板はブレッドボード用で気に入らなかったのでAitendoでピッチ変換基板だけ買った(Aitendoでもモジュールを売っている。¥580)。
とりあえずは動作確認だ。ピッチ変換基板にハンダ付けし、ブレッドボードでテストを始める。あっさり動いた。WiFi接続を開始する。これも苦もなくつながった。pingで確かめる。少し遅いが、ちゃんとレスポンスを返してくる。にわかに信じられないがネットが通った。
いやいやEdisonでも感激したけれど、このモジュールは¥500台で買えるのだ。信じられない。調子に乗って、ATコマンドでTelnet端末にしてみる。これも問題なく動いた。実際にシリアルから送ったデータが、Telnet端末にしたPCのコンソールに出力されるのを見ていると、何か心の底から感動が盛り上がってくるのを抑えられない。
この単体だけでアプリが開発できるというなら、以前(7年くらい前)作ったLANによるプリンター電源の遠隔操作などいとも簡単に出来てしまうということだ。あのときは、¥1000近いNICチップと、¥200以上するマイコンが必要で、Cソースは数百ステップ、しかも有線LANだった。
しかしATコマンドインターフェースでネットとつながることに驚いているのはまだ早い。本題はこれからだ。モジュールに用意されているUART以外のペリフェラルを活用すればもっと様々なことがネットを通じて行えるのだ。勇躍、次のステップに進むことにした。
ジャンパーのかたまりでないまともなテスト基板を作る(12/5/2015)
その前にやることがある。これまでのATコマンドを使ったテストは、スルーホールに差せる「ばね付き」ジャンパーで変換基板とミニブレッドボードをつないだ空中配線状態である。プルアップ抵抗などを載せたブレッドボードの上はジャンパーで盛り上がっている。
動作モードの切り替えにはGPIOピンを操作する必要があるし、リセットすることもあるので、この先は今の状態では不安である。Xbeeのこともある。Xbeeに較べれば1/5の価格なのでそう神経質になる必要はないが誤操作で動かなくなったチップの回復に無駄な時間を使いたくない。
アプリケーションを何にするか決めていないので、マザー基板を作るのをためらっていたが、このままではどうにもテストが進めにくい。ESP8266を使いこなすためにも、とりあえずはちゃんとした基板にマザー基板を作ることにした。
定番の秋月のC基板を用意して、リセットスイッチや、ジャンパーピンをつけたマザー(テスト用)基板を作る。ただ、具体的な用途が決まっていないのでレイアウトに迷う。電源は、USBからとらずに独立した電源アダプターを付けることにする。サイト情報ではピークで100mA以上流れるので市販のシリアルのUSBに出ている3.3Vを使うのは無理なようだ。
しかし、基本的なモジュールの結線がわかりにくい。書き込みモードの設定に必要なピンの数が2つなのか、3つなのかサイトによって違う。いくつかのサイトを渡り歩いて、何となく決めたが、これで本当に良いのか確信が持てない。とりあえずは3つとも指定通り出来るようピンヘッダーやスイッチをつけた。
ESP8266も奥が深い。何故みんなが飛びつかないかわかった(12/14/2015)
かたっぱしからESP8266関係のウェブサイトを覗いて情報を蒐集する。いやいやこれは奥が深い。ブレッドボードの実体配線を丁寧に写真で紹介し、操作手順をひとつひとつ説明するサイトが多いが、全体が見渡せていないので良く分からない。
しかも、開発手法には、どうもいくつか種類があるようで、具体的な手順が示されても、それがどういうことなのか理解できない。良く言う「自分が今何をやっているのか理解できない」レベルである。
ATコマンドをUART接続で別のArduinoから送って操作するところもあれば、単体そのものをArduinoのIDEでプログラム開発するところもある。そうかと思えば別のフラッシュローダーで直接ファームに出来合いのバイナリをロードしているところもある。
アプリケーションも、LEDチカチカから、既存のATコマンドインタフェースにSSL(暗号化ソケット層)を追加するプログラム開発の高度な解説まで幅がやけに広い。何を参考にすればよいのか迷ってしまう。この状態では、初心者は記事に書かれたことは出来ても、その先は全く進めないだろう。
わからないまま我慢して沢山の情報を浴びているうち、やっと何となく全体を理解することが出来た。これまでにわかったこと、何故これがわかりにくかったのかを以下にまとめてみた。
- WiFiインターフェースの裏に32ビットのマイコンが隠れており、この仕様が表に出て来ないのでわかりにくい。アプローチがいくつかあるが(ATコマンドなど)、それぞれがなるべく内部を知らなくても動かせるように設計されているので、初めての者には何が何やらさっぱりわからない。
- ATコマンドだけのインタフェースでも、別のマイコンをつないでUARTでおしゃべりすればWiFiを動かしてサーバーのようなこともできる。これと、ESP8266単体でのサーバー構築とは全く別になるのだが最初この違いが判らなかった。
- Arduino IDEで開発可能というが、ハードの仕様が表に出て来ないので見通しがつかない。スケッチライブラリは良く見れば沢山あるのだが、最初は、Arduinoでの開発という意味が良くわからなかった。こいつはマイコンなのだ。その後このあたりを明確に示したサイトが見つかり疑問は解けた。
- SPIフラッシュにファームを焼くフラッシュローダーが用意されているが、これを使いこなすのは容易ではない。しかも、技適に触れるような改造や改変が出来そうなところもあるようなので、触るのは少々勇気がいる。
- 要するにウェブ上のほとんどの記事が何か単一の機能の実現の、しかも初心者向けの単方向の手順の解説が主なので、全体をつかめない。ブレッドボードの実体配線図とソースコードだけでは、このESP8266を理解することはとても無理だ。
ファームの戻し方がわからないので手が出せない(12/24/2015)
嵐のような忘年会ラッシュ(11月末から数えてみると6回)、法事で関西を往復、続いて年賀状の準備、お正月の買い出しなど12月は気ぜわしい日が続いた。ESP8266の方は、ATコマンドでの実験の次のテーマ、ArduinoのIDEで独自のファームをテストするステップに入ったが中々手が出ない。
Arduinoでファームを書き換えると、出荷時についているATコマンドインターフェースは上書きされてしまう。万が一ファーム書き込みに失敗しても元へ戻すようにしておきたいが、この方法が良く見えないので、先に進めないのだ。
ファームの書き換えは、複数のバイナリ―ファイルを所定のアドレスに正確に焼く必要がある。この直か打ちのアドレス値が、ハードのバージョンによって違うのが悩ましい。アプリの開発は超上流のコマンドベースで、ファーム書き換えは超下流のアドレス直か打ちという落差の激しい開発環境で目が白黒する。
それでも、薄紙をはがすように段々ESP8266の全貌が見えてきた。これまでにお世話になったサイトのURLを、簡単なコメントとともにご紹介しておこう(勝手リンク失礼)。
全体の俯瞰には最高。ちょっと専門家向け
http://bril-tech.blogspot.jp/2015/07/okiot.html
要約を知りたかったら、これがわかりやすい。所長が感じたことと同じことが書いてある。 http://einstlab.web.fc2.com/ESP/ESP.html
ファームの書き直しにお世話になる。ここでも「ねむいさん」が活躍していた。 http://blog.boochow.com/article/424450970.html
今回の見本にさせてもらったページ。ステップbyステップでやさしい
http://deviceplus.jp/hobby/entry0032/
丁寧なのだが、全体を見渡せない。いきなり難しくなる。
https://tech-blog.cerevo.com/archives/859/
リアルタイムクロックストリーミングをESP8266で実現。高度なプログラム開発 https://www.mgo-tec.com/blog-entry-50.html
ウェブサーバーからのLチカで本年の作業終了(12/30/2015)
暮れも押し迫った30日、遂に目的のウェブサーバーからのLEDの点灯/消灯に成功した。まだ、いちいちURLを書き直さないと点滅しないが、曲がりなりにもArduinoによるサーバーの動作が出来るようになった。
やれやれ、ファームの書き換えはいつものように冷や汗ものだった。サイトの説明には、MACアドレスは必ずメモして残しておけと注意されていたのだが、これを守っていないことを、ファームを書き換えた後に気づき青ざめる。しかし、ファームを書くローダーはチップを認識すると、そのMACアドレスを吐き、何の問題もなかった。胸をなでおろす。
先を急いでいるので、吟味もせずサイトにあるソースコードをコピペしてコンパイルする。幸い通った。さあ、これでどうだ。順調にファームの書き込みも終わった。
早速立ち上げる。よーし、モニターのシリアルポートには指定通りのメッセージ。そりゃそうだ、一字一句変えていない。
PCのブラウザーからURLを入力する。いいぞ。モニターにメッセージが出た。gpio/0からgpio/1に入れ替える。メッセージは出たが、LEDは点灯しない。うー、何が悪いのだ。あ、指示通りGPIOピンを換えていない。面倒なのでソースコードのピンに移し替えることにする。
全部のピンを基板の外部ソケットに出しておいてよかった。ジャンパーを入れ替え再度テストする。おーし、点いた。ブラウザー画面にも、そっけないがメッセージが出る。gpio/0のメッセージを送る。消えた。
念のため、フラッシュローダーで、出荷時のATコマンドインターフェースに戻してみる。バイナリーファイルを焼くところが5か所もあるが、ひとつづつ慎重に設定する。幸いエラーもなく終了した。リセットすると、問題なく最初の状態に戻った。ただし、WiFiの設定は最初からやりなおしである(当たり前か)。
やれやれ良かった。何とか年内にブログの原稿がだせそうだ。これでESP8266の開発環境整備は一段落した。このあとは自由にアプリケーションを考えることが出来る。PWMや、ADCまであるので何か面白いものを作ってみたい。
| 固定リンク
「電子工作」カテゴリの記事
- 生存証明2(2022.10.19)
- 生存証明(2022.01.23)
- パソコン連動テーブルタップの修理を諦めて自作(2021.02.16)
- 半年ぶりのブログ更新に漕ぎつけた(2019.09.19)
- 研究所活動は停滞したままでCCDカメラ顕微鏡導入など(2019.02.08)
「esp8266」カテゴリの記事
- 半年ぶりのブログ更新に漕ぎつけた(2019.09.19)
- ESP8266のJJY電波時計のスケッチ公開(2018.10.02)
- ESP8266による電波時計リピーターの完成(2018.09.09)
- また脱線。今度は電波時計リピーターでさらに迷走(2018.08.03)
- ESP8266の赤外線リモコンウェブサーバー実装にはまる(2018.06.23)
コメント