EspruinoとMacでBLEシリアル通信する

  • 4
    Like
  • 0
    Comment
More than 1 year has passed since last update.

とりあえず5日目の記事でEspruinoにパーツつけて色々する、、的なところにたどり着いた感があるので、今度はデータを飛ばします。今回はBLEです。7日目の記事でシリアル通信が出てきたので乗っかってみようと思います。

目標

Espruinoで取得した温度をBLEで飛ばしてMac上のコンソールに出力します。Mac側のプログラムはnode.jsで動かします。一応全部JavaScriptですね。BLEモジュールは種類がたくさん出ていますが、今回は浅草ギ研さんのBLEシリアルモジュールを使い、温度センサの情報をMacに送ってみます。

必要なもの

このBLEシリアルモジュールは、その名の通りBLEでシリアル通信が出来るモジュールです。tx,rx等のキャラクタリスティクスをもつサービスが最初から提供されているので、Espruino側で必要なのは単純なシリアル通信のプログラムを書くことだけです。なんのこっちゃ分からん人はとりあえず読み進めましょう。

結線

公式のこの記事にArduinoでの結線例がありますので、これをそのままEspruinoで再現します。モジュールのtxをEspruinoのA10に、モジュールのrxをEspruinoのA9に接続します。また、モジュールのCTXRTXをワイヤーで接続します。電源はGNDvBATで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の温度センサで検知した値がコンソールログに出力され始めたら成功です。