はじめに
本コンテンツは 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 へデータを転送します。
センサータグ
センサータグは小型でワイヤレス(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 接続できます。
ssh pi@<RaspberryPi のIP アドレス>
Raspberry Pi - インターネットへの疎通確認
ログイン後 Google の DNS サーバー (8.8.8.8) 宛に ping
を実行して、インターネットに接続できていることを確認します。
ping 8.8.8.8
現在のモバイルネットワーク (LTE) 接続状態を表示するには、以下のコマンドを実行してください。
sudo candy connection status
-
ONLINE
... モバイルネットワークに接続中です。 -
OFFLINE
... モバイルネットワークに接続していません。
Raspberry Pi - BLE モジュールインストール
CANDY RED でセンサータグを利用するため、以下の 2 つのコマンドをそれぞれ実行します。処理は数分で完了します。
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 を再起動します。
sudo reboot
再起動は 1 分程度で完了します。再起動後は、pi ユーザーで SSH で接続してください。
CANDY RED - ログイン
PC のブラウザで以下 URL にアクセスします。
http://<RaspberryPi のIP アドレス>:8100
ログインユーザー名と、パスワードは以下の通りです。
項目 | 値 |
---|---|
Username: | pi |
Password: | ハッカソン会場でご案内します |
CANDY RED - センサータグ用ノード追加
CANDY RED にセンサータグ用ノードを追加します。
CANDY RED にログイン後、右上のハンバーガーメニューより、Manage palette
をクリックします。
Install
タブをクリックし、node-red-node-sensortag
と検索し、node-red-node-sensortag
の Install
をクリックします。
※ @ppatiemo/node-red-node-sensortag
も候補に出てきますが、間違わないようにしてください。
Install
をクリックします。インストール完了まで 3 分ほど待ちます。
Node added to palette: sensorTag
と表示されたらインストール完了です。
CANDY RED - センサータグ用ノードを差し替え
センサータグ用ノードの内のファイルを以下のコマンドを実行し差し替えます。
オリジナルの node-red-node-sensortag
ノードはセンサータグを指定した処理にバグがあるため修正しています。
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 を再起動します。
sudo systemctl restart candy-red
CANDY RED - センサータグ接続
+
で新しいタブ (フロー) を作成します。
左側のパレットより sensorTag
ノードを探し、中央のワークスペースにドラッグ&ドロップします。
同様に、左側のパレットより debug
ノードを探し、中央のワークスペースにドラッグ&ドロップします。
sensorTag
ノードの右側の〇(出力端子)をクリックしたまま、 debug
ノードの左側の〇(入力端子)までマウスを動かしボタンを離します。
sensorTag
ノードをダブルクリックし、sensorTag
ノードの設定画面を開きます。
UUID
に センサータグの MAC アドレスを入力します。
Outputs
では取得したいデータを選択します。
センサータグで取得できるデータは以下の通りです。
項目 | センサー | 取得例 |
---|---|---|
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
タブに、センサー情報が表示されることを確認します。
センサータグが接続できない場合
センサータグの電源が入っているか確認する
センサータグの電源ボタンを押すと電源が入ります。
センサータグの 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 の再起動を行ってから再度試してください。
sudo systemctl restart candy-red
MotionBoard Cloud へのデータ送信
Motionboard Cloud へセンサーデータを送信するために、node-red-contrib-motionboard
ノードをインストールします。
※ CANDY RED の ハンバーガーメニュー - Manage palette
- Install
タブよりインストールします。
ここでは 5 秒に 1 回 MotionBoard Cloud に temperature
(気温) データを送信する例を示します。
以下のようにノードを配置します。
sensorTag ノード設定
delay ノード設定
delay
ノードではデータ転送の遅延や送信制限を設定できます。
5 秒に 1 回データを送る設定は以下の通りです。
項目 | 設定値 |
---|---|
Action | Rate Limit - All messages |
Rate | 1 msg(s) per 5 Seconds |
drop intermediate messages : ON | |
drop intermediate messages を ON とすると、 5 秒に 1 回送信されるデータ以外は破棄されます。 |
|
![]() |
change ノード設定
MotionBorad Cloud の WebAPI ではデータ送信時の仕様として、データ送信元の識別用に id
を付与する必要があります。
change
ノードで以下のように設定し、id
を設定します。
項目 | 設定値 |
---|---|
Rules | Set , msg.payload.id |
to 任意の値 |
ここまで設定を行うと、Chanege
ノードから出力される msg.payload のデータは以下のようになります。
{temperature: 25.8, humidity: 19.2, id: "送信元識別用ID"}
MotionBoard ノード設定
MotionBoard
ノードにはデータの送信先の接続先や認証情報を設定します。
項目 | 設定値 |
---|---|
WebAPIのベースURL | https://iot-cloud.motionboard.jp/motionboard |
temperature
データを MotionBoard Cloud に送信します。
リアルタイム連携
の ステータス
タブで、受信したいデータ名 temperature
を設定しておきます。
MotionBoard Cloud 側データ確認
ここまでの設定が完了したら、Deploy
をクリックします。
MotionBoard Cloud 側で、CANDY RED から送信したデータが確認できたら成功です。
トラブルシューティング
この章の内容はトラブル時に利用してください。
Raspberry Pi - 有線 LAN 固定 IP アドレス設定
CandyPi では、micro SD カードの boot フォルダーに boot-ip.json
ファイルを作成して IP アドレス情報を記載しておくことで、有線 LAN に固定 IP アドレスを設定できます。
※ ゲートウェイや DNS サーバーが不要な際は ""
と設定してください。
{
"ip_address":"192.168.10.2/24",
"routers":"",
"domain_name_servers":""
}
Raspberry Pi - HDMI から映像を出力するための準備
SSH が利用できない場合など、ディスプレイが必要になった場合は以下の設定を行ってください。
Raspberry Pi から micro SD カードを抜き、PC で読み込みます。
/boot/config.txt
を開き、以下の設定を変更します。
# セーフモードで動作させる
hdmi_safe=1
# コンポジットではなく強制的にHDMIから出力する
hdmi_force_hotplug=1
# 信号強度を強くする
config_hdmi_boost=4