LoginSignup
2
1

More than 5 years have passed since last update.

Groovy-IoT + kikori (1. PCベースでのセンサ・ハンドリング)

Last updated at Posted at 2018-12-31

はじめに

 本稿ではGroovy-IoT + kikoriでのセンサの取扱をまずはPCで行うことにします。
PC_Base_dev_env.png

ゴール

 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を使って開発します。

screenShot_ee_whole_en.png

開発環境の設定

ハード(Groovy-IoTやセンサとアクチュエータ)の接続

写真の通りに接続します。
Groovy-IoTのGroveコネクタを向かって右に見て、上から
- I2C(BME280)
- UART(空ける)
- GPIO1(LED)
- GPIO2(空ける)
となります。
IMG_1402.jpg

ソフトのインストールと起動

 筆者のメインの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の準備を行ってください。

環境センサの値をスマホに表示

  • 全体の構成

    • enebular-editorでの全体フローは以下のようになります。 WholeFlow.png
    • センサへのアクセスはサーバへのリクエストになりますから、HTTP-RequestノードにURIを記述することによりおこないます。 InsideHttpReq.png
    • センサデータはJSONに変換した後にDASH-Boardノードに接続します。 SensorDataToDashboard.png

LEDの点滅

次にLEDの点滅についてフローを作成します。LEDの点滅はLチカと呼ばれ、最も基本的なアクチェータの制御になります。ここではInjection-Nodeで点滅周期を決定して後段のLEDの制御につなげます。

  • Injection-Nodeの設定
    LED_injection.png

  • 点滅の切り替え
    Function-Nodeでトグル動作を作成して、LEDの点滅を行います、
    LED_toggle.png

  • HTTP-Request ノードを使ってのLEDの制御
    ここではLED-Onの部分のみですが、LED-Offも作成してください。
    LED_On.png

上記のフロー

[{"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を押し、フローを実行させます。
DeploySaveCloseUp.png

同一LANで接続されているスマホであれば、それを使っての確認もできます。MacではiOSのシミュレータを使っての確認も可能です。
MobileSimResult.png

面倒くさい方はウェブブラウザ http://localhost:1888/ui/#/0 からもアクセス可能です。

まとめ

 Groovy-IoTによるGrove Systemのセンサ活用、kikoriによるセンサ/アクチェータへの統一的なアクセス方法をNode-RED由来のenebular-editorでのフロー開発は非常にわかりやすく高速に開発が可能です。

次回

 kikoriの機能を掘り下げていきます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1