Grove Base HATをNode-RED execノードで連携するメモです。
Grove Base HATはこちらで購入
スイッチサイエンスさんで購入しました。
GROVE – ベースHAT for Raspberry Pi – スイッチサイエンス
今回は Raspberry Pi 3B+ につなぎます。
インストール
2019/07/30現在の情報で進めます。Raspbianのイメージはフルバージョンのものを使いました。
このようにしっかり差し込んでインストールを始めます。
Grove Base Hat for Raspberry Pi – Seeed Wiki
このWikiを参考に、Online one-click installationの
curl -sL https://github.com/Seeed-Studio/grove.py/raw/master/install.sh | sudo bash -s -
を実行してしばらくインストールを待ちます。
Grove Base HAT for Raspberry Piを使ってみた – Qiita
matsujirushiさんの記事を見ていると、Raspbian Lite版だと追加インストールの必要があるようですね。
余談:しっかり差し込みましょう
I2Cやデジタル入力を動かそうとしたら、
Check whether I2C enabled and Grove Base Hat RPi or Grove Base Hat RPi Zero inserted
といったエラーが出て、
sudo i2cdetect -y 1
で調べても、
I2C反応なし。
原因はちゃんと差し込まなかったから。すぐHATが抜けるように半刺しにしたのが行けなかったようです。
差し込み直したら上手くいきました。
しっかり差し込みましょう!
インストールされた場所
インストールされた場所はこちらです。
どこからでも実行できます。
sudo grove_pwm_buzzer
たとえば、これはGroveのPWMブザーを鳴らすものです。PWMのポートに差し込んでこのコマンドを実行すると音がなります。
コマンドの中身
コマンド中身はたとえばGroveのPWMブザーの場合、以下です。
nano /usr/local/bin/grove_pwm_buzzer
nanoで開いてみます。
#!/usr/bin/python3 # EASY-INSTALL-ENTRY-SCRIPT: 'grove.py==0.6','console_scripts','grove_pwm_buzzer' __requires__ = 'grove.py==0.6' import re import sys from pkg_resources import load_entry_point if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) sys.exit( load_entry_point('grove.py==0.6', 'console_scripts', 'grove_pwm_buzzer')() )
他のフォルダ階層にアクセスしているようです。検索してみたら以下にありました。
/usr/local/bin $ sudo find / -name "grove_pwm_buzzer.py" /usr/local/lib/python2.7/dist-packages/grove/grove_pwm_buzzer.py /usr/local/lib/python3.5/dist-packages/grove/grove_pwm_buzzer.py
ここは以下のGitHubの構造と同じように配置されています。
grove.py/grove at master · Seeed-Studio/grove.py
私はソースはGitHubを参考にしています。
Pythonで動かしてみる
Node-REDのexecで動かすコマンドを把握するため以下のように叩いてみます。
超音波センサーでやってみます。D5に差し込みました。
いざコマンドを打ってみます!
python /usr/local/lib/python2.7/dist-packages/grove/grove_ultrasonic_ranger.py 5 6
引数の 5 6 は、Dなので、5番ポート 6番ポートを指定しています。
ということで、このように動きます!
Node-REDで動かしてみる
コマンドの叩き方がわかったので、Node-REDでexecノードでやってみます。
このようなフローを組みます。真ん中の長い赤いノードが exec です。
execの設定です。
python -u /usr/local/lib/python2.7/dist-packages/grove/grove_ultrasonic_ranger.py 5 6
python 実行では、 -u の引数を加えています。
1. コマンドラインと環境 — Python 3.7.4 ドキュメント
Force the stdout and stderr streams to be unbuffered. This option has no effect on the stdin stream.
標準出力と標準エラーストリームをバッファリングしないように強制します。このオプションは標準入力ストリームには影響しません。
とのこと。Node-RED側のexecの説明でも -u を入れようと書かれているので、そうします。
injectノードを押してコマンドが動きます。
ちなみに止めるときは、こちらを動作させてます。msg.killで exec ノードへ流し込むと止められます。
いいかんじ。
ただ、サンプルコードそのままの文字列できちゃうのでJSONで扱いやすくしてあげると良いかなと思ってます。このあたり、JSONを返答するpythonを作って、近々整えようと思います。
Seeed公式から提供されてるハードウェアとソフトウェア(サンプルコード)で動くので安心。Node-REDでも開発する部分が住み分けしやすそうです。