M5 StickCだからどうということはなく、ESP32のBLEを動かすのと等しいのだが、、最後にBLEを使った時は、MicroPythonのBLEライブラリはサブセットのためWindowsとはペアリングできなかったと記憶している。iOSなら大丈夫だったはず。。過去に試作したMIDI-Keyboardのサンプルを再度動かしてみる
import bluetooth from ble_advertising import advertising_payload _IRQ_CENTRAL_CONNECT = const(1) _IRQ_CENTRAL_DISCONNECT = const(2) _IRQ_GATTS_WRITE = const(3) MIDI_SRV_UUID = bluetooth.UUID('03B80E5A-EDE8-4B33-A751-6CE34EC4C700') MIDI_CHR_UUID = bluetooth.UUID('7772E5DB-3868-4112-A1A9-F2669D106BF3') payload = advertising_payload( #name="BLE MIDI 0.01", #services=[bluetooth.UUID(0x181A)], services=[MIDI_SRV_UUID], ) BLE_MIDI_CHR = (MIDI_CHR_UUID, bluetooth.FLAG_READ | bluetooth.FLAG_NOTIFY) BLE_MIDI_SERVICE = (MIDI_SRV_UUID, (BLE_MIDI_CHR,)) SERVICES = (BLE_MIDI_SERVICE, ) interval_us=500000 def bt_irq(event, data): # Track connections so we can send notifications. if event == _IRQ_CENTRAL_CONNECT: conn_handle, _, _ = data print("New connection", conn_handle) elif event == _IRQ_CENTRAL_DISCONNECT: conn_handle, _, _ = data print("Disconnected", conn_handle) # Start advertising again to allow a new connection. bt.gap_advertise(interval_us, adv_data=payload) elif event == _IRQ_GATTS_WRITE: conn_handle, value_handle = data bt = bluetooth.BLE() bt.irq(bt_irq) bt.active(1) ((midi,),) = bt.gatts_register_services(SERVICES) print("start advertise") bt.gap_advertise(interval_us, adv_data=payload) print(payload) #print(decode_name(payload)) #print(decode_services(payload))
iOS側でBLE開発ツール(LightBlue)でBLEを接続した。以下のようにBLE MIDI Keyboardとして認識されている。
このサンプルは、M5 Stick CをBLE MIDI Keyboardとして動かした例なので、これらのService UUID/Characteristic UUIDをMIDI Keyboardとして実装すれば、カメラのシャッターボタンとして使えるはず(音量Up/Downのキー操作でシャッターが押せるとメモがあった)。BLEのシャッターボタン実装のサンプルがGitにあるはずなので、それを参考に実装すれば動くと思われる。
Bluetoothキーボードから音量アップキー「KEY_MEDIA_VOLUME_UP」を送信することで、シャッター操作が行われるらしい
(https://wak-tech.com/archives/1796)
MicroPythonを使ってBLE接続のHIDを実装して、Keyboardの自動入力のサンプルを掲載してれている記事があるので、
この処理を参考に、VOLUME_UPのキーを送信できるようにすればシャッターが切れるはず。
■参考URL
まず見るべきGitHubのソース
micropython/examples/bluetooth at master · micropython/micropython · GitHub
https://gitee.com/walkline/esp32-ble/blob/master/ble/ble_hid.py
https://github.com/Heerkog/MicroPythonBLEHID/blob/master/examples/simple/keyboard_example.py