#はじめに
本稿ではGroovy-IoT + kikoriでのセンサの取扱をまずはPCで行うことにします。
#ゴール
PCに接続した環境センサ(温度、湿度、気圧)-BME280から取得した環境情報を手持ちのスマホで確認できるシステムを構築します。
#開発環境の準備
センサの取扱にあたり開発環境の準備をします。
##ハード
1. PC or Mac
2. Groovy-IoT
3. センサ: Grove-BME280 or BME280センサモジュールをGrove化したもの
4. アクチュエータ: Grove-LED
##ソフト
0. JDK10+
1. kikori
2. enebular-editor
#こんな感じ
開発とテストのスクリーンショットになります。
ここでは(株)ウフルで開発したenebular-editorを使って開発します。
#開発環境の設定
##ハード(Groovy-IoTやセンサとアクチュエータ)の接続
写真の通りに接続します。
Groovy-IoTのGroveコネクタを向かって右に見て、上から
##ソフトのインストールと起動
筆者のメインのPCはMacになりますので、ここではMacを使います。Windowsをお使いの方は適宜、自分の環境に置き換えてください。
###JDKのダウンロードとインストール
kikoriはclojureで記述されています。clojureはJVM由来の言語ですのでJDKがベースとなります。JDKのダウンロードとインストールは各自で予め行ってください。
###kikoriのダウンロード
kikoriはOSSなのでソースからビルドすることも出来ますが、ここではすばやく使うためにtar-ball(バイナリ)をダウンロードして解凍してそのまま使うことにします。ターゲットのファイルは以下で確認してください。
https://gitlab.com/myst3m/kikori
適当なディレクトリに移動した後にコマンドラインで、
$ curl -OL 'https://theorems.co/kikori/kikori-system-1.4.3-SNAPSHOT.tar.gz'
を実行してダウンロードします。
###kikoriのインストール
ダウンロードが完了したら、
$ tar xvfz ./kikori-system-1.4.3-SNAPSHOT.tar.gz
を実行して解凍します。
###kikoriの設定
kikoriの設定は、解凍したディレクトリ内のsystem.clj
で行います。
- シリアルポートの確認
Groovy-IoTはシリアルポート機能があります。シリアルポートは動的に設定されますので、そのデバイスファイルを確認してsystem.clj
に記述する必要があります。コマンドプロンプトから以下を実行します。
[ooo@mbpro13 kikori-system-1.4.3-SNAPSHOT]$ ls /dev/tty.* /dev/tty.Bluetooth-Incoming-Port /dev/tty.usbmodem14201
tty.usbmodem14201
でsystem.clj
の当該部分を置き換えます。
...
;; (config :UART {:path "/dev/ttyACM0" :baud-rate 9600}) ;; For Linux/RasPi (config :UART {:path "/dev/tty.usbmodem14201" :baud-rate 9600}) ;; For Macintosh Mojave+, Confirm wiht "ls /dev/tty.*" after plugin ;; (config :UART {:path "COMx" :baud-rate 9600}) ;; For Windows ;; Will be called read function by :module
...
###kikoriの起動と終了
- kikoriの起動
kikoriの起動は以下のコマンドでおこないます。
$ java -cp modules:kikori-1.4.3-SNAPSHOT.jar kikori.shell system.clj
起動後、以下のメッセージが現れます。
============ Device Configuration ============
{:system {:PCB "1.0.0", :power :5.0},
:GP1 nil,
:GP3 nil,
:sensors
{GP0
{:name "GP0",
:bus :GP0,
:id "351656c3-097f-47cf-a900-ef631dfb17a8",
:module :GPIO,
...
:uart {:path "/dev/tty.usbmodem14201", :baud-rate 9600},
:GP2 :ADC2,
:GP0 :GPIO,
:product-id 0xdd,
:vendor-id 0xd8}
==============================================
Configure the device with above ? (Yes [Y] or No [N])
ここで、y
を入力して、処理を進めます。以下に続きます。
Booted Web server on 0.0.0.0 : 3000
Welcome to Kikori shell !
- Run (quit) when you want to shutdown kikori.
groovy-iot>
以上でkikoriは起動しました。
- kikoriの終了
kikoriを終了するためには、kikoriのシェル(コマンドプロンプト)から(quit)
コマンドを入力します。
groovy-iot>(quit)
#疎通確認
Groovy-IoTにつないだセンサととkikoriが正常に動作しているかを確認します。WebSensorServerなので、サーバの疎通確認と同様の手法で行います。kikoriの起動後、別のターミナルを開きます。
curl "http://localhost:3000/sensor?ids=BME1"
{"BME1":{"pressure":1024.925222406158,"temperature":22.29934563106508,"humidity":32.24111540420265}}
注意:
接続しているBME280センサのI2Cアドレスにより、BME0にするかBME1にします。Grove純正BME280センサの場合はBME0にします。
#実際の開発
開発にはenebular-editorを使います。
フローは大きく分けて、環境センサの値をスマホに表示
とLEDの点滅
になります。Dashboard-Nodeはダウンロードしたばかりのenebular-editorのパレットには用意されていないので、Dashboard-Nodeの準備を行ってください。
##環境センサの値をスマホに表示
##LEDの点滅
次にLEDの点滅についてフローを作成します。LEDの点滅はLチカ
と呼ばれ、最も基本的なアクチェータの制御になります。ここではInjection-Nodeで点滅周期を決定して後段のLEDの制御につなげます。
##上記のフロー
[{"id":"e6752dc6.50d5d","type":"inject","z":"763d791f.75a928","name":"","topic":"","payload":"","payloadType":"date","repeat":"4","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":80,"wires":[["f509bb3f.836298"]]},{"id":"f509bb3f.836298","type":"http request","z":"763d791f.75a928","name":"","method":"GET","ret":"txt","url":"http://localhost:3000/sensor?ids=BME1","tls":"","x":310,"y":80,"wires":[["fb1fb321.ebd56","58c840c4.dcfa7"]]}]
#動作確認
フローの作成が終わったら、右上のSave
を押し、フローを実行させます。
同一LANで接続されているスマホであれば、それを使っての確認もできます。MacではiOSのシミュレータを使っての確認も可能です。
面倒くさい方はウェブブラウザ http://localhost:1888/ui/#/0 からもアクセス可能です。
#まとめ
Groovy-IoTによるGrove Systemのセンサ活用、kikoriによるセンサ/アクチェータへの統一的なアクセス方法をNode-RED由来のenebular-editorでのフロー開発は非常にわかりやすく高速に開発が可能です。
#次回
kikoriの機能を掘り下げていきます。