この記事は 「IoTLT Advent Calendar 2019」の 22日目の記事です。
同名の 2つ目のカレンダーもありますが、1つ目のほうでの登録です。
はじめに
記事に書く IoT なネタを何にしようか、キーワードだけは先月からちょこちょこメモしていたのですが、なかなか決めきれていませんでした。
そんな中、4日前に書いた以下の記事にて obniz-noble を試そうとして、その手前で終わってしまっていた話が。
- 新デバイスと新機能:obniz Board 1Y と obniz-noble(2019/12/18) - Qiita
そして、@miso_develop さんの記事で「obnizを使えばIoTといった記載(⇒ obnizはネットにつながってないと動かないのでこれはきっとIoT)」という心強い後押し(?)も見かけたので、今回の IoTなネタは上記の自分の obniz を使ったネタの続きということにしようと思います。
obniz-noble について
上記の自分の記事でも触れたのですが、obniz-noble は先日でてきたばかりの新ネタで、内容は Node.js の BLE (Bluetooth Low Energy) central module である noble をフォークして作られたものになります。
試してみたい。
— you (@youtoy) December 17, 2019
●obniz/obniz-noble: A Node.js BLE (Bluetooth Low Energy) central module
https://t.co/BEu2253KyM#obniz https://t.co/o2Yk6CPG3t
試していく内容について
obniz-noble をいきなり試しても良いのですが、安全策として既存の noble を使ったサンプルを何か動かしてみて、その後にうまくいった内容の noble を使った部分を obniz-noble に置き換えれば良いかな、と思いました。
この前の記事では、noble を使ったサンプルをいくつか見つけるところまではやったのですが、試すところは時間切れでできていませんでした。
noble を使って toio と BLE通信
ということで obniz での BLE通信を試す前に、まずは noble を使って、toio を使った内容を試してみようと思います。
toio側の準備
toio側は特に準備無しです。
念のため BLE の通信ができそうかを、スマホアプリの LightBlue Explorer 等のアプリで確認しておくと良いかもしれません。以下のとおり、リストにでてきて UUID 等の情報が表示されていれば大丈夫です。
PC側の準備
次に PC側の話です。
ここで試す noble は上記の obniz のアドベントカレンダー用に書いた記事でとりあげていた「@abandonware/noble」を使ってみることにしました。
( ※ noble-mac のページに「Note: this project was integrated in @abandonware/noble and is no longer actively maintained
」という形で書かれていたものです)
この内容を試される場合の事前準備は、@abandonware/noble のページの中の Prerequisites に書かれた、ご自身のプラットフォームごとで違った内容となります。
自分は、「OS X」のところの「install Xcode」を行ったのみで済みました。
そして、上記の対応の後に「npm install @abandonware/noble
」を実行してください。
試してみる
ソースコードは、下記に書かれた内容を参考にしました。
●Getting started · noble/noble Wiki
https://github.com/noble/noble/wiki/Getting-started
プログラムに関しては require('noble');
となる部分を require('@abandonware/noble');
とすれば、それ以外の処理は同じで OK です。
今回試したものは、以下のようなソースコードになりました。
var noble = require('@abandonware/noble');
noble.on('stateChange', function(state) {
if (state === 'poweredOn') {
noble.startScanning();
} else {
noble.stopScanning();
}
});
noble.on('discover', function(peripheral) {
console.log('Found device with local name: ' + peripheral.advertisement.localName);
console.log();
});
これで実行をしてみたのですが、toio が見つからず・・・。
デバイスを全く見つけられないのではなく、いくつかのデバイスは見つかった、という感じでした。
「そもそも、LightBlue Explorer で発見できていた多数のデバイスも見つかっていない!?」というのがあり、
また、過去のハッカソンで「Mac でうまくいかなかった BLE周りの処理を、Raspberry Pi で動かしたら、それほど特別な対応はしなくても動いた」ということがあったのを思いだし、デバイス・環境依存の問題かもしれないと思って、次のステップに進みました。
obniz-noble で同じことをやってみる
環境の準備
下記を参照して、準備をします。
●obniz/obniz-noble: A Node.js BLE (Bluetooth Low Energy) central module
https://github.com/obniz/obniz-noble
参照した部分は、具体的には以下の辺りです。
Install & Usage
For node.js
npm install obniz-noble
var obnizNoble = require('obniz-noble')
var noble = obnizNoble("OBNIZ_ID_HERE")
プログラム周りの話は以下で書いていきます。
プログラム関連
プログラムについては、「@abandonware/noble」を利用したソースコードの一部置きかえ・行の追加を行っていきます。
まず、上記のソースコードの 1行目 var noble = require('@abandonware/noble');
の部分は var obnizNoble = require('obniz-noble');
に置きかえてください。
そして、その下に var noble = obnizNoble("OBNIZ_ID_HERE")
という行を追加します。**"OBNIZ_ID_HERE"**の部分は、ご自身の obniz のID(8桁の数字)に置きかえてください。
変更後のソースコードは以下のとおりです。
var obnizNoble = require('obniz-noble')
var noble = obnizNoble("OBNIZ_ID_HERE")
noble.on('stateChange', function(state) {
if (state === 'poweredOn') {
noble.startScanning();
} else {
noble.stopScanning();
}
});
noble.on('discover', function(peripheral) {
console.log('Found device with local name: ' + peripheral.advertisement.localName);
console.log();
});
こちらを実行してみます。
このプログラムは PC の Bluetooth は使っていないはずなので、それを確かめるために PC の Bluetooth をオフにしてプログラムを動作させてみました。
その結果、PC の Bluetooth はオフになっていますが、以下のように obniz の BLE が使われて、先ほどと同じように動作している様子が確認できました。
#obniz1Y で、obniz-noble を使い、 #toio の Loocal Name を読み取れた!#obniz pic.twitter.com/KDDbyrmvwR
— you (@youtoy) December 23, 2019
そして、先ほどとの違いが1つ。
プログラムの処理部分は上記の流れで試したときと同じなのに、今度は無事に toio を発見できました。
(やはり、デバイス依存か環境依存の問題だったか!!)
さいごに
試す途中に、Mac での BLEスキャン関連のトラブルがあったため、考えていた内容を試しきれなかったのですが、引き続き、obniz での BLE周りの内容を試していければと思います。
あと、記事を準備して調べている途中で、直近で投稿されたこちらも見かけました。
こちらで、本記事では toio にあたる部分で、LightBlue のバーチャルデバイス作成機能を使っていて興味深かったです(アプリメニューで見かけつつも、試せてなかったやつ)。
●obnizのBLEでペリフェラルを探す - Qiita
https://qiita.com/yukisato1987/items/93d22b195e7b7707525c
それと、toio での BLE 利用について、こちらを参考に操作なども試せればと思っています。
●Android/iOSアプリのLightBlueでtoioコア キューブを動かしてみる - Qiita
https://qiita.com/kenichih/items/ef5fde749c9a20bfa2bc