2024/04/25(木)09:19
SwiftPlayground/ESP32を使って iPadをBluetooth Keyboardにするぞ!
2012年よりiPadを使い始めて10年が経過しました。
僕は当初よりWindowsPCも持ち運びたかったのですが、iPad/NotePC合計で
1.5kg超えが確実だったので何とか軽量化という事を考えていました。
ここではiPadをBLEキーボードとして使えないかソフトを作って検討しています。
現状何処まで作れたの?
詳細は作成記録に任せますが、一応実機で本ブログの入力が出来る様になりました。
但しipadのソフトキーボードの入力感に及ばず、まだまだ改善していく予定です。
とは言え・・・ 現状で気付く問題/修正点はSwiftPlaygrounds側ばかりです。
なので、SwiftPlaygroundsの使い方の調査・修正・確認のターンが長引くばかり。
SwiftのGUI周りをサポートしてくれる方が欲しいな~と悶々とする今日この頃です。
ココからは作成記録です。
キーボードを作る仕様とその進捗
=>どんな作りにするか?で 接続はこんな感じ考えています
iPadPro ー①ー> ESP32 ー②ー> ESP32 ー③ー> PC
①:BLE通信(既に自作した通信関数を利用)
②:UART通信(新規作成)
③:Bluetooth Keyboard接続(サンプルを流用)
普段から利用している①と②なので、主にiPadPro部と③の作成です。
=>実際にハードをつくりました。 2台のESP32をUARTで繋ぐだけです。
ソフト書き込みで不具合が起きたので電源スイッチを付けました。
=>iPadのSwiftPlaygroundでキーボードGUIとBLE通信を作ります
各キーはkeycodeを持ちpress/releaseが検知できる仕組みです。
press/releaseを検知すると全キーのpress/release状態をkeycode順の
bit配列にしてBLE通信で送信します。 以上w
※まずココからですよね~~~~
SwiftPlaygroundのソフト作成で起きた問題
解決済 >>キーボードレイアウトがががが
SwiftUIの基本的なモノで作っています。(不勉強であまり知らない為)
HStack/VStackでの対応なので現在は四角形しか作れていません。
反L字型のリターンキーは挫折して四角で我慢しました。
解決済 >>キーボタンのonPress / onReleaseイベントが取れない
基本構想でも紹介しているとうりkeydown/keyupが必要であり、
clickイベントはお呼びでは無いので実現方法を探しました。
アチコチ探した末にコチラのサイトに紹介がありました。(感謝~
解決済 >>ButtonUIの登録部分のソースコードが長すぎる
10キー無しキーボードでも90個分ぐらいのキー位置登録があるので、
1キー1行でないと見通しが悪く作りにくい事が判りました。
※別途struct ***key : view等で詳細を記述して登録部を改善
>>入力が変だ
ipadのソフトキーボードの様に入力できないので不具合をセッセと潰します
SHIFT/CTRLなどがワンクッション遅れでの動作の様な気がする・・・
キーリピートも気にする必要もありそうだし、問題山積な予感
>>キー入力後にKeyPress状態の色のキーが残っている
Releaseイベントが発生しない状況があるらしい・・・・
Pressイベント時にBLE電文送信をしているが、タイミングを変えてみるか?
>>キーロック状態を忘れていました
CapsLockとか何種類かはロック状態を維持できる事を忘れてました。
iOSの画面側は判る表示が出来る様にしたいと思っています。
ESP32のソフト作成で起きた問題
解決済>>ライブラリが101キーボードのディスクリプタで日本語入力できない
ディスクリプタを2か所書き換えて106キーにすると可能になりました。
解決済>>ライブラリの関数はCTRL/SHIFTなどの入力は受け付けない
keyreport定義にはmodifiersにセットする仕組みを追加しました。
>>Keyboard/Mouseコンボのライブラリを見つけました。
ディスクリプタを106キーボードに書き換えて動作確認中。
う少ししたらマウスの動作確認も行う予定。
>>ESP32-S3/ESP32-C3って凄く良さそうです
ESP32-S3はUSB HIDも実装できるそうです。USB HIDのキーボード
サンプルは101キーボードなので日本語入力化を解決してからデス。
またESP32-C3は安くて小さいので本ユニットの最終版で使うかな?
2024年某日 まだマトモに使えないんです
ある程度は上手く動く様な感じです。
しかし僕が普通にタイピングする速度にするとキーupが認識されないモノがあり、
破綻している感じです。 SwiftPlaygroundのプログラムが悪いのか?
ESP32側のソフト・動作設定が悪いのか? 悩ましいトコです。
2024年4月 MAC買ってソフト作るにはチョット悩ましい
swiftplaygroundのお陰でiOSでアプリを作成出来そうな気分です。
ただiphoneや旧ipad向けで作るならMACで開発する必要があります。
MACを手に入れるのは良いのですが、デベロッパー登録に年会費などなど
必要コストが悩ましい感じです。
そんな事ならAndroidに移行して安く上げたいですが、BLE通信ソフト開発デスヨー
どうしましょうかねー。 どっかAndroidのBLE通信と開発環境を手ほどき
して欲しい今日この頃であります。