Grove Base HATをNode-RED execノードで連携するメモ

Grove Base HATをNode-RED execノードで連携するメモです。

Grove Base HATはこちらで購入

スイッチサイエンスさんで購入しました。

GROVE – ベースHAT for Raspberry Pi – スイッチサイエンス

image

今回は Raspberry Pi 3B+ につなぎます。

インストール

2019/07/30現在の情報で進めます。Raspbianのイメージはフルバージョンのものを使いました。

image

このようにしっかり差し込んでインストールを始めます。

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 -

を実行してしばらくインストールを待ちます。

image

image

image

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

で調べても、

image

I2C反応なし。

image

原因はちゃんと差し込まなかったから。すぐHATが抜けるように半刺しにしたのが行けなかったようです。

image

差し込み直したら上手くいきました。

image

しっかり差し込みましょう!

インストールされた場所

インストールされた場所はこちらです。

image

どこからでも実行できます。

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で動かすコマンドを把握するため以下のように叩いてみます。

image

超音波センサーでやってみます。D5に差し込みました。

image

いざコマンドを打ってみます!

python /usr/local/lib/python2.7/dist-packages/grove/grove_ultrasonic_ranger.py 5 6

引数の 5 6 は、Dなので、5番ポート 6番ポートを指定しています。

ということで、このように動きます!

image

Node-REDで動かしてみる

コマンドの叩き方がわかったので、Node-REDでexecノードでやってみます。

image

このようなフローを組みます。真ん中の長い赤いノードが exec です。

image

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 を入れようと書かれているので、そうします。

image

injectノードを押してコマンドが動きます。

image

ちなみに止めるときは、こちらを動作させてます。msg.killで exec ノードへ流し込むと止められます。

いいかんじ。

ただ、サンプルコードそのままの文字列できちゃうのでJSONで扱いやすくしてあげると良いかなと思ってます。このあたり、JSONを返答するpythonを作って、近々整えようと思います。

Seeed公式から提供されてるハードウェアとソフトウェア(サンプルコード)で動くので安心。Node-REDでも開発する部分が住み分けしやすそうです。