2018年10月13日土曜日

ESP32をBluetoothマウスにする

ゲームボーイを無線マウスにした際に、Bluetooth側はESP32を使って実装しました。キーボードのサンプルコードに記載の関数群でマウスまでまかなえたので、使い方を記載しておきます。

ESP-IDFを使う

ESP-IDFのBluetooth Low Energyサンプルのうち、HID over GATTを使います。

ESP-IDF BLE HID device demo

ble_hidd_demo_main.cではほとんどConsumer Keyの送信しかしていないのですが、esp_hidd_prf_api.hにはきちんと関数が実装されています。

  • void esp_hidd_send_consumer_value(uint16_t conn_id, uint8_t key_cmd, bool key_pressed);
  • void esp_hidd_send_keyboard_value(uint16_t conn_id, key_mask_t special_key_mask, uint8_t *keyboard_cmd, uint8_t num_key);
  • void esp_hidd_send_mouse_value(uint16_t conn_id, uint8_t mouse_button, int8_t mickeys_x, int8_t mickeys_y);

いずれも、キー操作情報等の最低限のデータを入れればよしなに成形して無線で飛ばしてくれます。

マウス利用時のmouse_buttonは、レポートディスクリプタの0バイト目にああたります。下位3ビットに3ボタンマウスのそれぞれが割り当てられています。下から右・左・中ボタンになります。

2018年10月9日火曜日

技術書典ふりかえり

技術書典に本を出す側で参加したのでその記録です。

出した内容

  • ゲームボーイのカートリッジ基板の作り方をまとめたPDF
  • 実際に作ったカセットのデモ

本はPDF版のみにし、購入もすべてBoothで行ってもらう方法にしました。なので、現場での授受はそのBoothのURLとQRコードを印刷したカードのみです。ひとりチームなので金銭のやりとりとか決裁のトラブルとか抱えたくないのと、今後更新を行うときに購入してくれた人に損がないようにと考えてPDF版のみかつBoothのプラットフォームで更新通知を容易にしたいなと思ってこういう形にしました。もともと自分が調べたことを忘れないように書いた本の内容に、今後調べたり試したりして新しいことがわかったらとか改良の余地がありまくるので、そういうのが増えたら追記・更新したいんですよね。

カードの裏面は著者(というかおれ)の名刺代わりにしたので、余ってもあとで名刺として配ってアピールできるなと。

当日の様子

机の上は見本として印刷したPDFの中身と、実際に動作するゲームボーイのデモを置いておきました。他の振り返りの記事にあった「見本誌は2冊あったほうがいい」という内容を、本とデモ機でうっかり満たした感じがしました。

個人的には本を買ってもらうよりも「俺が作ったものが超おもしろいからおまえらも見ろ」という感じでデモ推しの気持ちだったので、Bluetoothマウスにしたゲームボーイを触ってもらって、おもしろかったらカードを持ち帰ってもらう、みたいな流れに落ち着きました。特定の年齢層だけは、説明する前から操作方法がバッチリはまる様子に最高に笑いました。

その他電気の気付き

  • マウスのデモに使ったMacBook Proは終了の17時ちょうどに電池が切れたのでギリギリもった
  • Bluetoothに使ったESP32がおもいのほか大健闘
    • モバイルバッテリーから電源を取ったが、容量ゲージが減る気配がない。
    • 会場の電波が落ち着いていて混信がなく、常時問題なく動作。

ESP32はデータシート上だと電流がそんなに消費しないと書いてあって本当かよって思っていましたが、Bluetoothだけだと本当にそんなに消費しないっぽいです。今度測ってみます。

https://niccolli.booth.pm/items/1026724

もし当日の本に興味があれば、上記リンク先から購入ください。デモがないとおもしろいところがわかりにくいと思いますが、何らか参考になれば幸いです。カードを持ち帰りいただいた方から、結構な数の購入をいただいた通知が来まして、ありがたい限りです。