RaspberryPiからWio Nodeにアクセスしてみる
今年のハッカソンで使ったけど、エントリーとして残していなかったので備忘録として書いておきます。 NagoyaハッカソンではMamorioを使って近づいたことを特定し、Wio Nodeに接続したLEDテープを光らせるといった動作をさせていました。 以前のエントリーではRaspberryPi3のBLEでMamorioの状態を取得するところまでを行いました。
そのあとはWio NodeにアクセスしてLEDを光らせることになります。
自分も購入はしていたのですが、設定だけして片付けてしまいました。というのも、必ずスマートフォンのアプリが必要で、購入した理由がESP8266の小型Arduinoのようなデバイスかなと思っての衝動買いだったからでした。PCで設定できるならそれでも良かったのですが、スマートフォン必須…かあという感想でした。
自分は秋月にて購入しましたが akizukidenshi.com
もちろんAmazonでも購入できます。(実質スイッチサイエンスからになりますが)
Wio Nodeとは?
スペックとしてはこんな感じです(秋月さん情報からの引用)
【特長】
- ESP8266ベースのオープンソースWi-Fiの開発ボード
- プラグ・アンド・プレイのGroveデバイスをサポート
- OTAでファームウェアアップデートが可能
- RESTfulなAPIを提供
- IFTTTアプリケーションが使用可能
- AndroidとiOSののアプリケーションがあります
【主な仕様】
- 入力電圧:バッテリーピン:3.0~4.2V、マイクロUSB:5V
- 動作電圧:3.3V
- 最大消費電力:500mA
- デジタルI/O:x4
- アナログI/O:x1
- UART:x1
- I2C:x1
- 出力電流;最大12mA
- フラッシュメモリ:4MB
- CPU周波数:26MHz
- 基板サイズ:28mmx28mm
※工事設計認証(技適)番号:206-000519
最後の一行が超重要ですね。
Groveが使えるWiFiデバイスだけど、Arduinoのようなプログラミングで使えるようなものではなく、エンドポイントを持ってアクセスができという感じなのかなと思います。 本来であればLEDテープをRaspberryPiで光らせることができれば問題なかったのですが、時間が少ないこと、LEDテープの電源が5.0Vであるとかいうことがあったので、Seeedさんの助言もありWio Node経由で光らせることにしました。
結局この方法で良かったかなと思います。
Wio Nodeのセットアップ
Wio Nodeをセットアップさせるためにスマートフォンのアプリをダウンロードします。今回はAndroidで設定しています。
まずはストアから「Wio」をインストールします。
インストール後に【開く】ボタン押します。
すると、SIGN UPまたはLOG INを促されます。新規に登録しても問題はありませんが、下の方にGoogle+とfacebookでもログインできるボタンがあるので、自由に選択してください。自分はFacebookのログインを使いました。
ログイン処理が終わるとDeviceの登録画面に遷移します。まだ、デバイスの登録されていないので一件もでていません。画面真ん中にある【ADD YOUR FIRST DEVICE】を選択します。
登録するデバイスの選択になります。Wio LinkとWio Nodeがありますが、Wio Nodeの画像のボタンを押します。
位置情報などのアクセスが求められました。許可でいいかなと思います。
まずはWio Nodeに電源を入れて設定モードに変更することを求められます。USB接続で給電し、Wio NodeのボードにあるFuncボタンを4秒間押して設定モードに変更します。青LEDがゆっくり点滅すればOKです。
次はWioNodeがインターネットに接続するためのWiFiネットワークの設定になります。現在見えているネットワークのSSIDの一覧が表示されるので適切なものを選択します。
選択したらパスワードも入力します。
WiFiの設定が終わると次はデバイスの接続になります。アドホックモードでWioNodeと接続し、設定を流し込むという形になるので、このような設定を行う必要があります。複数デバイスがある場合はわかりませんが、一つしかない場合はリストから選択を行います。先頭はWioという文字列になっているようです。
この後設定の流し込みがスマートフォン側から行われますが、たまに失敗します。何回か行えば成功すると思います。 (昔はもっと失敗していたような気がします。) 設定が終了すると、設定したデバイスに名前をつけることができます。今回は切り良く48がついていたのでそのままにしました。
名前を決めたら【Start Wio-ing】ボタンを押すと初期設定が完了します。以下のような画面になっていればデバイス登録がされています。
接続するGrove機器の設定
ここまででネットワークの設定は可能になっています。あとはWio Nodeに接続するGroveセンサの接続設定になります。登録されたデバイスを押すと、
このような画面に変わります、上段には接続可能なGroveモジュールが出ているので今回は温度センサを接続してみます。名前はTemperatureSensorを選びます。分類がAllになっているので、Inputに変更します。そのあと左右に操作して
該当のGroveモジュールを見つけ出します。接続する場合には画面下にあるWio Nodeまの端子までドロップして設定を行います。ここで画面したにFirmware Uploadのボタンが赤く表示されるのでそれを押してください。
Wio Nodeの端子部分にGroveモジュールのアイコンが入って入れば設定完了です。
Deviceの画面に戻ると登録されていたデバイスに温度センサーの画像とCONNECTED 1と表示されています。無事に設定はされたようです。
Groveセンサの接続
温度センサーの接続のソフトウエアの設定が終わったら、今度は設定と同じコネクタに温度センサーを接続します。
これですべての設定が完了しました。
テストしてみる
スマートフォンのアプリ上からでもテストを行うことができますのでそれをまず行ってみます。
テストを行うデバイスを選択し
設定の画面に遷移し、画面の右上のハンバーガーボタンをおすとメニューが表示されます。
このなかからViewAPIを選択します。すると、設定したデバイスを操作するAPIやエンドポイントが表示され、テスト用のボタンなどが表示されます。また、このAPIをテストするcURLなどのコマンドラインが表示されるのでそのままCLIでテストもできます。
テストも可能で今回のテストでは温度が25.4℃としてJSONで返されています。
後はこのAPIのエンドポイントをRaspberryPiから叩けばOKです。
RaspberryPiからWio Nodeに設定されたEndPointにアクセスする。
ViewAPIのページのテストでcurl
コマンドが記載されますのでそのまま打ち込めはCLIでちゃんと値がでてきます。
access_tokenは伏せてありますので、自分のデバイスのものと差し替えてお使いください。
$ curl -k https://us.wio.seeed.io/v1/node/GroveTempA0/temp?access_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX {"temperature": 22.38}
pythonのinteractive modeで実行するとこんな感じになります。
pythonなので恒例のrequests
モジュールを使っています。
Requests: 人間のためのHTTP — requests-docs-ja 1.0.4 documentation
$ python Python 2.7.13 (default, Jan 19 2017, 14:48:08) [GCC 6.3.0 20170124] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import requests >>> payload = {'access_token': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'} >>> r = requests.get("https://us.wio.seeed.io/v1/node/GroveTempA0/temp", params=payload) >>> print r.url https://us.wio.seeed.io/v1/node/GroveTempA0/temp?access_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX >>> r.text u'{"temperature": 22.53}' >>>
pythonのコードにすると以下のようになります。
#!/usr/bin/env python # -*- coding: utf-8 -*- import requests payload = {'access_token': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'} r = requests.get("https://us.wio.seeed.io/v1/node/GroveTempA0/temp", params=payload) print(r.text)
これを実行すると…
$ python tempSample.py {"temperature": 22.75}
うまく動作しているようです。
終わりに
Groveのセンサーを簡単にネットワーク対応にできるのは非常に便利で、USBバッテリーの小型のものを使えば持ち運びしてそこそこの時間動作させることができるのも魅力的かなと思います。また、センサーのエンドポイントは複数のデバイスからアクセス可能なのでそのあたりも使い所があるのかなと思いました。 NagoyaハッカソンではPythonではなくNode.jsを使用しましたが、LEDテープが入手できた段階でそのあたりのコードはサンプルとして出したいと思います。