ESP32のBLE(Bluetooth Low Energy)プロトコルでSwitchBot スマートロックを制御するプログラムです。
PlatformIOでESP32のArduinoを使用しています。
デフォルトでは、スマートロックの開閉をBLE経由で行うためのコードです。
src/Switchbots
以下に、スマートロック以外のSwitchBot製品のコードもありますので、少し改造すれば他の機器(例えば、スマート電球や、テープライトなど)もBLEで操作できます。
M5 Atom S3 Liteのボタンを押すとLock(施錠)、ボタンの長押しでUnlock(解錠)します。
詳しくは、筆者のブログ「テック大家さん」にて解説記事も書いています。記事内ではプロトコル詳細も整理していますので本リポジトリのコードを利用する際の参考になるはずです。
SwitchBot製品のBLE APIについては、以下のサイトに文書化された情報があります。
ただし、上記のAPI仕様ではSwitchBotのいくつかの製品のコマンドは書かれているものの、SwitchBotスマートロックについては、記述がありません。
一方、以下のNodeJSを使うTypeScriptで書かれたライブラリの実装としてスマートロックのBLE操作が実装されています。
そこで、本Repositoryのコードは、node-switchbot (Github)のTypeScriptのコードから必要な部分をESP32 Arduino用に移植したものになっています。
SwitchBotスマートロックをBLEで操作するためには、ペイロードの暗号化が必要です。
src/DeviceAddr_example.h
に暗号化に必要なKeyId
とEncryptionKey
を適切に設定する必要があります。(使用する場合は、src/DeviceAddr.h
に名前変更が必要)
この値は、以下のプログラムで取得します。
使用には、SwitchBotのクラウドのログイン情報が必要になります。
(または、Danielhiversen/pySwitchbotも利用可能)
KeyId
とEncryptionKey
に関しては、node-switchbotライブラリのsetKey()の説明に情報が少し書かれています。
暗号は、AES 128bit CTRモードを使用します。
以下のライブラリに依存しています。
- m5stack/M5Unified@^0.1.16
- fastled/FastLED@^3.7.0
- m5stack/M5AtomS3@^1.0.0
- h2zero/NimBLE-Arduino@^1.4.0
- janelia-arduino/Vector@^1.2.2
(BLEは軽量のNimBLEを使用)