技適済みWi-Fiモジュール「ESP8266」で始めるIoT入門(Arduinoでワイヤレススイッチ作成編)


 

「ESP8266」で始めるIoT入門シリーズはこちらからお読みいただけます

UNOSHEILD+LEDBOX
UNOSHIELD+LEDBOX

みなさんこんにちは、Cerevoで回路設計を担当している押切という者です。

第一回の反響が思いの外大きくて驚いています。ブックマークやtweetしていただいた方、ありがとうございました。

先日行われたMaker Faire Tokyo 2015ではFlashAirのブースを間借りさせていただき、新製品のBlueNinjaの展示をいたしました。FlashAir同人誌にもBlueNinjaの記事を寄稿しましたので、お持ちの方はぜひご覧下さい。

このBlogでは、初心者でも「これならできそう」、「やってみようかな」と思っていただける内容を目指して書いています。夏休みですし、弊社のプロダクトとTechBlogがみなさんの創作意欲を刺激できれば幸いです。

今回はWi-Fiモジュールを使ったIoTの2回目として、実際に役立つ作例を紹介したいと思います。

いろいろなアプローチがあるかと思いますが、今回はArduinoと接続して、PCやスマホのブラウザから制御できるワイヤレススイッチを作ってみます。ブレッドボードむき出しで放置ではなく、最終的にはケースにいれて実用的な段階まで持っていきましょう。

(作例1)
最初はブラウザからLED出来る装置の作り方の手順から。Arduino UNOとESP8266モジュール下記のように繋ぎます。

  • Arduino 5V-LDO−3.3V-ESP8266(3.3V):1
  • Arduino GND-ESP8266(GND)
  • Arduino D7:SoftSerial TXD-18k/33kで3.3V相当に分圧して-ESP8266(RXD):12
  • Arduino D8:SoftSerial RXD-ESP8266(TXD):11
  • Arduino D3:PWM-R-LED(G)
  • Arduino D5:PWM-R-LED(Y)
  • Arduino D6:PWM-R-LED(R)
  • Arduino D2:Port-ESP_RST(3.3V相当に分圧して接続):2
  • Arduino D14:Port-ESP_EN(3.3V相当に分圧して接続):15
ArduinoUno-ESP8266
ArduinoUno-ESP8266

ブレッドボードでも同じつなぎ方で実現できますが、多少部品点数も増えたので、自作のWi-Fiシールドを作ってみました。

UNO_Sheild
UNO_Sheild

回路図と写真を参考に半田付けもトライしてみてください。

ESP8266とArduinoはシリアル通信し、Wi-Fi経由でボタン押下ステータスを送受信しています。またArduinoのポートを使ってLEDを点滅させています。

具体的には、ESP8266はWebserverとして機能させ、ブラウザに表示させる文字(HTML文書)はESP8266が出力します。ここではあまり細かく説明しませんので分からない用語は各自調べて下さい。

参考に簡単なブロック図のスライドを載せます。

初心者の方は矢印の向き、入力か出力かを意識して追ってみるとわかりやすいと思います。

ArduinoのSketchはGitHubに置きましたのでダウンロードして下さい。

https://github.com/cerevo/techblog-ESP8266.git

“Arduino_UNO_WLAN-LEDcontrol.ino”

このままコピペして使って貰って構いませんが、
ざっくり説明しますと。

  • ESP8266をハードリセット
  • ESP8266をリセット解除
  • ESP8266のEnableをON
  • ESP8266をソフトリセット
  • ESP8266をアクセスポイントモードに設定
  • ローカルIPアドレスの取得
  • マルチ接続設定ON 1つ以上のアクセスを受け付ける
  • サーバーモードON. 80番ポートをアクセス可能に
  • HTMLで文字とLEDボタンを表示
  • “POST”を受け取ったらLED2とLED3を交互に光らせる

となっています。Sketchのコメントも参考にして下さい。

なお、Arduin(AVR)oでなくとも他の 以外のマイコンでも通信コマンド内容は同じなので、お好きなマイコンへの 移植も容易かと思います。

ESPの制御ウェイトは長めにとってあります。USBケーブルを繋いだ状態だとシリアルコンソールにステータスが随時表示されます。
無線だと状態がわからないのでLED1はステータス表示として使いました。

操作方法は、LED1が光ると、ESP8266の接続準備完了で、PCやスマホのWi-fi接続から”ESP−****”を選択してネット接続します。繋がったら、ブラウザのURL欄に”192.168.1.4”(デフォルト値)と入力してください。

browser
browser

図のように”Hello!”の文字とLEDボタンが表示され、再度LED1が光ったらLEDボタンをクリックして、LED2が光れば成功です。しばらくするとLED2が消えて、またLED1が光ります。LEDボタンをクリックすると今度はLED3が光り、LED2,3が交互に光ります。

流れを書くと、下記になります。[]内はユーザーの操作になります。

LED1点灯
|
[ESPにWi-Fi接続設定]

|

[ブラウザに”192.168.1.4″入力]

|

ブラウザ表示

LED1点灯

|

*[LEDボタン押下]

|

LED2点灯

|

LED1点灯

|

[LEDボタン押下]

|

LED3点灯

|

LED1点灯

*に戻ります。

動画も参照下さい。

うまく表示されない場合はブラウザをリロードしてみてください。

Windows8.1:IE11,Chrome,Firefox
Mac:Safari,Chrome
Android:Chrome
iPod touch:Safari

環境で表示できることを確認していますが、ブラウザの解釈によっては表示できない場合もありますのでご了承ください。

LEDを光らせるだけで大げさな……、と思われるかもしれませんが、ここまでできたということは、これまでみなさんが作ったSketchを即無線化出来ることを意味しています。LEDを光らせる代わりに、好きなSkechに置き換えてみてください。

次の作例は、サーボモータのみ追加して、癒し系IoTガジェット、”ワイヤレス肉球”を作って見ました。

(作例1改)

スマホのブラウザ上から肉球タッチを試すことができます。

また、Arduinoの魅力は豊富なクローンがあることも挙げられます。3.3V IOの小型タイプ”Arduino Pro mini”を使えば、分圧しなくても直接ESP8266が繋げますし、単4電池2本で駆動可能でよりコンパクトなプロダクトができます。

回路図は下記のようにシンプルになります。

(作例2)

ArduinoPromini3V3-ESP8266 Circuit
ArduinoPromini3V3-ESP8266 Circuit

写真は、フルカラーLEDを光らせたものです,。簡単なケースもモデリングして3Dプリントしてみました、発光部はトレーシングペーパーを貼っています。

LEDBOX
LEDBOX
Pro-mini_LEDBOX
Pro-mini_LEDBOX

GitHubにSketchと回路図の他、3Dプリント用のAutodesk123DのデータとSTLデータも入れましたので参考にして下さい。

動作はUNOのものとほぼ同じです。こちらも動画を参考に。

Arduino UNOとシールド版と比べると、ぐっと製品に近くなっているかと思います。なお、複数のクラアントを同時にESP8266Webserverに繋ぐことができます。また、ブラウザで動くので機種依存なく動作させられます。

次回はArduinoを使わずにESP8266単体で動作させる予定です。既にお気づきかと思いますが、ArduinoのAVRマイコンよりずっと高性能なマイコンを内蔵しているので。

[おまけの中級編] パケットを解析する

ワイヤレスLANと言っても、意図通り送受信できているか確認したい場合もあるかと思います。

ここでは、Windows、Mac両対応している定番のパケット解析用フリーソフト、”Wireshark”について少しだけ触れます。

このソフトを使うことで、パケットをキャプチャ、フィルタリングすることで解析することが出来ます。使い方は検索していただければ分かりやすい解説サイトが多くありますのでそちらを参照下さい。

本作例では、例えば、ESP8266から意図通りHTMLが送信できているかどうか、
LEDボタンを押したときにPOSTしているかどうか、が確認できます。参考にして下さい。

HTML Packet
HTML Packet
POST
POST