masato-ka's diary

日々思ったこととか、やったことの備忘録。

Web Bluetooth APIと自作BLEデバイスで戸締り確認をしてみる。

この記事について

 この記事ではWeb Bluetooth API戸締り確認アプリを紹介します。デバイス側はRN4020を使って実装しました。Web Bluetooth APIとRN4020を使ってBLEのアプリを作ってみたかったので、製作しました。実用性はありませんが、それぞれの使い方を覚えるのには大変良さそうな題材です。

戸締り確認アプリ

戸締り確認アプリは大まかに以下の仕様になっています。

  1. BLE経由で鍵の開閉を確認することができる。
  2. 鍵の状態が変わったらBLE経由で通知が来る。
  3. 鍵が開場した場合にブザーが鳴る。

バイスの紹介

今回RN4020で作るBLEデバイスにはホール素子とブザーが付いています。ホール素子は磁石が近づくと信号を出力するセンサです。自転車の速度計などに利用されています。また、ブザーについてはRN4020のデジタル出力で直接駆動できないため、トランジスタで増幅しています。抵抗値などはかなり適当です。

f:id:masato-ka:20171001123639j:plain

実体配線図っぽいのは以下の通りです。

f:id:masato-ka:20171001132146p:plain

RN4020のサービスとキャラクタリスティックは以下のように設定しました。一つのサービスに開閉のデータを送るキャラクタリスティックとブザーを制御するためのキャラクタリスティックの2つを設定しています。また開閉のキャラクタリスティックについてはReadとNotifyの2つを設定しています。後ほどスクリプトでRN4020のIOポートとつなげるため、データ長は1バイトにしています。(単純な動作なので)

  • サービス
    • UUID 123456789012345678901234567890FF
    • 鍵開閉のキャラクタリスティック
      • UUID 12345678901234567890123456789011
      • Mode Read,Notify
      • Length 1byte(0x02の場合ロック,0x00の場合アンロック)
    • ブザーのキャラクタリスティック
      • UUID 12345678901234567890123456789022
      • Mode Write(応答なし)
      • Length 1byte(0x04の場合に発音,0x00の場合に消音)

実際のコマンドは以下のように設定します。

PS,123456789012345678901234567890FF
PC12345678901234567890123456789011,12,01
PC12345678901234567890123456789022,04,01

実際に指定したスクリプトは以下のスクリプトを設定しました。

@PW_ON
|O,04,00
|O,04,%000E
A

@CONN
SM,1,000F4240

@TMR1
$VAR1 = |I,02
SHW,000B,$VAR1
SM,1,000F4240

@DISCON
A

スクリプトやその他設定の方法については以下を参照してください。

masato-ka.hatenablog.com

Webブライザ側のアプリケーションについて

Webブラウザ側のアプリケーションについては以下のUIを作りました。AugularJSとを利用して作成しています。

f:id:masato-ka:20171001120601p:plain

connectを押すとBLEの接続要求が実行されます。またreadやSubscribe/Unsubscribeでデバイス側のホール素子の値を取得します。

ソースコード全体については以下のリポジトリに置いてあります。

github.com

アプリの実行

アプリの実行時の動作を動画にしてみました。ブザーの音がするので音量は控えめにしてください。

www.youtube.com

バイスへの接続ご、サブスクライブ(デバイスからのNotifyをスタート)を行い、画面上のLock Unlock表示が変わります。また、Alertをセットすることで、Unlock時にブザーが鳴るようになります。

まとめ

Web Bluetooth API とRN4020を使うことで簡単にBLEを使ったアプリケーションを作ることができました。今回は半日程度で両方実装できたので非常にお手軽だったと思います。BLEで何かしようと思った場合、スマフォなどのアプリは作れるけど、そもそも取り扱えるBLEデバイスの種類がないので面白いことができないといった場合にはRN4020でサクッとデバイスを作ってしまうのもいいかもしれません。また、自作のBLEデバイスを作ってみたけれど、コントロールするスマフォアプリを作れない、市販デバイスを気軽にハックしたいという場合はWeb Bluetooth APIを利用するとサクッと見栄えのいいアプリが作れると思います。コンセプトを試したいときなどアイディアの試作に利用できそうです。

今回の作例を使ったワークショップを2017年10月20日に開催予定です。どなたでもご参加いただけます。

connpass.com