node-red経由でrpi2b+mcp9808で収集した温度をAlexaに喋らせる

 最近raspberrypi(以下rpi)の環境再構築をちまちまやっていて令和三年皐月にやったnode-red経由でwio-terminalで測定した温度をAlexaに喋らせるのrpi2b版を作ったので以下に記す。

1.ハードウェア構成

 raspberrypi2B + GROVE HAT + MCP9808(温度センサ)

 rpi2bは何年か前に動かして性能的にイマイチだったので不使用となっていた物にraspberrypi OSを導入してSeeed GROVE HAT用の環境設定を行いnode-redとalexa用の関連ノードを追加した。温度センサにMCP9808を使った理由は安く(但し温度だけ)rpi用のコードが容易に入手可能だった為。

2.node-redのフロー

f:id:aki_iic:20210703213247p:plain

node-red with rpi2b

3.温度測定のpythonコード(MCP9808)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# mcp9808(Microship i2c 温度センサ)をrpiで読む
# 20210703 : Digi-key designnoteより抜粋

from smbus import SMBus

def word_To_LSB_MSB(word):
 return word[0:8],word[12:16]

bus=SMBus(1)
x=format(bus.read_word_data(0x18,0x05),'016b')
LSB,MSB=word_To_LSB_MSB(x)
temp='{:.2f}'.format(float(int(MSB+LSB,2))/16)
print(temp)
 ほぼdegikeyさんのそれを流用させてもらっている(感謝)。

forum.digikey.com

 こういうプロのドキュメントは大変参考になる。i2cに限らずセンサ系は個性溢れるフォーマットに満ちあふれているのでデータシートから基本を抑えつつ起草されたドキュメントは大変有難いです(もう一度感謝)。

4.Alexaへ返すjsonのコード

msg.extra = {
"temperatureReading": {
"value": msg.payload
},
"applianceResponseTimestamp": new Date().toISOString()
};
msg.payload = true;
return msg;

 ここは前回と同じ。フォーマット合わせた為。

5.まとめ

・rpi2b(A7Quad)でもraspberrypi OS配下なら充分使える。

pi@rpi2b ~ $ free
total used free shared buff/cache available
Mem: 946400 88888 107048 6260 750464 789884
Swap: 102396 768 101628

 メモリも(ゾロ目で気味悪いが)88888KB(88MB)でnode-red込みで(GUI無しだが)動作しているのは感動物で格下のrpizeroでも充分行けるレベル。やはりこのレベルのアプリケーションになるとraspberrypiのような組込Linux系OSの方がスタンドアロン想定のArduino系より楽で良いと再認識。raspberrypi OSは軽量・軽快な印象でSeeed Grove HATも調達した事だしrpiベースで楽してnode-redレベルのIoT(笑)アプリケーションが出来るようになったというお話。