2015年10月08日

ESP8266 モジュール + Blynk でさらりと Wake On Wan

はてなブックマークに登録

Android / iOS 端末から所定の IoT デバイスの遠隔制御や監視を可能とする Kickstarter 発の Blynk が人気を集めています。2015年10月現在 Blynk はまだ開発の途上にあり、今の時点では Backer(出資者)でなくとも実装ずみのすべての機能を無償で利用することができます(※)。シンプルで取りまわしのしやすいこのサービスを使い、ちょっとした実用性のある道具として遠隔の PC をスマホで 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 は ESP8266 Wi-Fi モジュールに対応しており、以下の記事では技適マークつきの「ESP-WROOM-02」を使用しています。このシリーズのモジュールは自立したマイコンとして動作可能であるため IoT デバイスの主要素としてもっとも手軽な選択肢のひとつと言えるでしょう。

準備

まず 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 環境へ設置します。

  1. 所定の PC を Wake On Wan する
  2. 所定の PC へ ping を打つ
  3. 所定の AC 機器への給電を ON / OFF する
  4. 制御対象の 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 マジックパケットの仕様に関する記事
  • Espressif 社公式フォーラムの以下の記事の末尾に ESP8266 で ping を実行するサンプルコードあり
ping 結果をアプリへ通知するには、アプリ側に設置したデータ INPUT 用のウィジェットに所定の仮想ピン番号を設定しておき、その番号に対し IoT デバイス側のコードで "Blynk.virtualWrite(仮想ピン番号, データ)" API を使ってデータを送ってやればよさそうです。

  • 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) は動作時にカチリと音のする有接点リレーに比べ値段が高めですが秋月電子さんが電子工作向きの手頃なキットを販売しています。

※余談ながら、個人的にはこのように高電圧を扱うものは本当はあまり自作したくないです。その方面に素養がなくても部品を揃えれば作るのは簡単ですが、「手作りの楽しさ」などよりも安全性がもっとも重要ですから、手頃な価格で堅牢な完成品を入手できるならそれを使いたいというのが正直なところです。残念ながら今のところそういう商品は見当たらないようですが(需要はあると思うのですが・・)、上のキットを使ってリレーつき電源ケーブルを作る方法が下記の書籍にわかりやすく記載されています。

動作の様子

ひと通り形になったものが動作している様子を以下の動画に収めています。(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 以降のライブラリを使うべきです。公式フォーラム上の以下の記事に関連する応酬があります。

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 版で保存すると当該ウィジェットは失われます。要注意です。


  • Android 版では LED ウィジェットが正常に機能しません
以上の事情により、現時点では、両プラットフォーム間での互換性の確保が必要なアプリにおいては iOS 版で利用できるウィジェットのみを使用し、また、LED ウィジェットは使わないようにする必要があります。今後の改善が期待されます。

最後に

Prepare to Blynk! - www.kickstarter.com に掲載されているイラスト

がんばれ Blynk!


(tanabe)
klab_gijutsu2 at 05:49│Comments(0)IoT | M2M

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント