2021/04/28

windows10 + Delphi + Bluetooth LE

 Bluetooth LE(Bluetooth Low Energy)は、Bluetooth バージョン 4.0 から追加になった低消費電力の通信モードで、それまでの、Bluetooth(クラシック)とは、全くの別物。最近、実験している無線デバイスは、この BLE を使ったもの。

 nRF51822 の実験デバイスが動いてるらしいのは、nRF Connect というソフトで確認できるが、実際に何か作った時には、自前で応答するソフトを作らないといけない。Delphi(RAD Studio 10.3)には、TBluetoothLE というコンポーネントがあるので、これを使えば、楽チンに出来上がるのかと思ったが、どうやら怪しい。

 ネットでさっくりと調べてみるに、BLEのプログラムというのは、iOS だったり、Android 向けであり、Windows用ではない。Delphi のページをみると、さも、Windows10以降なら、対応しているかのように見えるが、そう単純なものでもなさそう。


 以下、怪しい開発メモ、正しいかは保障しない。

1)デバイス取得
 BluetoothLE1.DiscoverDevices(2500); で検索開始して、onDiscoverLEDevice にて、目的のデバイスが見つかるまで、一つづつ確認する。

2)サービス取得
 先にWindows 上で、ペアリングしておく必要がある。BLE は、ペアリング不要と思っていたが、アドバタイズ(定期発信されるデータ)のみで完結しているデバイス(ブロードキャスト)は、その先の情報は必要ないからペアリング不要という意味であって、データをやり取りするなら、一度、ペアリング操作をしておかないといけないのだろう。

 デバイス側で仕様を変えた時は、一度ペアリングを削除して、再度ペアリングしておかないと駄目かも。追加したキャラクタリスティックが見つからず難儀した。

 って、Delphi が問題というより、BLE の仕組みが判っていない僕が悪いのかも。

 この間まで頑張ってた 2.4GHz の無線デバイスと違って、特別な受信デバイスが不要っていうのが一番のポイント。PC側が、bluetooth 対応してあれば、あとはソフトでいかようにもなる、はずなんだな。

2021/04/22

EBYTE E73-2G4M04s1D nRF51822 SoC


 Nordic の nRF51822 が乗った裸モジュール。1.27ミリピッチなので、2.54ミリのヘッダピンを互い違いに付けて、実験してみた。あー、これは異次元の難しさだわ。Lチカするのに、一日掛かりだ。Bluetooth以前の問題。
 ESP32 は、なんでも出来てすごいんだけど、根本的に燃費悪すぎて、バッテリー駆動には不向きだと思うんだ。なんで、Nordic チップの無線モジュールを使いたいわけ。でも、こちらは素人の手には負えない感じ。


追記 2021-04-23
 訳分からない Rust じゃなくて、Arduino IDE でも動いた!

 led_switch というサンプルプログラム。接続先の USBドングルから、LEDのオン・オフ切り替え、ボタン操作で、NOTIFY も飛んでる。電池2本で普通に動くのがいいね。



追記 2021-04-26
 Serial と、i2c の OLED(ssd1306)が動いた。大きいほうの OLED は駄目だった(謎)。肝心の BLE HIDが、コンパイルも書き込みも出来るが、Windows上で接続すると、ドライバエラーとか出て機能せず、ぐぬぬぬぬ。たぶん、Windows側の問題であって、Android とかでは普通に動くと思われる。枯れたデバイスだと思っていたが、開発者達は、Windows なんぞ使っていないんだろうなぁ。

※ 技適マーク無しの無線デバイスの実験は、日本国外で行いましょう。

2021/04/13

Real Arcade VF 改 #5

 前に改造したゲームキューブ用(といっても、Wii で使う)のアーケードスティック、久々に使おうとしたら動かなかった。どこか配線切れているんだろうけど、面倒になったので、この間見つけたライブラリを使ってArduino で組み替えてみた。ゲームキューブ用のコントローラの読み込みや、コントローラの代わりも出来る優れもののライブラリ。
参考リンク
 NicoHood / Nintendo Arduino 用 ゲームキューブ・ライブラリ
 裸のATmega8 を、外部クロック 16Mhz で動かす。電源は、ゲーム機側からの5V。データは、1ピンだけ、3.3Vらしいので、ロジックレベルコンバータを挟んだ。ボタン入力のピンも小細工せずに足りた。


 既にグチャグチャの配線を作り直すのは、新規に作るより大変。最初、動かなくてあせったが、クロック指定の Fuse の書き換えが出来ていなかった。
avrdude -p m8 -c usbtiny -D -u -U hfuse:w0xC9:m

 インジケータの2色LEDと、赤ボタン・オルタネイトスイッチを追加して、レバーでのアナログ入力(上下左右)に切り替えられるようにした。十字ボタンで入力できない場合に使う。

 前のゲームキューブの本物コントローラの基板を乗っ取るよりもスマート。使い道無く余っていた ATmega8 を有効利用できて良かった。ボタンが劣化しているので、そのうち、同時押しや、連射回路無しのシンプル版を、新たに作ることにしよう。

2021/04/12

rmx 電波式リモコン #12


 ATtiny・電池版の調子が良さそうだったので、より反応よくするため 8Mhz 版を作った。まだ、実験中だが、ひと月くらい電池が持てば十分だと思う。

 ひとまず、2.4GHz の無線リモコンとしては、これで一区切り。最終的には、実にシンプルな形となった。尤も、試行錯誤したうえでの結果であって、屍となった赤外線リモコンは、二十個近く。マイコンその他部品も、大分無駄にしてきたが、趣味として考えれば、それほど金がかかったわけでもないし、そのまま実用品なわけで。

 次は、ESP32 じゃない、Bluetooth デバイスをやろうと思う。
※ 技適マーク無しの無線デバイスの実験は、日本国外で行いましょう。