2018年8月16日木曜日

BL652 - BLEマイコン(ハードウェア編)

BL652というBluetooth Low Energy対応の小型マイコン・モジュールを入手しました(約900円@digikey)。


搭載されているマイコン自体はnRF52ですが、Laird社独自のsmartBASICでプログラムを書き込めるのがウリです。
nRF52は、Nordic社のSDKが不思議な出来栄えで、素人には使いこなすのが厳しかったですが、smartBASICを使えば、このようなSDK不要、開発環境構築不要、と謳ってます。

BL652への書き込みは、115200bpsでUART接続で行いました。
書き込みに使用したUSB-シリアル変換は、秋月のArduinoUno互換ボードAE-ATMEGAです。
これは、良くできていて、USB-シリアル変換のラインのジャンパを外すことにより、USBーシリアルの信号を外部に取り出して、外部のマイコン(ArduinoProMini、BL652等)にも接続・書き込みが可能です。








































BL652から引き出す最低限必要な配線は:
-GND, VDD (電源)
-UART RX, TX(データの有線送受信。それぞれUSB-シリアルのTX, RXへ接続)
-Reset(リセット。GNDに通電するとリセット動作)

半田づけするには基盤のピッチが狭く、45歳以上の方は老眼鏡必須レベルです。
フラックスを使えば、手で半田づけできるレベルでもあります。


はんだ付けを終え、テストプログラムを書いてみます。
BL652は、温度センサを内蔵しているので、温度を計測し、smartphoneで表示することとします。
BLEの通常のプロトコルでは、smartphoneからデバイスを検索=>接続(connect)=>温度データ読み取り、となります。
しかし、BLEは、ここの“接続”ができない、ないし勝手に切断され、不安定と感じます。

ANT+通信では、このような“接続”がなく、ANTセンサーはブロードキャストを行い、受信機はそれを拾って表示するだけです。当然、エラーで拾いもれも発生しますが、大勢に影響はありません。
この結果、接続がきれました、とかエラー表示され通信ができない自体は回避されてます。

そこで、BLEでも、このブロードキャスト方式で送信を行うこととしました。
Beaconとかいうプロトコルがこれに該当するようですが、制約が面倒なので、独自のプロトコルとします。

BLEの子機は、親機に対して、自分の名前とアドレスをAdvertise送信します。
これを受けて親機(smartphone等)からBLEスキャンをかけると周囲の子機が以下のように表示されます。
今回は、この子機の名前文字列に温度データを乗せてしまおう、という作戦です。
これなら、親機が子機に接続する必要もなく、子機がブロードキャストしてるデータを親機が拾うだけで、ANTと同じ安定動作が期待できます。

実際にやってみた図です。


名前欄に“Dgrade#1=369”と表示されてますが、ここの369の数値が温度データでリアルタイムに変化し、表示されます。(Dgrade#1は勝手につけたデバイス名です。とくに命名ルールはないようです)
36.9度の屋外で実験してるわけではないので、温度データがおかしいのですが、原因は後日究明するか、もっと精度の高い温度センサーを実装しようと思います。

この方式のメリットは、BLE子機と接続(コネクション)を張る必要がないので、複数のBLE子機のデータを1親機で拾ったり、逆に1つの子機のデータを複数の親機で拾うことが可能です。

BLE子機からパワー計のデータを送信し、smartphoneで受信・表示しながら、他の親機でも受信し、ANTプロトコルに変換してGARMINに送信、とかできてしまいます。

応答性もまあまあで、シフトレバーにスイッチを付け、スイッチオンで“Dgrade#1=SHIFTDOWN_ON”、スイッチオフで“Dgrade#1=SHIFTDOWN_OFF”を送信し、受信機でリアルタイムにスイッチのON/OFFを把握できます。
これを使えば、Di2のシフトスイッチを無線化できるうえ、SRAMのeTapのように、左右のレバー同時押しで、フロント変速とかも自由自在です。

NGな用途は、無線で部屋の照明全部消し等をするセキュリティに影響のある分野です。
子機のスイッチの状態を複数の親機に無線伝達できるため、照明ON/OFFや鍵のLock/unlockとか技術的には可能ですが、セキュリティ的に相当マズイと思います。

ソフトのコンパイル・書き込みは方法は、ソフトウエア編で紹介いたしました。




0 件のコメント:

コメントを投稿