RaspberryPiからWio Nodeにアクセスしてみる

RaspberryPiからWio Nodeにアクセスしてみる

f:id:ueponx:20171221151320p:plain

今年のハッカソンで使ったけど、エントリーとして残していなかったので備忘録として書いておきます。 NagoyaハッカソンではMamorioを使って近づいたことを特定し、Wio Nodeに接続したLEDテープを光らせるといった動作をさせていました。 以前のエントリーではRaspberryPi3のBLEでMamorioの状態を取得するところまでを行いました。

uepon.hatenadiary.com

そのあとは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」をインストールします。

f:id:ueponx:20171221205111p:plain

インストール後に【開く】ボタン押します。

f:id:ueponx:20171221205207p:plain

すると、SIGN UPまたはLOG INを促されます。新規に登録しても問題はありませんが、下の方にGoogle+facebookでもログインできるボタンがあるので、自由に選択してください。自分はFacebookのログインを使いました。

f:id:ueponx:20171221205418p:plain

f:id:ueponx:20171221205357p:plain

ログイン処理が終わるとDeviceの登録画面に遷移します。まだ、デバイスの登録されていないので一件もでていません。画面真ん中にある【ADD YOUR FIRST DEVICE】を選択します。

f:id:ueponx:20171221205557p:plain

登録するデバイスの選択になります。Wio LinkとWio Nodeがありますが、Wio Nodeの画像のボタンを押します。

f:id:ueponx:20171221205730p:plain

位置情報などのアクセスが求められました。許可でいいかなと思います。

f:id:ueponx:20171221205824p:plain

まずはWio Nodeに電源を入れて設定モードに変更することを求められます。USB接続で給電し、Wio NodeのボードにあるFuncボタンを4秒間押して設定モードに変更します。青LEDがゆっくり点滅すればOKです。

f:id:ueponx:20171221213206p:plain

f:id:ueponx:20171221213412j:plain

次はWioNodeがインターネットに接続するためのWiFiネットワークの設定になります。現在見えているネットワークのSSIDの一覧が表示されるので適切なものを選択します。

f:id:ueponx:20171221210117p:plain

選択したらパスワードも入力します。

f:id:ueponx:20171221210157p:plain

WiFiの設定が終わると次はデバイスの接続になります。アドホックモードでWioNodeと接続し、設定を流し込むという形になるので、このような設定を行う必要があります。複数デバイスがある場合はわかりませんが、一つしかない場合はリストから選択を行います。先頭はWioという文字列になっているようです。

f:id:ueponx:20171221210437p:plain

この後設定の流し込みがスマートフォン側から行われますが、たまに失敗します。何回か行えば成功すると思います。 (昔はもっと失敗していたような気がします。) 設定が終了すると、設定したデバイスに名前をつけることができます。今回は切り良く48がついていたのでそのままにしました。

f:id:ueponx:20171221210514p:plain

名前を決めたら【Start Wio-ing】ボタンを押すと初期設定が完了します。以下のような画面になっていればデバイス登録がされています。

f:id:ueponx:20171221210859p:plain

接続するGrove機器の設定

ここまででネットワークの設定は可能になっています。あとはWio Nodeに接続するGroveセンサの接続設定になります。登録されたデバイスを押すと、

f:id:ueponx:20171221211645p:plain

このような画面に変わります、上段には接続可能なGroveモジュールが出ているので今回は温度センサを接続してみます。名前はTemperatureSensorを選びます。分類がAllになっているので、Inputに変更します。そのあと左右に操作して

f:id:ueponx:20171221212044p:plain

該当のGroveモジュールを見つけ出します。接続する場合には画面下にあるWio Nodeまの端子までドロップして設定を行います。ここで画面したにFirmware Uploadのボタンが赤く表示されるのでそれを押してください。

f:id:ueponx:20171221212255p:plain

Wio Nodeの端子部分にGroveモジュールのアイコンが入って入れば設定完了です。

f:id:ueponx:20171221212340p:plain

Deviceの画面に戻ると登録されていたデバイスに温度センサーの画像とCONNECTED 1と表示されています。無事に設定はされたようです。

Groveセンサの接続

温度センサーの接続のソフトウエアの設定が終わったら、今度は設定と同じコネクタに温度センサーを接続します。

f:id:ueponx:20171221212707j:plain

これですべての設定が完了しました。

テストしてみる

スマートフォンのアプリ上からでもテストを行うことができますのでそれをまず行ってみます。

テストを行うデバイスを選択し

f:id:ueponx:20171221213531p:plain

設定の画面に遷移し、画面の右上のハンバーガーボタンをおすとメニューが表示されます。

f:id:ueponx:20171221213624p:plain

このなかからViewAPIを選択します。すると、設定したデバイスを操作するAPIやエンドポイントが表示され、テスト用のボタンなどが表示されます。また、このAPIをテストするcURLなどのコマンドラインが表示されるのでそのままCLIでテストもできます。

f:id:ueponx:20171221214013p:plain

テストも可能で今回のテストでは温度が25.4℃としてJSONで返されています。

f:id:ueponx:20171221214030p:plain

後はこの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テープが入手できた段階でそのあたりのコードはサンプルとして出したいと思います。