Edited at

新潟 IoT ハッカソン:Raspberry Pi と CANDY Pi Lite + S でセンサータグデータを扱う


はじめに

本コンテンツは 2019年2月16日(土)、17日(日)に開催される、新潟 IoT ハッカソンのハンズオンの記事となります。

Raspberry Pi と CANDY Pi Lite + S を用いてセンサータグのデータを取得し、MotionBoard Cloud にセンサーデータを送信する例を示します。


準備するもの


  • PC

  • SSH 接続用クライアント

  • Raspberry Pi、CANDY Pi Lite + S、microSD、電源ケーブル (当日配布)

  • センサータグ (CC2650STK SimpleLink SensorTag) (当日配布)

ハッカソンでは、PC、Raspberry Pi 間の接続には、会場で準備する WiFi 環境を利用します。

Windows の方は、Tera Term など SSH クライアントをインストールしておいてください。


構成

センサータグでセンシングしたデータを、Raspberry Pi と CANDY Pi Lite + S を使って MotionBoard Cloud へデータを転送します。

ハッカソン構成画像.png


センサータグ

センサータグは小型でワイヤレス(BLE通信)で電池式といった特徴があるため、まずはどんなデータが集まるか確認したいといったプロトタイピングを行う場合に便利です。また、価格も安価($29)であるためハードルが低いです。

センサータグでは以下のデータが取得できます。


  • 温度、湿度

  • 大気圧

  • 照度

  • 加速度、ジャイロスコープ(角速度)、磁力 (それぞれ 3 軸)

  • ボタン (ボタンの押し込み状況)

  • 磁気センサー (磁石の近接に反応)

スマートフォンアプリで簡単にセンサータグのデータを確認することもできます。

AWS や Azure、IBM Cloud などの MQTT サーバーにスマホアプリ経由でセンサータグのデータを送信できます。

アプリダウンロード先:App Store Google Play


CANDY Pi Lite + S

「CANDY Pi Lite」(キャンディパイ・ライト)は、低速〜中速通信に適した「Raspberry Pi(ラズベリーパイ、またはラズパイ)」及び「ASUS Tinker Board」向け3G/LTE通信ボードです。(製品ページより抜粋)

CANDY Pi Lite の公式のマニュアルは以下を参照してください。

https://candy-line.gitbooks.io/candy-pi-lite/content/

ハッカソンで利用するのモデルは SoftBank 様モデルです。


LTE Cat.4

LTE の通信規格の一つです。

最大通信速度は受信 150Mbps、送信 50Mbps。

画像や動画など容量の大きいデータや高頻度のデータ送信などパフォーマンスが求められる IoT アプリケーションに向いています。

LTE Cat.M1、NB-IoT はセルラー LPWA と呼ばれ、低消費電力と低コストを実現しているのが特徴です。


  • Cat.M1:LPWAとしては高速。

  • NB-IoT:低速で、遅延があるが、非常に低コスト。

詳細は SoftBank 様 プレスリリース を参照。


ハンズオン


Raspberry Pi - 起動とログイン

Raspberry Pi に電源ケーブル (micro USB 端子) を差し込みます。

電源投入後しばらくすると、会場の Wi-Fi に接続され、IP アドレスが付与されます。

PC も会場の Wi-Fi に接続してください。DHCP で IP アドレスが付与されますので Wi-Fi のネットワークインターフェースに固定 IP アドレスを設定している場合は、DHCP で取得するに設定してください。

SSH で Raspberry Pi に接続します。

項目

Wi-Fi SSID
ハッカソン会場でご案内します

SSH 接続先 IP アドレス
ハッカソン会場でご案内します

Username
pi

Password
ハッカソン会場でご案内します


  • Windows の場合、Tera Term など SSH クライアントをインストールしてください。

  • Mac の場合、ターミナルから SSH 接続できます。


Mac.Terminal

ssh pi@<RaspberryPi のIP アドレス>



Raspberry Pi - インターネットへの疎通確認

ログイン後 Google の DNS サーバー (8.8.8.8) 宛に ping を実行して、インターネットに接続できていることを確認します。


RaspberryPi.Console

ping 8.8.8.8


現在のモバイルネットワーク (LTE) 接続状態を表示するには、以下のコマンドを実行してください。


RaspberryPi.Console

sudo candy connection status




  • ONLINE ... モバイルネットワークに接続中です。


  • OFFLINE ... モバイルネットワークに接続していません。


Raspberry Pi - BLE モジュールインストール

CANDY RED でセンサータグを利用するため、以下の 2 つのコマンドをそれぞれ実行します。処理は数分で完了します。


RaspberryPi.Console

sudo apt-get install libbluetooth-dev libudev-dev pi-bluetooth -y

sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)

上記のコマンド実行後、reboot コマンドで Raspberry Pi を再起動します。


RaspberryPi.Console

sudo reboot


再起動は 1 分程度で完了します。再起動後は、pi ユーザーで SSH で接続してください。


CANDY RED - ログイン

PC のブラウザで以下 URL にアクセスします。

http://<RaspberryPi のIP アドレス>:8100

login.png

ログインユーザー名と、パスワードは以下の通りです。

項目

Username:
pi

Password:
ハッカソン会場でご案内します


CANDY RED - センサータグ用ノード追加

CANDY RED にセンサータグ用ノードを追加します。

CANDY RED にログイン後、右上のハンバーガーメニューより、Manage palette をクリックします。

Install01.png

Install タブをクリックし、node-red-node-sensortag と検索し、node-red-node-sensortagInstall をクリックします。

@ppatiemo/node-red-node-sensortag も候補に出てきますが、間違わないようにしてください。

Install01-2.png

Install をクリックします。インストール完了まで 3 分ほど待ちます。

Install02.png

Node added to palette: sensorTag と表示されたらインストール完了です。

Install03.png


CANDY RED - センサータグ用ノードを差し替え

センサータグ用ノードの内のファイルを以下のコマンドを実行し差し替えます。

オリジナルの node-red-node-sensortag ノードはセンサータグを指定した処理にバグがあるため修正しています。


RaspberryPi.Console

cd /opt/candy-red/.node-red/node_modules/node-red-node-sensortag/

sudo cp 79-sensorTag.html 79-sensorTag.html.bkp
sudo cp 79-sensorTag.js 79-sensorTag.js.bkp
sudo wget https://raw.githubusercontent.com/kuronekomaron/node-red-node-sensortag/master/79-sensorTag.html -O 79-sensorTag.html
sudo wget https://raw.githubusercontent.com/kuronekomaron/node-red-node-sensortag/master/79-sensorTag.js -O 79-sensorTag.js

以下のコマンドを実行し CANDY RED を再起動します。


RaspberryPi.Console

sudo systemctl restart candy-red



CANDY RED - センサータグ接続

+ で新しいタブ (フロー) を作成します。

Sensor00.png

左側のパレットより sensorTag ノードを探し、中央のワークスペースにドラッグ&ドロップします。

Sensor01_.png

同様に、左側のパレットより debug ノードを探し、中央のワークスペースにドラッグ&ドロップします。

sensorTag ノードの右側の〇(出力端子)をクリックしたまま、 debug ノードの左側の〇(入力端子)までマウスを動かしボタンを離します。

Sensor02_.png

sensorTag ノードをダブルクリックし、sensorTag ノードの設定画面を開きます。

UUID に センサータグの MAC アドレスを入力します。

Outputs では取得したいデータを選択します。

Sensor03_.png

センサータグで取得できるデータは以下の通りです。

項目
センサー
取得例

Temperature and Humidity
温度、湿度
{ topic: sensorTag/humidity , payload: { temperature: 25.2, humidity: 58.1} }

Pressure
大気圧
{ topic: sensorTag/pressure, payload: { pressure: 1000.1 } }

Magnetometer ※
地磁気計
{ topic: sensorTag/magnetometer , payload: { magX:0.01, magY:0.01, magZ:0.01 } }

Accelerometer ※
加速度計
{ topic: sensorTag/accelerometer , payload: { accelX:0.01, accelY:1.01, accelZ:0.01 } }

Gyroscope ※
ジャイロスコープ (角速度)
{ topic: sensorTag/gyroscope , payload: { gyroX:0.01, gyroY:0.01, gyroZ:0.01 } }

Luminosity
照度
{ topic: sensorTag/luxometer , payload: { lux: 123 } }

Button press
ボタン 押込、磁石 近接
{ topic: sensorTag/keys , payload: { left: true, right: false, magnet: false}}


  • 各センサーから 1 秒間隔でデータが出力されます。ボタンと磁石については、ボタンの押し込みや磁石の近接を検知したタイミングでデータが出力されます。


  • Magnetometer, Accelerometer, Gyroscope のいずれかの値を取得したい場合は、Magnetometer, Accelerometer, Gyroscope のチェックをすべて ON にしてください。 後続のノードで Topic の値で区別してください。


  • IR Temperature:最近のロットでは、IR 温度センサが未搭載のため機能しません。

設定が完了したら、 Done で設定画面を閉じ、Deploy をクリックします。

右ペインの debug タブに、センサー情報が表示されることを確認します。

Sensor04.png


センサータグが接続できない場合


センサータグの電源が入っているか確認する

センサータグの電源ボタンを押すと電源が入ります。

センサータグの LED のステータスは以下の通りです。

LED
ステータス

緑点滅
接続待ち。接続待ちのまま 2 分程度時間がたつと電源OFF。

なし
電源 OFF、接続中

LED が光っていないときは電源 OFF もしくは Raspberry Pi と接続中のステータスです。

電池が切れている可能性もあるので、なかなか接続できない際は技術メンターにお声がけください。


sensorTag ノードの制限

CANDY RED 上では sensorTag のノードは同時に 1 つしか利用できません。

sensorTag のノードを複数利用したときの動作は保証されません。

このため、1 つの CANDY RED では 2 つ以上のセンサータグを同時に利用できません。


CANDY RED の再起動を試す

UUID を間違えた後、正しい MAC アドレスを指定しているのに sensorTag ノードが、discovering... のままで接続できないときなどうまく接続できない場合、以下のコマンドで CANDY RED の再起動を行ってから再度試してください。


RaspberryPi.Console

sudo systemctl restart candy-red



MotionBoard Cloud へのデータ送信

Motionboard Cloud へセンサーデータを送信するために、node-red-contrib-motionboard ノードをインストールします。

※ CANDY RED の ハンバーガーメニュー - Manage palette - Install タブよりインストールします。

ここでは 5 秒に 1 回 MotionBoard Cloud に temperature (気温) データを送信する例を示します。

以下のようにノードを配置します。

Motionboard01_.png


sensorTag ノード設定



  • OutputsTemperature and Humidity のみを選択し、temperaturehumidity のみ取得するように設定します。
    Motionboard09.png


delay ノード設定

delay ノードではデータ転送の遅延や送信制限を設定できます。

5 秒に 1 回データを送る設定は以下の通りです。

項目
設定値

Action
Rate Limit - All messages

Rate

1 msg(s) per 5 Seconds

drop intermediate messages : ON

drop intermediate messagesON とすると、 5 秒に 1 回送信されるデータ以外は破棄されます。

Motionboard05.png


change ノード設定

MotionBorad Cloud の WebAPI ではデータ送信時の仕様として、データ送信元の識別用に id を付与する必要があります。

change ノードで以下のように設定し、id を設定します。

項目
設定値

Rules
Set , msg.payload.id

to 任意の値

Motionboard04.png

ここまで設定を行うと、Chanege ノードから出力される msg.payload のデータは以下のようになります。


msg.payload

{temperature: 25.8, humidity: 19.2, id: "送信元識別用ID"}



MotionBoard ノード設定

MotionBoard ノードにはデータの送信先の接続先や認証情報を設定します。

項目
設定値

WebAPIのベースURL
https://iot-cloud.motionboard.jp/motionboard

Motionboard02_.png

* テナント名 は、配布資料をご確認ください。

* テンプレート名認証キー

Motionboard Cloud の 管理 - システム設定 - 接続/認証 - リアルタイム連携 で確認します。

MotionBoardリアルタイム連携画面.png

temperature データを MotionBoard Cloud に送信します。

リアルタイム連携ステータス タブで、受信したいデータ名 temperature を設定しておきます。

Motionboard06.png


MotionBoard Cloud 側データ確認

ここまでの設定が完了したら、Deploy をクリックします。

MotionBoard Cloud 側で、CANDY RED から送信したデータが確認できたら成功です。

Motionboard07.png

Motionboard08.png


トラブルシューティング

この章の内容はトラブル時に利用してください。


Raspberry Pi - 有線 LAN 固定 IP アドレス設定

CandyPi では、micro SD カードの boot フォルダーに boot-ip.json ファイルを作成して IP アドレス情報を記載しておくことで、有線 LAN に固定 IP アドレスを設定できます。

※ ゲートウェイや DNS サーバーが不要な際は "" と設定してください。


/boot/boot-ip.json

{

"ip_address":"192.168.10.2/24",
"routers":"",
"domain_name_servers":""
}


Raspberry Pi - HDMI から映像を出力するための準備

SSH が利用できない場合など、ディスプレイが必要になった場合は以下の設定を行ってください。

Raspberry Pi から micro SD カードを抜き、PC で読み込みます。

/boot/config.txt を開き、以下の設定を変更します。


/boot/config.txt

# セーフモードで動作させる

hdmi_safe=1

# コンポジットではなく強制的にHDMIから出力する
hdmi_force_hotplug=1

# 信号強度を強くする
config_hdmi_boost=4


参考: https://qiita.com/locatw/items/44320cec2456bf104716