【Arduino】Bluetoothカメラシャッターを使う

it

スマートフォンのシャッター操作をするBluetoothカメラシャッターを使いました。
パソコンとスマートフォンでペアリングできますが、マイコンとBluetoothペアリングして操作した内容を記事にしました。

カメラシャッター

簡単紹介

AndroidスマホやiPhoneとBluetoothで連携し、数m離れた位置からカメラのシャッター操作ができる。

◆入手

ダイソー、Wattsで入手できます。
\200~\300。
色は見つけただけで「青、黄、赤、黒」。

外観

使ってみた

◆開発環境

Arduino環境で開発しました。
マイコンはESP32-WROOM32 ボードライブラリに 「esp32 by Espressif Systems」を使いました。

◆使ってみた

ペアリングしたマスターはHID キーボードとして認識されます。
パソコンとペアリングした様子です。

ペアリング後にボタンを押すと音量アップが機能しました。

カメラシャッターのボタンは2つあり、「Android」、「iOS」、どちらも音量アップしましたが、
iOsボタンは音量アップのみ。
androidボタンは音量アップ+Enterキーが入力されるようです。

スマートフォンとの接続では、パソコンと同じように音量が大きくなる方向に動作します。
カメラを起動しボタンを押すことで撮影ができるスグレものです。

iOS所有していないため、iPhoneなどでの確認はしていません。

◆Bluetooth接続 (ESP32-WROOM32)

マイコンと接続しました。
こちらはArduino環境で作成したスケッチを動かしている様子です。

ボタンの操作をESP32-WROOM32で読み取ることができました。

iOSボタン、androidボダンのどちらを押しても同じ結果になりました。
ボタンを押すと[01 00]を受信し、ボタンを離すと[00 00]を受信しました。

準備

◆開発環境

Arduino環境でESP32-WROOM32を使用します。
Arduino環境の準備はこちらの記事で紹介しています。

◆ボードライブラリ

Arduino IDEのボードマネージャからESP32 S3用ライブラリのインストールとボードの選択をします。

ボードマネージャのURLhttps://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
検索esp
ボードライブラリesp32 by Espressif Systems バージョン x.x.x※
選択するボードesp32 > ESP32S3 Dev Module
※ x.x.x 動作確認では3.2.0

◆モジュールライブラリ

追加のモジュールライブラリはありません。

スケッチサンプル

カメラシャッターのペアリングとボタン情報の受信

説明

カメラシャッターとBluetooth接続(ペアリング)します。
接続後、操作されたボタン情報を読み取りシリアル出力します。

配線

配線はありません。

スケッチ

#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEScan.h>
#include <BLEClient.h>
#include <BLEAdvertisedDevice.h>

BLEScan* pBLEScan;
BLEClient* pClient;
BLERemoteCharacteristic* pRemoteCharacteristic;

static BLEUUID serviceUUID("1812");
static BLEUUID charUUID("2a4d");

bool doConnect = false;
BLEAdvertisedDevice* myDevice;

class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks
{
  void onResult(BLEAdvertisedDevice advertisedDevice)
  {
    if (advertisedDevice.haveServiceUUID() && advertisedDevice.isAdvertisingService(serviceUUID)) 
    {
      Serial.println("Found The HID Keyboard");
      myDevice = new BLEAdvertisedDevice(advertisedDevice);
      doConnect = true;
      pBLEScan->stop();
    }
  }
};


void setup()
{
  Serial.begin(115200);
  BLEDevice::init("");

  pBLEScan = BLEDevice::getScan();
  pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
  pBLEScan->setActiveScan(true);
  pBLEScan->start(10, false);
}

void loop()
{
  if (doConnect)
  {
    pClient = BLEDevice::createClient();
    pClient->connect(myDevice);
    Serial.print("Connected : ");
    Serial.println(myDevice->getAddress().toString().c_str());

    BLERemoteService* pRemoteService = pClient->getService(serviceUUID);
    if (pRemoteService == nullptr)
    {
      Serial.println("Not found service.");
      return;
    }

    pRemoteCharacteristic = pRemoteService->getCharacteristic(charUUID);
    if (pRemoteCharacteristic == nullptr)
    {
      Serial.println("Not found characteristic");
      return;
    }
pRemoteCharacteristic->registerForNotify(
  [](BLERemoteCharacteristic* pBLERemoteCharacteristic, uint8_t* pData, size_t length, bool isNotify) {
    Serial.print("Received: ");
    for (int i = 0; i < length; i++)
    {
      Serial.printf("%02X ", pData[i]);
    }
    Serial.println();
  }
);
    doConnect = false;
  }

  delay(1000);
}

結果
カメラシャッターとのペアリングと、ボタン操作の読み取りができました。
(Connected : **-**…) はデバイスのMACアドレスが表示されますが伏せています。

iOS、androidボタンのどちらを押しても同じ結果が得られました。
ボタンを押すと[01 00]を受信し、ボタンを離すと[00 00]を受信します。

コメント

タイトルとURLをコピーしました