スマートフォンのシャッター操作をする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用ライブラリのインストールとボードの選択をします。
ボードマネージャのURL | https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json |
検索 | esp |
ボードライブラリ | esp32 by Espressif Systems バージョン x.x.x※ |
選択するボード | esp32 > ESP32S3 Dev Module |
◆モジュールライブラリ
追加のモジュールライブラリはありません。
スケッチサンプル
カメラシャッターのペアリングとボタン情報の受信
説明
カメラシャッターと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]を受信します。
コメント