読者です 読者をやめる 読者になる 読者になる

hogehoge, world.

米国カリフォルニアから日本に一時帰国中のソフトウェアエンジニアがIT・自転車・音楽・天体写真・語学などについて書く予定。

ESP-WROOM-02(Arduino)によるWiFiネットワーキング (1) ~ はじめに

ESP-WROOM-02というWiFiモジュールがある。たったの650円で手に入り、触ってみるとこれがなかなかおもしろい。

Wi−Fiモジュール ESP−WROOM−02 DIP化キット: 無線、高周波関連商品 秋月電子通商 電子部品 ネット通販

f:id:tomoto335:20160508013220j:plain

WiFiモジュール」とは一体何のことだかわかりにくいかと思うが、蓋を開けてみると「Arduino互換マイコンWiFi機能が付いたもの」である。

  • Arduinoというのは「誰でも簡単に組み込みソフトウェアの開発ができる」ことを目指した開発プラットフォームである。Arduinoマイコン(または互換機)を買ってきて、PC上のArduino開発環境からプログラムを書き込めば、LED・モーター・センサーなどを制御するシステムが簡単に作れてしまう。
  • ESP-WROOM-02は、これにWiFi機能が付いて、アクセスポイントに接続したり、あるいは自らがアクセスポイントになってPCやスマフォと無線でTCP/IP通信できるハードウェアである。
* * *

百聞は一見に如かず、ということで実例をお見せしよう。下の動画はWiFiを通じたHTTPリクエストでクマーを動かすシステムである。

  • 左下にあるESP-WROOM-02がHTTPサーバとして動作しており、HTTPリクエストとしてやって来るREST風コマンドにクマーが反応する。
  • 既存のWiFiアクセスポイントに参加することも、自身が単独のWiFiアクセスポイントになることもできる。WiFiの設定もHTTPでスマフォ等から行う。
  • 冒頭の写真は本クマーシステムのブレッドボードそのものである。

ちなみに、本クマーシステムは実際のソフトウェア開発現場でバグ報告やバグ修正の通知に使用され、殺伐としたソフトウェア品質保証行程に癒しを与えるという実績を上げている。

もうひとつ、こちらは同様にHTTPコマンドで回転灯を点灯させるシステムである。

f:id:tomoto335:20160508014255j:plain

これも実際のソフトウェア開発現場でCI(Continuous Integration)におけるビルド失敗通知に使用されており、「コラー、変なソースをチェックインしたヤツは誰だ!」「すいませんすぐ直します!(くそぅ回転灯のおかげで速攻ばれちまったぜ…)」と開発生産性向上に貢献している。*1

* * *

ここで個人的には、こんなArduino+WiFiを備えたモジュールがたったの650円で手に入るというのは、我々生粋のソフトウェア屋が組み込み分野に足を踏み出すという文脈において、かなり革命的なことではないかと思うわけである。

Arduino単体だと、LEDチカチカやセンサー読み取りのような実験レベルのものは驚くほど簡単に動かせてしまうのだが、いざ意味のあるアイディアを実現しようとするとこれがなかなか難しい。スタンドアロンなシステム(自律的に稼働する車とかロボットとか)を作るにしろ、PCに接続して使う外部デバイスとのインタフェースを作るにしろ、制約が厳しくアイディアを選んだり、ソフトウェア屋としてのスキルセットが活かしにくかったり、結局のところ「意味がある」と言えるレベルに到達するためのハードルは数も高さもそれなりにあるのである。

ところが、WiFiTCP/IPまでデフォルトで使えるとなると話は大きく変わって来る。デバイスから公開のWebサービスに直接アクセスしたり、親機やスマフォと普段使い慣れた方法で連携したり、我々ソフトウェア屋の得意な領分でアイディアをかたちにする余地が大きく広がる。またWiFiというどこにでもあるインフラを使えるので、設置場所を選ばず応用範囲が広くなる。しかも安いので、多数集めての連携もできるし、思い切った実験で壊しても惜しくない。ソフトウェア屋の技術や発想の基礎はそのままで、アイディアをかたちにしてくれる強力な「おもちゃ」が手に入ると言える。

例えばこの「天気予報サービスから情報を取得して色が変わる雪だるま君」は、この特性をうまく活かした、可能性を感じさせる好例と言えるだろう。

というわけで、これを自分だけの楽しみにしておくのはもったいない、特にアイディアを持っている人には是非実現手段の引き出しのひとつとして持っていてもらいたい、とこのような書き物をすることにした次第である。

ただし、ArduinoESP-WROOM-02の入門記事は既に秀逸なものがネット上に幾つも書かれているため、私が今更同じことを繰り返す意義はない。私は、私自身が辿った道筋や、私自身が発見した(ネット上にあまり情報がない)事柄を中心に紹介していきたい。基本的な事項が抜けてるなぁと思われた読者は、まずは適当なキーワードでググってもらい、それでも情報がなければコメントで質問いただければと思う。

*1:なお現在使われているのはWiFi版ではなく有線の版である。