3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5StickS3でSwitchBotを操作する

3
Posted at

はじめに

M5StickS3を購入しました。
これはMCUチップと色々な周辺機器を搭載している、配線なしで使える開発ボードです。
試しにSwitchBotを操作するリモコンを作ってみました。

switchbot.gif

ソースコードは下記リポジトリにあります。
https://github.com/bmountain/switchbot

実装

アプリケーションの概要と嵌まりどころに関するメモを記載します。

開発環境

ESP-IDF v5.3.5を使用しました。
画面の制御に使用したM5Unified v0.2.17がESP-IDF v6.0.1に対応していないため、古いバージョンを選びました。1

制御フロー

シーケンス図を示します。

ボタンを押下すると、ボタンが画面タスクとBLEタスクに押下イベントを通知します。
画面タスクは送信画面を表示し、BLEタスクからの通知を待ちます。
その間BLEタスクはSwitchBotにコマンドを送信し、通知を待ちます。
通知を受信したBLEタスクは画面タスクに成功を通知し、画面タスクは成功画面を表示します。

ボタン

ボタンの押下検出の実装は、ESP-IDFのAPIを使用してハンドラーを登録する方針を取りました。
ポイントはGPIOピンの設定でした。

M5StickS3にはボタンAとボタンBがあります。
ボタンAはGPIO11、ボタンBはGPIO12と接続しており、いずれのピンにもプルアップ抵抗がついています。
このことはM5Unifiedのソースから分かりました。2

例えばボタンAであれば次のようにGPIOを設定します:

const int gpioNum = 11;
gpio_config_t config{
  .pin_bit_mask = 1ULL << gpioNum,                  // GPIO番号を指定
  .mode = GPIO_MODE_INPUT,                          // 入力として使用
  .pull_up_en = GPIO_PULLUP_ENABLE,                 // プルアップ抵抗あり
  .pull_down_en = GPIO_PULLDOWN_DISABLE,            // プルダウン抵抗なし
  .intr_type = GPIO_INTR_NEGEDGE};                  // 立下りエッジを検出
gpio_config(&config);
gpio_isr_handler_add(gpioNum, buttonHandler, this); // ハンドラー登録

起動後にこの処理を実行し、ボタン押下時のハンドラーとして、画面タスクとBLEタスクへの通知を登録しています。

なお、M5UnifiedのAPIならもっと簡単にボタン押下を検出できます。
そのかわり、ハンドラーの登録に対応していない3のでポーリングで実装することになります。

BLE

BLEによる通信のポイントは、UUIDとコマンドの設定でした。

コマンドの送信には

  • コミュニケーションサービスのUUID
  • コマンド送信用のキャラクタリスティックのUUID
  • 通知受信用のキャラクタリスティックのUUID
  • コマンドとして送信するバイト列

が必要です。
いずれもBot BLE open APIの、"BLE Communication Data Message Basic Format"の欄に記載されています。
UUID・コマンドの具体的な値はソースに記載しています。4

終わりに

初めてのマイコンでした。
小さいのに色々できて面白いです。

  1. https://github.com/m5stack/M5Unified/issues/245

  2. https://github.com/m5stack/M5Unified/blob/8108bfad04a20ff4e57c0751f62dd6fdf6b137a6/src/M5Unified.cpp#L2849

  3. https://github.com/m5stack/M5Unified/issues/48

  4. https://github.com/bmountain/switchbot/blob/024c8f255389164a70b6b704378a8808f9bcffc7/main/SwitchBot.cpp#L11

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?