Help us understand the problem. What is going on with this article?

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

More than 5 years have 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の温度センサで検知した値がコンソールログに出力され始めたら成功です。

scouty
「あらゆる事象を必然化し、 世の中のミスマッチをなくす」ことをミッションとし、AIヘッドハンティングサービスを開発・運営するスタートアップ
https://lapras.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away