Groveセンサー/アクチュエーター使い方集 〜CANDYRED〜

# はじめに

新潟IoTハッカソン CANDYRED向けのGroveセンサー/アクチュエータ使い方集です。

---
### 基本センサー
以下の２つのノードをインストールしておくと、基本的なデジタル/アナログセンサーは使用できます。

- イベントベースで使う：[node-red-grovepi-nodes](https://flows.nodered.org/node/node-red-grovepi-nodes)
![grovePiNode.PNG](https://qiita-image-store.s3.amazonaws.com/0/281420/9f5439d7-443c-bd54-e885-38c059d0ec22.png)

- インターバルで使う：[node-red-contrib-grovepi](https://flows.nodered.org/node/node-red-contrib-grovepi)

![grovePiNode2.PNG](https://qiita-image-store.s3.amazonaws.com/0/281420/63fa91d7-9279-67af-b1f9-3d77b3d32f14.png)

- アナログセンサー

| センサー名 | Wiki URL | Sensor Type | 備考 |
| ---------------- | --- | --- | --- |
| 光センサー | http://wiki.seeedstudio.com/Grove-Light_Sensor/ | Light ||
| スライドボリューム | http://wiki.seeedstudio.com/Grove-Slide_Potentiometer/ |
| 水分センサー | http://wiki.seeedstudio.com/Grove-Moisture_Sensor/ |
| 音センサー | http://wiki.seeedstudio.com/Grove-Sound_Sensor/ | Sound | |
| ラウドネスセンサー | http://wiki.seeedstudio.com/Grove-Loudness_Sensor/ | Sound | |

- デジタルセンサー

| センサー名 | Wiki URL | Sensor Type | 備考 |
| ---------------- | --- | --- | --- |
| 温湿度センサー     | http://wiki.seeedstudio.com/Grove-Temperature_and_Humidity_Sensor_Pro/ | Temperature / Humidity DHT11 ||
| 超音波センサー     | http://wiki.seeedstudio.com/Grove-Ultrasonic_Ranger/ | Ultrasonic Range ||
| 傾きセンサー     | http://wiki.seeedstudio.com/Grove-Tilt_Switch/ | Button | 振ったraTrue|
| マイクロスイッチ | https://www.seeedstudio.com/Grove-Micro-Switch-p-3033.html | Button ||
| スイッチ | http://wiki.seeedstudio.com/Grove-Switch-P/ | Button ||
| ボタン | http://wiki.seeedstudio.com/Grove-Button/ | Button ||
| 水センサー      | http://wiki.seeedstudio.com/Grove-Water_Sensor/ | Button ||
| プッシュボタン | http://wiki.seeedstudio.com/Grove-Button/ | Button ||
| 磁気センサー | http://wiki.seeedstudio.com/Grove-Magnetic_Switch/ | Button ||
| ラインファインダー | http://wiki.seeedstudio.com/Grove-Line_Finder/ | Button | 0が白|
| PIRモーションセンサー | http://wiki.seeedstudio.com/Grove-PIR_Motion_Sensor/ ||何かが通り過ぎるとfalse|
| 衝突センサー | http://wiki.seeedstudio.com/Grove-Collision_Sensor/ | Button | 当たったら0 |

- デジタルアクチュエーター

| アクチュエーター名 | Wiki URL | Sensor Type | 備考 |
| ---------------- | --- | --- | --- |
| ブザー | http://wiki.seeedstudio.com/Grove-Buzzer/ | Buzzer ||
| LED赤 | http://wiki.seeedstudio.com/Grove-LED_Socket_Kit/ ||msg.payload = 0; 0-255を設定 |

---

### USBカメラ

インストールするノード：[node-red-contrib-usbcamera](https://flows.nodered.org/node/node-red-contrib-usbcamera)
インストールするコマンド：
```$sudo apt install fswebcam```
```$sudo raspi-config```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/281420/17a27a8a-a6f3-5308-13f5-906cccbcfb12.png)
5 Interfacing Options
![image.png](https://qiita-image-store.s3.amazonaws.com/0/281420/687776d8-f234-63cd-f597-7f972f11d130.png)
P1 Camera
![image.png](https://qiita-image-store.s3.amazonaws.com/0/281420/8fb60527-fca7-fe35-c8c1-96c0d7bbec54.png)

Would you like the camera interface to be enabled?
はい
設定後、
```$sudo reboot```

![candyred_usbwebcamera.PNG](https://qiita-image-store.s3.amazonaws.com/0/281420/abd83127-5508-9be9-24d8-39e1eff7143a.png)

注意点：毎回ファイル上書き保存になるので、都度クラウドなりどこかへ送信してください。

---

### TIセンサー

インストールするノード：[node-red-node-sensortag](https://flows.nodered.org/node/node-red-node-sensortag)
※@ppatierno/node-red-node-sensortagではないので注意が必要！
インストールするコマンド：
```$sudo apt-get install libbluetooth-dev libudev-dev pi-bluetooth
 $sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)
 $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_20190214.js -O 79-sensorTag.js
 $sudo systemctl restart candy-red```

sensorTag設定
- UUID: MACアドレス(ハッカソン時はセンサーに貼ってあります)

TIセンサーから温度データを取得し、5秒おきにenebularへ送信するサンプルは以下のフローになります。
![tisensor_sample_red.PNG](https://qiita-image-store.s3.amazonaws.com/0/281420/9174a36e-ed8a-e420-f5d4-7108ba25d6fe.png)
データをいったんグローバル変数へ格納し、適度なタイミングで取得→送信。
非同期で動かすため、2つのフローが必要。

``` グローバル変数設定function.js
if(msg.payload.temperature)
	global.set("global_temperature",msg.payload.temperature);

return msg;
```
``` グローバル変数取得function.js
var ti_sensor={};
ti_sensor.temperature = global.get("global_temperature");
msg.payload = ti_sensor;

return msg;
```


---

### 温湿度・気圧センサ(BME280)

インストールするノード：[node-red-contrib-bme280](https://flows.nodered.org/node/node-red-contrib-bme280)

接続ポート：I2C

BME280ノードの設定: 

| プロパティ | 設定値 |
| --- | --- |
| Bus # | 1 |
| I2C Address | 0x76 |
| Topic | bme280 |

補足:
BME280ライブラリにセンサーの校正機能がついていませんので、気圧と標高の値を使用する場合は相対値を使用するなどの工夫が必要です。