ESP8266 モジュール + Blynk でさらりと Wake On Wan
- (※)公式サイトの「FAQ」より
+ I backed Blynk on Kickstarter. Where are my widgets and why the app is free? - App is free becasuse otherwise you would have to pay to download it. This is how AppStore and Google Play works. - Current Blynk release has a limited amount of widgets. We decided to make them free for everyone until we implement store. After that,every widget will be paid. However every backer will get them for free (according to their pledge).
準備
まず Blynk の利用を構成するみっつの要素を整理しておきます。
- Blynk アプリ
Google Play / AppStore で公開中の専用アプリを使ってユーザが構成した制御用のアプリ - IoT デバイス
専用の Blynk ライブラリを使ってユーザが作成したプログラムを導入ずみの制御対象の装置 - Blynk サーバ
Blynk アプリと IoT デバイスの連係を仲介するクラウドサービス(※オープンソースであり自前での構築も可能)
Android / iOS 端末にはそれぞれの公式ストア上で配布されている専用のアプリ「Blynk」をインストールします。利用者はこのアプリを使って独自の Blynk アプリを構成することができます。
Blynk アプリに対向する IoT デバイスのためのプログラム開発には Arduino IDE を使用します。あらかじめ IDE に ESP8266 用ライブラリモジュールを導入しておき、そこへ Blynk の提供するライブラリ群をインストールします。
Blynk の公式ドキュメントには Blynk を利用する上で必要となるこういった情報・手順がわかりやすく記述されています。また、ネットを検索すれば多くの有用な記事を参照することができます。
試作の題材について
手元のニーズに基き、Blynk を使った遠隔制御の身近な応用例として次の内容を想定しました。IoT デバイスは対象の PC と同じ LAN 環境へ設置します。
- 所定の PC を Wake On Wan する
- 所定の PC へ ping を打つ
- 所定の AC 機器への給電を ON / OFF する
- 制御対象の IoT デバイスをリセットする
外出中に自宅の PC を利用したくなる場合があります。PC をずっと起ち上げたままにしておくのは好ましくないので、これまでは遊んでいる Android 端末を自宅で待機させておき GCM 経由で所定の PC を Wake On Lan するという方法をとっていました。それはそれで問題なく機能しているのですが、必要な手順を踏むのがだんだん面倒になってきたことに加え、その場で手早く PC の起床状況を確認できないことに不便を感じていました。確認方法は所定の IP アドレスに対する ping テストで十分でしょう。
上記 3.は拡張用です。手元では留守の夜の防犯用に自宅の部屋の電灯を任意のタイミングで点灯/消灯するために使っています。これまでは上の PC に接続した USB 赤外線リモコンで操作を行っていましたが、それも面倒なので別の手段がほしいと思っていました。
実装方法について
Wake On Lan マジックパケットの送出と所定の PC への ping 打ちは Blynk の「Virtual Pin」機能を使って IoT デバイス側と連携すれば簡単に実現できると考えました。Blynk アプリ上に配置したボタンの設定において「OUTPUT」に物理ピンではなく適当な仮想ピンの番号を割り当てて、受け側の IoT デバイス側のコードに "BLYNK_WRITE(仮想ピン番号)" ハンドラを定義してそこに必要な処理を記述すればよいはずです。
-
Send data from app to hardware - Blynk 公式ドキュメント - blynkkk.github.io
Send data from app to hardware You can send any data from Widgets in the app to your hardware. All Controller Widgets can send data to Virtual Pins on your hardware. For instance, code below shows how to get values from the Button Widget in the App BLYNK_WRITE(V1) //Button Widget is writing to pin V1 { int pinData = param.asInt(); } When you press Button, Blynk App sends 1 On second click - it sends 0 This is how Button Widget is set up:
- Wake On Lan マジックパケットの仕様に関する記事
- WakeOnLAN - The Wireshark Wiki - wiki.wireshark.org
- Magic Packet Technology White Paper (PDF) - support.amd.com
- Espressif 社公式フォーラムの以下の記事の末尾に ESP8266 で ping を実行するサンプルコードあり
- Ping_start function - bbs.espressif.com
-
Virtual Pins - Blynk 公式ドキュメント - blynkkk.github.io
Virtual Pins Virtual Pins are designed to send any data from your microcontroller to the Blynk App and back. Think about Virtual Pins as channels for sending any data. Make sure you differentiate Virtual Pins from physical pins on your hardware. Virtual Pins have no physical representation. Virtual Pins can be used to interface with libraries (Servo, LCD and others) and implement custom functionality. The device may send data to the Widget to the Virtual Pin like this: Blynk.virtualWrite(pin, "abc"); Blynk.virtualWrite(pin, 123); Blynk.virtualWrite(pin, 12.34);
AC 機器への給電の ON / OFF の制御には ESP8266 モジュールからの 3.3V 出力信号でリレースイッチを操作すればよいでしょう。入力側と出力側の絶縁性の高いソリッドステートリレー(SSR) は動作時にカチリと音のする有接点リレーに比べ値段が高めですが秋月電子さんが電子工作向きの手頃なキットを販売しています。
- ソリッド・ステート・リレー(SSR)キット 25A(20A)タイプ
- akizukidenshi.com ¥250 (2015年10月8日時点)
「出力制御電圧:AC100V,25A(十分に放熱した場合) 放熱しない場合は2Aぐらい(200W)までです」と注意書きが添えられています。
※余談ながら、個人的にはこのように高電圧を扱うものは本当はあまり自作したくないです。その方面に素養がなくても部品を揃えれば作るのは簡単ですが、「手作りの楽しさ」などよりも安全性がもっとも重要ですから、手頃な価格で堅牢な完成品を入手できるならそれを使いたいというのが正直なところです。残念ながら今のところそういう商品は見当たらないようですが(需要はあると思うのですが・・)、上のキットを使ってリレーつき電源ケーブルを作る方法が下記の書籍にわかりやすく記載されています。
動作の様子
ひと通り形になったものが動作している様子を以下の動画に収めています。(1分56秒 環境音あり)
内容:
- IoT デバイス稼働中は死活確認用の LED が 2秒間隔で点滅、そのタイミングでアプリの TICK フィールド(デバイス稼働秒数)が更新される
- アプリの BOOT PC ボタン押下で IoT デバイスが所定の PC を Wake On Lan する
- アプリの PING ボタン押下で IoT デバイスが所定の PC へ ping を投げアプリの OK / NG フィールドへ結果をカウント
- アプリの AC DEVICE ボタン押下で IoT デバイスへ接続した AC 機器への給電を ON / OFF
- アプリの RESTART ボタンを長押し(3秒以上)してリリースすると IoT デバイスは再始動する
リソース一式
今回の Blynk アプリおよび IoT デバイスを構成する要素は以下のとおりです。
※各画像はクリックで実寸表示
Blynk アプリ側
Android / iPhone での当該 Blynk アプリの画面表示
IoT デバイス側
装置全体の様子
※ESP-WROOM-02 モジュールは Cerevo 社製のブレイクアウト基板「CDP-ESP8266」とともに使用
※稼働状況確認用に IO4 に赤色 LED を、AC 機器制御用に IO12 にリレーつきケーブルを装着しているが不要ならどちらも省略可
ソースコード
(SimpleTimer ライブラリのインストールが必要です)
ESP8266_WakeOnWan.ino - github.com/mkttanabe
留意すべき事項など
Blynk は便利で有用ですが現在進行形で開発中であるため利用時に若干注意しなければならない点もあります。今回手元で気づいた話題をメモしておきます。
Blynk ライブラリ旧バージョンでの不具合について(重要)
2015-08-06 にリリースされた v0.3.0 までのBlynk ライブラリには ESP8266 モジュールのハンドリングに大きな不具合があります。同モジュール − Blynk サーバ間の持続接続に不意に切断が発生した場合に無限ループに陥りデバイスをリセットしない限り再接続不能となる問題です。この不具合は 2015-09-24 にリリースされた v0.3.1 では修正されており、切断が発生した場合に接続を自動復旧する機構が正常に機能するようになっています。この修正により連続稼働が安定するようになりました。Blynk で ESP8266 を使う場合は必ずこの v0.3.1 以降のライブラリを使うべきです。公式フォーラム上の以下の記事に関連する応酬があります。
- ESP8266 Freeze - community.blynk.cc
Android - iOS 端末間の Blynk アプリの互換性について
Blynk は Android と iOS に対応していますが、両方のプラットフォームで等しく動作する Blynk アプリを構成するためには以下の点への注意が必要です。
- 2015年10月8日時点の Android 版 Blynk の最新バージョンは "1.0RC7 fix"、iOS 版 Blynk の最新バージョンは "1.3" です。バージョン番号は iOS 版のほうが上ですが、Android 版で利用可能なウィジェットうち iOS 版ではまだ実装されていないものがいくつかあります。下図左は Android 版 "1.0RC7 fix、右は iOS 版 "1.3" でのウィジェット一覧です。
iOS 版未実装のウィジェットを Android 版で配置して保存したアプリを iOS 版で開くとその部分が空白となります。それだけではなく、そのアプリを iOS 版で保存すると当該ウィジェットは失われます。要注意です。
- Using same blynk project on two different phones - community.blynk.cc
- Android 版では LED ウィジェットが正常に機能しません
- Android app virtual LED bug? - community.blynk.cc
最後に
Prepare to Blynk! - www.kickstarter.com に掲載されているイラスト
がんばれ Blynk!
(tanabe)