2026年5月3日日曜日

iOSでWeb Bluetooth APIを使ってみた。

 ESP32にiPhoneとかでアクセスする場合はWebサーバを立ててWebSocketとJavaScriptを駆使すれば簡単にデータのやり取りとかUIも実装できたりして便利なんだけど、nRF52840でBLEを使った通信の場合はどうしよう…ということで調査してみた。

確かにHTTPサーバを建てられるESP32はUIまで内蔵してしまえば手軽で良いんだけどやっぱりWiFiは消費電力が…
ということでDMC-100に内蔵するのにBLEのみのnRF52840を使用した。TWELITEとかでも良かったんだけど、受信側にもドングルが必要になるし。

PC側で受信するにはPythonとか使えるので問題なかったんだけど、外や車で使う場合はやっぱりスマホのほうが便利なんだよなぁ
ということでスマホでも使えないかやってみた。

アプリは敷居が高いし、PythonistaはBLE対応してるっぽいのでPCで使っていたBLEアプリをベースにすれば動くかも?ただし有料。Web Bluetooth APIはデフォルトのブラウザでは対応していないけどBluefyアプリを使用すればiPhoneでも使えることがわかった。

ただしhtmlファイルをhttpsサーバ上においておかないとだめらしい?

そのためだけにサーバを契約したり立てたりするのが面倒なので今回はGitHub Pagesを使ってみることにした。GitHubにhtmlファイルをアップロードして設定をするだけで使えるらしい。

設定も簡単で、レポジトリを作成して、index.htmlをアップロードして、レポジトリの設定をひらいて左側のPagesからBranchをmainにしてSaveするだけ。

あとは少し待ってからまたこの設定画面を開くとBuild and deploymentの上のところに公開URLが生成されている。

すげー簡単にWebページが作れる…

あとはiPhoneにBluefyをインストールしてそのURLを開くだけ。

CSVダウンロード機能が動かなかったので、クリップボードに貼り付けとかを試した結果、Web Share APIを使ったほうが便利だったのでShare画面を表示するようにしてここからファイルに保存したり他のアプリで転送できるようにしてみた。
これなら簡単にiOSでBLE対応のWebアプリが作れるので便利かもしれない。

2026年5月1日金曜日

FNIRSI DMC-100をBluetooth対応にしてみた。

 この前、UARTをBLEで飛ばせるかどうか確認がうまく行ったのでnRF52840DMC-100に内蔵できるかどうかを確認してみた。

3.3V電源を生成しているところは裏面にありそうなんだけど3.3Vラインが今どのぐらい使われているかもわからないのでとりあえずLipoにつながっているPch FETのラインから取ることに。ここは逆流防止とスイッチのよくある回路っぽい配置になっていた。電源がオンになるとここからLipoの電圧が直接出てくる。
GNDはUSBコネクタのところから、SD7502の出力は22Ωの抵抗のところから取った。nRF52840に繋がないといけないのはこの3本の線。
こんな感じで電源をVBUSラインに、RXにSD7502を繋いでGNDはGNDの3本の線だけ。とりあえず動作確認したかったのでまだはんだ付けはしていないけど簡単。
ブザーの上に取り付けようと思ったら可動部が上の方にあるので結局SD7502の上に厚手の両面テープを2枚重ねで装着してみた。nRF52840は温度が上がらないので問題ないと思うけど念のため。はんだ付けして完了。

ソフトを書き換えるときはVBUSがLipoに直結してしまうので一旦電源ラインだけは剥がす必要がある。頻繁に書き換えるならショットキーダイオードとか入れておいたほうがいいかも。とりあえず前回作ったスケッチを書き込んでおいて、あとはクライアント側のアプリでどうにかする方式にしたので書き換えたりはしない予定だけど。

アプリの方はこの前作ったPythonツールnRF52840のスケッチをGeminiに投げてWeb Bluetooth APIで作ってもらった。シリアル通信の解析はダメダメだったけどここまで出来てれば素早くきれいなアプリが出来上がるのすごいな…
スマホとか対応できるようになったらもっと便利かも。