とりあえず5日目の記事でEspruinoにパーツつけて色々する、、的なところにたどり着いた感があるので、今度はデータを飛ばします。今回はBLEです。7日目の記事でシリアル通信が出てきたので乗っかってみようと思います。
目標
Espruinoで取得した温度をBLEで飛ばしてMac上のコンソールに出力します。Mac側のプログラムはnode.jsで動かします。一応全部JavaScriptですね。BLEモジュールは種類がたくさん出ていますが、今回は浅草ギ研さんのBLEシリアルモジュールを使い、温度センサの情報をMacに送ってみます。
必要なもの
- 温度センサ : 5日目の記事を参照
- 浅草ギ研 BLEシリアルモジュール
- BLEが使えるMac(最近のならOK 2013も大丈夫)
- node.js / npm も入っているとスムーズ。
このBLEシリアルモジュールは、その名の通りBLEでシリアル通信が出来るモジュールです。tx
,rx
等のキャラクタリスティクスをもつサービスが最初から提供されているので、Espruino側で必要なのは単純なシリアル通信のプログラムを書くことだけです。なんのこっちゃ分からん人はとりあえず読み進めましょう。
結線
公式のこの記事にArduinoでの結線例がありますので、これをそのままEspruinoで再現します。モジュールのtx
をEspruinoのA10
に、モジュールのrx
をEspruinoのA9
に接続します。また、モジュールのCTX
とRTX
をワイヤーで接続します。電源はGND
とvBAT
でOKです。
ちなみにtx
は送信機、rx
は受信機を指します。だからEspruino側のtx
とモジュール側のrx
を結線するわけですね。
温度センサの結線方法については5日目の記事と同様です。
Espruino側のプログラム
BLEとしての動きはほぼ全てBLEシリアルモジュールがやってくれているので、Espruinoに記述するプログラムは単純なシリアル通信のプログラムでOKです。Serial#write
がメインになるので、7日目の記事のプログラムとセットアップまでは同様。読み書きに関しては真逆になります。
// 温度センサのセットアップ
var ow = new OneWire(A1);
var sensor = require("DS18B20").connect(ow);
// シリアル通信のセットアップ
Serial1.setup(9600,{ tx: A9, rx: A10 });
// 温度をコンソールに出しつつシリアル通信で送信
var writewrite = function(){
console.log( sensor.getTemp() );
Serial1.println( sensor.getTemp() );
};
// 1秒間隔で繰り返す
setInterval( writewrite, 1000);
Mac側のプログラム
Github にアップロードしました。Readmeの通りに進めるとプログラムが起動して、BLEを探して接続しようとします。
node.jsのnoble
というライブラリを使ってBLE通信のプログラムを記述しています。BLE対応機器の電波を探し、見つけたら提供するサービスをuuid
を指定して取得、さらにそこからキャラクタリスティクスを....詳しくはプログラム内のコメントを見てください。BLEの基本構造についての記事はこちらが参考になるかと思います。
Espruinoの温度センサで検知した値がコンソールログに出力され始めたら成功です。