株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

Arduino Leafony

LeafonyでRCカーを作ってみました(その1)全体概要・導入編

投稿日:2020年2月1日 更新日:

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を使いました。

RCカーの全体が以下です。

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カーを制御すればいいということです。以下のようなページにしてコントロールしてみました。

続きは次回に書きます。次回へ進む

AdSense

AdSense

-Arduino, Leafony

執筆者:

関連記事

感染症対策のためのIoT技術(その3)超音波距離センサーでの距離測定

感染症対策のためのIoT技術について書いています。今回は超音波距離センサーでの距離測定についてです。 新型コロナウイルスによる感染症の対策が始まってから意識する必要が出てきたソーシャルディスタンスとい …

Arduino Ethernetシールド(旧製品)を使ってみた

Arduino Ethernetシールド(旧製品)を使ってみました。Arduinoと接続した状態が以下です。おそらく2~3年前ぐらいに買ったものだと思います。どうも自宅以外で有線LANが気軽に使える場 …

ESP-WROOM-02でもセンサネットワーク稼働試験

ESP-WROOM-02でもセンサネットワークを稼働してみます。ESP-WROOM-02でもというのは今までRaspberry Piで稼働してきたのでESP-WROOM-02でも稼働してみようというこ …

Arduino CC3000 WiFi シールドでHTTP POST

Arduino CC3000 WiFi シールドでHTTP POST通信を試してみます。以下はArduino UNOに接続した状態です。 Arduino CC3000 WiFi シールドの概要、導入に …

Arduino UnoでSPI通信(その1)Arduino Uno2台で通信

ArduinoでのSPI通信についてです。SPI通信(Serail Peripheral Interface:SPI)はマイコン系と周辺デバイス間の短距離間で利用されている同期型のシリアル通信の一種で …