この記事は 「obniz Advent Calendar 2019 - Qiita」の 18日目の記事です。
はじめに
ちょうど「アドベントカレンダーの登録日の前日」というタイミングで、このようなリリースが行われていました。
本日のニュース
— obniz japan (@obniz_jp) December 17, 2019
- obniz Board 1Y発売開始しました!
- obniz.js 3 リリース
- obniz-noble リリース
- obnizOS 3 リリース
詳しくはこちらでhttps://t.co/CB8wViVlzw
新デバイス「obniz Board 1Y(ワンワイ)」がかなり気になりつつ、それ以外の話で気になったのがこちら。
試してみたい。
— 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
Node.js の BLE (Bluetooth Low Energy) central module である noble をフォークして作られたという、obniz-nobleです。
あと、obniz Board 1Y は情報を見て即ポチり、「翌日(12/18) = カレンダーの担当日」には受領できました。
#obniz の新デバイス、ゲット!
— you (@youtoy) December 18, 2019
旧デバイスを下に並べた写真を撮ってみました。 pic.twitter.com/3x86sMdBxo
アドベントカレンダーの担当日の前日にこれらがリリースされ、obniz Board 1Y を担当日に受領できたという状況。
これはアドベントカレンダー用のネタとなるよう CambrianRobotics さんが合わせてくれたに違いない!(絶対違うw)
ということで、タイトルにもある通り「obniz Board 1Y」と「obniz-noble関連」に関する記事を書こうと思います。
事前に考えてたネタを前日に丸ごと捨てて、内容を差し替えましたw
obniz Board 1Y について見てみる
旧来のデバイスとの違い
ここでは、旧来の「obniz Board」と、新デバイスである「obniz Board 1Y」との違いをいくつかピックアップしてみます。
公式の obniz関連の日本語ブログでの新商品に関する記事に記載があるので、そこからの情報抜粋となります。
スリープ機能
まずは、事前に予告されていたスリープ機能です。
以下、公式の記事からの部分的な抜粋です。
– スリープ機能搭載、単3電池で1年間動作
obniz Board 1Y の最大の特徴は、指定した時間やきっかけまで動作を停止する「スリープ機能」を追加し、低消費電力状態で待機できるようになった点です。
「定期的な温度計測やカメラ撮影」「人を検知したときだけ起動して通知」など、アクション時にのみ起動することで、電池のみで1年以上の稼働を維持することができるようになります(稼働期間は起動頻度に依存します)。
サーバーレスイベントなどと組み合わせれば、電池のみで様々なアプリケーションが開発可能となります。
同記事内の情報によると、動作時間の話は「アルカリ乾電池3本で6時間ごと30秒の稼働で1年」という計算のようです。
また、「分単位での時間経過か、IO0 の ON→OFF または OFF→ON の変化」の2つを動作のきっかけにできるようです。
新旧デバイスのその他の比較
上記の公式情報に、新旧比較の変更点のみが記載された表があるため、それを引用します。
個人的に気になる部分は赤い線でマーキングしています。
該当する箇所の1つは、既に引用して記載したスリープ機能、そしてもう1つはコネクタです。
(写真だとわかりにくそうだけど)
— you (@youtoy) December 18, 2019
新旧のコネクタの違い。 pic.twitter.com/QRo7llaH3x
個人的には、いろいろ持ち歩いているデバイス・ガジェットの接続のために、利用する可能性のあるコネクタのケーブルは全種類(現状は、microUSB、USB TypeC、Lightning)を常時持ち歩いているため、新旧のどちらのコネクタでも困ることはないのですが、最近のデバイス・ガジェットは USB TypeC が圧倒的に多いので、これから先のことを考えると嬉しい変更です。
obniz 3.0.0 関連
表題には入っていないですが、この記事を書いている途中で情報がでてきたので、少しだけ「obniz 3.0.0」について前のバージョンとの差分を見てみます。
●obniz 2.x.x→obniz 3.0.0移行方法 – blog.obniz.io
https://blog.obniz.io/ja/blog/obniz-2-x-x%e2%86%92obniz-3-0-0%e7%a7%bb%e8%a1%8c%e6%96%b9%e6%b3%95/
まず、上記の冒頭部分を引用してみます。
obniz.js / obnizOS 3.0.0にはいろいろな新機能があります。
・起動画面がかっこよくなる!
・BLEがより使いやすく!
・(1Yのみ)Sleep機能が使えるように!
これらの新機能を使うにはファームウェアとプログラムのアップデート両方が必要です。
BLE関連の実装をしていない場合は、プログラムの変更は以下の内容のみで良さそうです(あと、ファームのアップデートもお忘れ無く)。
読み込むobniz.jsのバージョン変更
HTMLタグ内のobniz@2.X.X
のところをobniz@3.0.0
に変更します
▼ 変更前
<script src="https://unpkg.com/obniz@2.0.3/obniz.js" crossorigin="anonymous"></script>
▼ 変更後
<script src="https://unpkg.com/obniz@3.0.0/obniz.js" crossorigin="anonymous"></script>
obniz-noble 関連
noble を試す
obniz-noble についても「これは、試して記事にせねば!」と思いつつ、その前に noble で動作する何かを試そうと思いました(そして、うまくいったものの noble を使った部分を obniz-noble に置き換えれば良いかなと)。
そして、noble 関連の情報を色々と調べていく中で、フォークされたバージョンや他に下記の「noble-mac」というのを見つけて、「noble」ではなくこの noble-mac を試してみることにしました。
●Timeular/noble-mac: Noble MacOS bindings using the official CoreBluetooth API
https://github.com/Timeular/noble-mac
上記の説明文には以下の記載があり、プロトコル周りの問題で noble は新しいOSでエラーがでるようになったようで、その問題に対応したものっぽいです。
Noble (Node.js Bluetooth LE) for MacOS
The mac bindings in the noble repository use a XPC connection and an undocumented protocol to communicate directly with the bluetooth daemon. This is error prone, as the protocol needs to be reverse engineered by sniffing the communication between a regular program which uses the official CoreBluetooth API and the bluetooth daemon. Since the protocol is not public Apple can change it at anytime (For now every new OSX release changed the protocol).
This package provides the same functionality as the regular noble mac bindings using the official CoreBluetooth API.
さらに、以下のような記載もあって、下記のプロジェクトに統合されていくとのことで、今後はこちらを使っていくのが良いかもしれません。
Note: this project was integrated in @abandonware/noble and is no longer actively maintained
とりあえず、簡単なプログラムを実行させてエラーがでない状態にするところまで、あれこれ対応して確認しました。
obniz-noble のリポジトリを見てみる
そして、obniz-noble の話へ進んでいきます。
obniz-noble の GitHub の情報を見てみました。
exampleフォルダの直下は、このような感じ(※ 12/17 20時ごろ)。
「pizza」というフォルダが気になったので、開いてみました。
フォルダの中身などはこのような感じで、どうやら、2台の PC を準備して、peripheral側(bleno のサンプルを利用)と central側(obniz-noble のサンプルを利用) を用意すると、試せるサンプルのようでした。
試す方針
とりあえず、noble が使われている既存の作品を調べて、その中からどれか 1つを noble を使って動かした後に、noble を obniz-noble に置き換えて動かす流れにしようと思いました。
候補にしたのは下記の作品で、micro:bit との連携ネタを探った形です。
- Node.js + nobleを使ってMicrobitのセンサー情報を読み取る
- micro:bitのBLEのA・BボタンイベントをNode.js nobleで取得してみるメモ – 1ft-seabass.jp.MEMO
- micro:bitのBLE LEDサービスにNode.js nobleでWOMBAT!と文字を送るメモ – 1ft-seabass.jp.MEMO
この中の1つを試して、その結果を記事に書きたかったのですが、時間切れよりここまで!
公式の作例
Facebook の obniz のユーザコミュニティで、「こんな公式の作例があるよ!」と情報が出ていたので掲載。
- スリープ機能搭載 obniz board 1Y を使った省電力な開閉検知デバイス(slack連携) – blog.obniz.io
- obniz Board 1Yで省電力な温度ロガーを作成 – blog.obniz.io
- obniz Board 1Yのスリープ機能を使った省電力な水やりデバイス – blog.obniz.io
おわりに
今回やりきれなかった内容を試しつつ、さらに、新しく実装されたスリープ機能を活用した作例なども作ってみたいです!