Leafonyとは以下の公式ページによりますと「超小型、電池で動く、組み立て簡単なオープンイノベーション・プラットフォーム」とのことです。
トリリオンノード研究会 用語の説明 Leafony(リーフォニー)
または、Leafony platform(リーフォニー・プラットフォーム)
私の印象としましてはまずは電池駆動の超小型Arduino互換機です。そしてArduinoと同様に仕様はオープンでArduinoのシールドに相当するような拡張ボード(リーフというそうです。)が使えるということです。
このLeafonyのBasic Kit A1.0を今回はプログラム開発案件の御縁で入手することが出来ました。ありがとうございます。そこでこのLeafonyで何かやってみようかと思いました。
Arduino互換であればArduino IDEで開発が出来て、モーター(アクチュエータ)もコントロール出来るだろうということと、電池駆動ならLeafony本体は独立して動作するだろうということでRCカーを作ってみました。遠隔操作にはLeafonyのBasic Kit A1.0で使えるBluetooth Low Energyを使いました。
Leafonyの部分が以下です。ケースの外側で2.7センチ角ぐらいです。ピンとの比較でも何となく小ささがお分かりいただけるかと思います。
このRCカーの仕様、製作工程、所感等を書きます。今回のその1ではLeafonyの概要と導入、動作確認から、Bluetooth Low Energy(ここからはBLEと表記します。)のプログラミングについて書きます。
Leafonyの動作確認から
今現在で以下にクイックスタートのページがあります。初期状態で、スマートフォンやパソコンに、BLEを使って温度、湿度、照度、傾きセンサの値を送信して表示することが出来ます。
Basic Kit A1.0 | クイックスタート | トリリオンノード研究会
詳細はこちらのページを見て頂くとして、私の場合も無事にWindows10のPC上でGoogle Chromeから表示が出来ました。
サンプルアプリの全体概要
上記クイックスタートのサンプルアプリについての解説ページが以下にありました。ありがとうございます。
LeafonyとWeb Bluetoothでラクラク!クロスプラットフォームIoT開発入門
こちらによると、センサーのデータを表示するサンプルアプリは以下のgithub上に置かれています。
https://github.com/Leafony/WebBluetooth_for_Leafony_app
このアプリはWeb Bluetoothを利用しているので、ブラウザであれば、PC、スマホに関係なく利用出来ます。
Leafony側に書き込まれているArduinoスケッチは今現在で以下のリポジトリにあります。
https://github.com/Leafony/Sample-Sketches/blob/master/4-Sensors_BLE.zip
サンプルアプリからBLE通信のHello Worldへ
上記サンプルアプリではLeafony側とセンサデータ表示アプリで双方向のBLE通信が出来ています。これらを利用してまずはBLE通信のHello World的なアプリに変更してみます。そこから遠隔操作の機能を追加するという流れで開発したいと思いました。
変更後のファイル一式です。
(※ご自由にお使い頂いて問題ありませんが、サンプルレベルのソースです。一切動作は保証出来ません。)
まずはLeafony側から見ていきます。
4-Sensors(センサリーフ)の取り外し
まずは4-Sensors(センサリーフ)を取り外します。今回は遠隔操作の機能をメインとしますので4-Sensorsを一旦取り外しまず。取り外して改めて感じるのがこの小さいリーフによく温湿度センサ、照度センサ、加速度センサが実装されているなということです。これだけで4種類のセンシングデータが取得出来るということです。
また、Arduinoスケッチ側でもセンサデータ取得の処理を外します。AVR MCUリーフと4-Sensorsとはi2cで接続されています。Arduinoスケッチではそれぞれのセンサのライブラリを利用してセンサの値を取得していますのでこれらを一旦外します。ここではそれほど厳密にではなく、明確なセンサの処理の部分を外してみました。それからセンサーデータの送信処理も外してみました。
あとついでにというのもおかしいですが、バッテリの電圧に関する処理も一旦はずします。
BLE通信の処理
以上でBLE通信の処理の部分がよく見えるようなったと思いますので、その部分を見ていきます。
BLE通信は、BLE Sugarのリーフが必要で、AVR MCRリーフとはUARTで接続接続されます。
仕様書は今現在で以下です。実際の通信はArduinoのライブラリでプログラミングを行います。BGLibというライブラリとSoftwareSerialライブラリを使います。BGLibの仕様も以下の仕様書にあります。
AC02A BLESugar
実際のサンプルアプリのスケッチでは以下のように宣言されています。
//----------------------------------------------- // BLE //----------------------------------------------- SoftwareSerial Serialble(BLERX, BLETX); BGLib ble112((HardwareSerial *)&Serialble, 0, 0 );
BLERX、BLETXがUARTのピンで以下で宣言されています。
#define BLETX 15 #define BLERX 16
ピンの配置は以下ですがリーフの状態でまとめて接続出来ています。その状態でUARTをどう指定すればいいかです。15で以下の図のA1、16で以下の図のA2が指定出来ます。
コールバックの設定と実際の送受信処理
サンプルアプリのスケッチでは、setupBLE()関数でコールバックを設定してアドバタイズを開始しています。実際の通信はコールバックの関数内で実行されます。受信の処理は、my_evt_gatt_server_attribute_value()のようです。
(※詳細が必要な場合は実際のサンプルアプリのスケッチを参照して下さい。)
その他、Sleep関連の処理もしっかり記述されていますがとりあえずそのままにします。以上のような内容である程度簡略化して問題なくLeafonyに書き込みが出来ればLeafony側は準備完了とします。
次にWeb Bluetooth側について書きます。
こちらもサンプルアプリのWeb Bluetooth側を利用させて頂きました。以下のようなページにしてLeafony側にテキストデータが送信出来る状態を目指します。
Web Bluetooth側は以下のファイルで構成されています。
app.js
index.html
leafony.js
ここで、スクリーンショットのBLEでHelloボタンのidをbutton-HelloBLEとします。そのボタンクリック時で以下のように処理します。
buttonHelloBLE.addEventListener ( 'click', function () { console.log( 'Hello BLE' ); leafony.sendCommand( 'Hello BLE' ); });
ここでのbuttonHelloBLEは以下です。
const buttonHelloBLE = document.getElementById('button-HelloBLE');
leafonyはleafony.jsのLeafonyクラスです。
これでLeafonyとの接続完了後にボタンクリックで’Hello BLE’が送信出来るはずです。
シリアルモニタで確認
Leafony側のシリアルモニタで以下のように確認出来ました。’Hello BLE’が受信できました。
### connection_opend: { address: 2187C96DB894 } ### gatt_server_attribute_value: { connection: 1, attribute: F, att_opcode: 12, offset: 0, value_len: 9, value_data: Hello BLE } ### gatt_server_attribute_value: { connection: 1, attribute: F, att_opcode: 12, offset: 0, value_len: 3, value_data: SND } ### gatt_server_attribute_value: { connection: 1, attribute: F, att_opcode: 12, offset: 0, value_len: 9, value_data: Hello BLE } ### gatt_server_attribute_value: { connection: 1, attribute: F, att_opcode: 12, offset: 0, value_len: 9, value_data: Hello BLE } ### connection_closed: { reason: 213, connection: 1 }
RCカーへの応用
以上まででWeb Bluetooth側から文字列が送信出来て、Leafony側で受信が確認できました。
そうするとRCカーへの応用としてはWeb Bluetooth側からの文字列(コマンド)によってRCカーを制御すればいいということです。以下のようなページにしてコントロールしてみました。