見出し画像

第32回 Bluetoothって何だ【Garmin Programming】

経緯はこちらでも書いた通りですが、
①GarminVenuSQという、つけごこち抜群のスマウォを買って毎日つけてる
②自転車の鍵をいちいち外すのが面倒だった
→ スマートキーを作ろう
ということで作るための勉強をしています。前回はBluetoothの機能を使えるようにする基板を買ってきました。

今回は「そもそもBluetoothって何を調べたら実装方法を知れるの?」という点について調べていきました。動作の流れと用語ですね。
このnoteは備忘録も兼ねているので、やや冗長な記述になっています。「知識面はどうでもいいから、手順通り作ればいいやつくれ!私はスマートキーが欲しいだけだー!」という方は次回から読むといいと思います。

(2022/2/21公開予定)

画像1

今回、非常に参考になったのがこちらのページ。

今回は基板から違うので勝手は違いますが、アンドロイドOSのアプリ向けBluetooth実装のページもわかりやすいです。

Bluetoothの主従関係

まずBluetooth(以下BT)は、Master(主人)とSlave(従者)の関係から成り立ちます。

アセット 6

二つのBT搭載機器があって、片方がMaster、片方がSlaveになります。
MasterもSlaveもデータを送って他のデータを受け取ることができますが、Masterは複数のSlaveとやり取りできるのに対し、Slaveは自分のMasterとしか通信できません。

アセット 7

BT機器にはそれぞれ固有のID(=Mac Address、以下BTアドレス)があって、12桁(2桁x6)の16進数で表現されます。当然私のMac miniもIDを一つ持っています。

スクリーンショット 2022-02-16 21.24.27

最初の6桁(ここでいうと14-98-77)が製造者固有記号"OUI"(Apple, Inc.)で、31-6A-2Fがデバイス固有の記号です。mac miniは全て14-98-77で始まっているんですね。

BTアドレスから製造者などを調べるサービスもあります。

接続(ペアリング)までの流れ

日本語文献が見つからなかったので正確な訳がわかりません(^ ^;
が、雰囲気は伝わると思います。

1. 探査 Inquiry
初めはお互い相手のことがわからないので、一方のデバイスがinquiry requestを送信し、もう一方が聞きつけて自分のBTアドレスを返します。

2. ページング(記帳)Paging
探査でお互いのBTアドレスがわかったら接続します。お互いのデバイスに相手のBTアドレスなどを書き込んでいます。_φ(・_・

3. 接続 Connection
記帳が終われば接続状態になります。接続中もいくつか状態があって、いつも通信しているわけではないです。

・Active Mode:データの送受信をしています。
・Sniff Mode(信号待ち):100msなど決められた時間おきに信号がきてないか確認します。まどろみつつ時々鼻をクンクンさせてる感じですね。
・Hold Mode(休止):Masterからの指示で一定時間信号を受け取らず休止します。
・Park Mode(停止):同じく休止しますが、Masterが起きて〜と言うまで休止し続けます。

休止と停止の使い分けはどうなっているのか?については別記事で書きたいと思います。

結束(Bonding)

BTの特徴として、一旦ペアリングできたら以降は近くにいるだけで自動的に繋がってくれます。便利ですよね。ページングの段階でBTアドレス、デバイス名、プロファイル、そして共通の暗号鍵を共有して、いつでもつながれるようにしています。

当然、受け入れるべきデバイスを認証しないといけませんが、やり方はデバイスごとで大きく違うようです。確かにスマホと繋げる時は数字を入力したり、ワイヤレスイヤホンだとボタンを押せばOKだったりと、この辺の実装はどうするか考える必要がありそうです。

改めてスマートキーは何を作ればいいのか考えてみる

結局、GarminがBT使えると言うのでBTを使って信号を送っているだけで、本質は有線だったとしても変わらず、「モーターのスイッチを入れる」と言うことに尽きるわけです。そのスイッチを遠隔でも押せるようにしよ?と言うのがスマートキーになるわけです。

アセット 10

アセット 11

・鍵本体には、「電気信号を受けてスイッチを入れる」「モーター」「BTで指令を受けて電気信号を発する」部品の三つで回路を作り、

・Garmin側はBTで指令を送れるようになればOKです。

「電気信号を受けてスイッチを入れる」部品といえば「リレー」です。まずは鍵本体の設計をしたほうがいいですね。

実装にはやっぱりAPIを使う

今回はできあいの基板(ESP-32-WROOM)を使っているので、VC Editor側にもExtensionがあります。今回の知識でだいぶ理解が楽になったので、ESPを提供しているEspressifの説明サイトを見つつ実装していきます。

次回以降は、鍵本体を作っていく3A番台と、Garmin側のプログラミングを行う3B番台を同時並行で投稿していきます。

3A番台は最終的な鍵の設計図データを添付しておこうと思います。ダウンロードするだけで、お近くのデジファブ拠点で印刷できるようにもしておくので、ぜひみなさんも作ってみてください。

ではまた。

この記事が気に入ったらサポートをしてみませんか?