ラベル nrf5x の投稿を表示しています。 すべての投稿を表示
ラベル nrf5x の投稿を表示しています。 すべての投稿を表示

2022/12/27

ワイヤレス温度計 #4


 デスクトップガジェットに、ワイヤレス温度計の受信機能を取り込んだ。2つのBLEデバイスからのデータを受信する度に、MYSQL データベースを更新し、温度とバッテリ残を表示する。

 データベースに記録しているので、適当なグラフ表示のソフトで、温度変化も読み取れる。BLEのデータ取得は、仕組み的にキッチリとした時間では取れない。数秒毎のランダムなタイミングとなる。勝手に発信し、勝手に受信しているのでそうなる。



 ESP32 の受信デバイスも、2個分の温度表示出来るようにした。こちらは、PCは関係無く、電源があれば動く。スマホとかの充電ケーブルでよい。

 本格的に温度の記録をとりたいなら、ESP32 からデータベースに接続するのが普通かもしれない(そういうIoT向けのサービスが既にある)。でも、やる気はしないな。既にファイルサーバを動かしてるとか、省電力PCをローカルに用意できるなら、PC上で完結したほうがトラブルは少ないよね、たぶん。

2022/12/21

ワイヤレス温度計 #3

 Delphi の BLEが不安定すぎだし、RSSI 取得できないし。何気に検索したら、SimpleBLE Library というのを、パスカル向けに変換してくれてる人がいた。まぁ、これはこれで、生のアドバタイズ データにアクセス出来ない?のがイマイチだが、一応動作はする。

 アドバタイズ に、ADタイプ 0xFF の Manufacturer Specific Data に自分で使うデータを入れとけば、SimpleBlePeripheralManufacturerDataGet() で読み込める。


参考リンク
 Pascal Bindings For SimpleBLE Library Lazarus でも使える

2022/10/16

nRF52 Arduino

 今までやってきた無線デバイスは、nRF51822 + sandeepmistry ライブラリだったが、nRF52840 は、Adafruit のライブラリを使う。nRF52832 は、どちらも使える。nRF52832 は、nRF51822 の上位版で、nRF52840 は、さらに、USBに対応している。無線だけじゃなく、有線の HIDデバイスを作りたいなら、こちらを選択。
参考リンク
 Arduino Core for Adafruit Bluefruit nRF52 Boards nRF52832 / nRF52840 ライブラリ
 Adafruit nRF52 Bootloader EBYTEのもいつのまにか追加されてる
 ドングルの使い勝手がいいのだが、技適有りだとRAYTAC MDBT50Q-RX ぐらいしか見ない気がする。でも、あれは、ハード的な追加は出来ないと思う。2000円ほどの、Seeed Studio XIAO nRF52840が、現実的かな。

 技適無しなら、AliExpress で買えるが、電子部品全般に高騰していて割安感はあまり無い。安いうちに、EBYTE のドングルを沢山買っておくんだった。


 自作無線デバイスのレシーバ側、ATMega32u4 + nRF24 を、nRF52840 に置き換えるのに使いたい。作業PCには、時計機能、HTPCには、赤外線機能、それぞれ、32u4 のでいいが、他のPCは、無線通信だけ出来ればいいから、ドングル一つで済む nRF52840 が最適。ブザーだけは、追加した。

 RAW-HID は、Adafruit のライブラリだと、hid_generic_inout という名前。未だよくわかっていないが、Delphi 側アプリと、通信できるのは確認した。
uint8_t const desc_hid_report[] =
{
TUD_HID_REPORT_DESC_GENERIC_INOUT(64)
};

Adafruit_USBD_HID usb_hid(desc_hid_report, sizeof(desc_hid_report), HID_ITF_PROTOCOL_NONE, 2, true);

 BLE は、今のところ予定なし。Bluetooth は、僕の信頼度低し。
※ 技適マーク無しの無線デバイスの実験は、日本国外で行いましょう。

2022/09/10

スーパーファミコン コントローラ・改(2.4Ghz 無線化)#3


 SELECTボタンの下に、新規に2つボタンを追加した。全てのボタンは、ゲームコントローラのボタン入力となる。

 Windows 7 では、問題なかったのに、Windows 10 でダメだったりするのは、Pro Micro もどきのレシーバと、Windows側の制御ソフトが上手く通信できていないのが原因みたい。だが、デバイス・ドライバをいじってたら、なぜか動くようになってしまった。要観察だ。

 ハード的にも、Arduino デバイスの USB-HID の仕様が完全じゃないのかも。ゲームコントローラのテスト画面が表示されないし、スリープ(使っていないが)復帰後にデバイスの認識が変になったりもする。複合デバイスは、色々と複雑なのだろう。
※ 技適マーク無しの無線デバイスの実験は、日本国外で行いましょう。


追記 2022-09-12

 SERIAL+KEYBOARD+GAMEPAD+RawHID の4つを抱えた複合デバイスだが、正しく動くようになったかもしれない。SERIALは不要なのだが、勝手に出てくる。無効に出来れば、さらに、GAMEPADを増やせるのかも? これは、ライブラリではなく、Arduino Core 側の問題らしい。
参考リンク
 NicoHood / HID API Documentation 複合デバイスを作るときは要注意

2022/09/04

スーパーファミコン コントローラ・改(2.4Ghz 無線化)#2


 前回の続き、基板を割ってしまったので、新しくジャンクなコントローラを調達した。近所だと、汚いので330円。ちょっとましなのが、550円だった。昔は、110円で 買えてたのに。妙に腹立たしくなったので、オークションでセットのを落札した。黄色く日焼けした奴は、割と安く買える。が、状態が悪く使えないのもあった。

 IC チップを外したパッドが、各ボタンにつながっているので、そこから、マイコンのピンに直結。処理はレシーバ側がするので、送信側(子機)は、キーボードだろうと、リモコンだろうと基本的にはボタン情報を送るだけ。

 ジャンクなコントローラは、導電ゴムが劣化してそうなので、ゴム面の小さなSELECT/START以外のボタンに、銅箔テープを貼ってみた。剥がれそうな気もするがどうか。


 組み立て後のテストでは、ジョイスティック版と同じプログラムでも快調に動いてる気がする。しばらくテストだね。
※ 技適マーク無しの無線デバイスの実験は、日本国外で行いましょう。

2022/08/14

スーパーファミコン コントローラ・改(2.4Ghz 無線化)#1


 ジョイスティックの無線化とやってることは同じ。ただ、Lipo バッテリ仕様なので、部品が増えた上に、狭いところに押し込めないといけないので、作業は大変。写ってないが、電源スイッチと、3V変換も必要。


 充電モジュールは、入力をDCジャック式にして、基板上のLEDを2色LEDに交換した。デフォルトでは、1A仕様なので、400mA のバッテリ用に、基板の抵抗(R3)を 3kΩに変えておいた。

  他のデバイスも、Lipoバッテリでいいんだけど、残量の取得方法が分からないんだよね。


追記 2022-08-23

 3ピンのSWD 書き込み端子を追加した。何やかんやで、ファームの変更で、毎回バラすのはマヌケだからな。

 実際のマイコンの電圧しか測れなくても、3.0V のLDO を使っているので、それ以下の電圧になったら(昇圧できるわけじゃないから)、充電しなきゃってことでいいのかも。結構、燃費は良いはずなので、キーボードも、単4電池ではなく、Lipo 仕様の方が良いような気もしてきた。まぁ、このコントローラがどれくらいで、充電必要になるかはチェックしてからだけど。
※ 技適マーク無しの無線デバイスの実験は、日本国外で行いましょう。


追記 2022-08-29
 いまいち、調子悪い。プログラムはジョイスティック版と同じ。違いは、リポバッテリなのと、メカニカルじゃない導電ゴムのスイッチって所。チャタリングのチェックを増やしてみたけど、どんなもんか。とかなんとか言ってるうちに、アンテナの周りのいらない部分を削ろうとして、基板割った。ハイ、終了。


2022/08/08

ソウルキャリバーII スティック・改(2.4Ghz 無線化)

 自作無線デバイス、キーボード3種に、リモコンと、今度は、ゲームコントローラ。デバイスが増えても、レシーバは、一つだけ。USBポートを節約出来るのがポイント。マウスは作るつもりが無いので、無線 HIDデバイスとしては、予定分完了かな。新たな機能は、レシーバ(ATMega32u4)のプログラム容量的に厳しい。

 元は、プレステ2のコントローラ。基板上のマイコンチップを剥がして、nRF51822 に、各ボタンを配線し直した。レバーもボタン扱い。4+6+2=12ボタン仕様。

 電源は、単3電池にして、スイッチ(左上角の黒ボタン)を新設した。キーボードと同じように、起動時に1~6のレシーバの切り替えするのに必要。ついでに、電圧も測定される。

 ゲーム用だと、遅延が気になるところ。仕組み的には、マトリクスの無いキーボードみたいなものだが、しばらくテストしてみない事には判断付かないな。
参考リンク
 mysensors 2.4Ghz 無線ライブラリ
 Arduino HID Project レシーバ側のHIDデバイス・ライブラリ
※ 技適マーク無しの無線デバイスの実験は、日本国外で行いましょう。

2021/08/23

EBYTE E104-BT5040U nRF52840 USB ドングル

 Nordic のソフトで、BLEデバイスのテストに使えて中々便利なモジュール。2つあるので、1つは、ファームを書き換えて、先日、RP Pico で使った CircuitPython仕様にしてみた。

 とりあえず、Lチカだよな、と試し始めたが、LED2 がおかしい。PDF の仕様表みるに、Nordic の USB ドングルとコンパチの 3色LED のはず。LED の足に直接電池をつなげると光る、んー、これ向きおかしくね?

 一度、LED を外して逆に付けてテストすると、キチンと3色光るようになった。LEDの仕様違いか、単なる付け間違いか分からないが、緑のポッチがある側が、内側(USB端子側)になるのが正しい向きと思われる。作業途中、LEDをピンセットでハネ飛ばして、探すのに時間がかかった。チップ部品のハンダし直しとか勘弁して欲しい。

 nRF52840 のドングルって、USB も使えて、BLE も出来る。RP Pico や、Pro Micro よりも、何気に高性能だよな。CircuitPython は、環境構築が簡単。コンパイルも不要だし、書き込みに失敗することも無い。インタプリタなんだろうけど、速度的に問題ないのかな?


追記 2021-08-29
 Nordic のドングル(PCA10059)のボード情報を追加すれば、Arduino IDE + adafruit library で、使えるようだ。僕が作業している 無線キーボードのレシーバみたいなのも、ドングル一つにまとめられそう。

 子機(nRF51822)→親機(nRF52840 ドングル)のすっきり仕様。キーボード以外のデータは、RAW-HID ではなく、シリアルポートで通信。Pro Micro は、もういらない!?

 まぁ、ドングルじゃなくても構わないから、nRF52840 ひとつで済ませるべきだな。安定性以前に、プログラムの修正とか面倒だし。
※ 技適マーク無しの無線デバイスの実験は、日本国外で行いましょう。

2021/08/18

nRF5x + 32u4 キーボード・レシーバ


 OLED の小さなディスプレイは、離れたところからだと見えないので、7セグメントLEDに変更。子機側の、バッテリー電圧と、レイヤ切替、ついでに、時計になるよう RTC も追加。結局、前に作ったHTPC 用のリモコンレシーバと似たような形に。BLEキーボードに時計は付かないから、少々拡張機能を持たせられるのが、レシーバ型の利点。

 nRF5x の電波は、距離よりも、障害物に弱いように感じる。ワイヤレスのキーボードと言えど、PCの近くで使うわけで、レシーバの設置位置を間違えなければ実用範囲と思う。ケーブルが無いだけで、取り回しがずいぶん楽になる。

 実際のキーボードのエミュレート部分は、Pro Micro もどきか、RP Pico のどちらが安定するか、しばらく使ってみないとね。送信側と違って、狭いスペースに詰め込む必要もないので、動くのならこのままでも構わないし。


追記 2021-08-21
 裸のままだと、ケーブルが抜けそうなので、ユニバーサル基板にのっけて、ぶら下げられるようにした。

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

2021/07/11

nRF5x キーボードもどき、その2


 Windows 側で処理していたキーボードの処理を、ATmega32u4 上で行う。とうぜん、USB-HID のキーボードとしてハードウェア認識される。アプリによって入力できない、なんてことも無くなる。

 汎用性を無視して、マクロとかも Arduino プログラム内でゴリゴリ出来る。ま、ATmega32u4 は、あまりメモリが無いから複雑な処理は難しいけど。

 ネイティブなキー入力とは別に、Windows上でも自由に割り当てられるようにする。rmx は、KODI用だったが、若干、範囲が広がって、複数デバイスを一括管理するリモートセンタ的な役割を担うことになる。

 本来なら、BLEデバイスで統一出来ればいいのだけど、Win7のPCも現役だし、レシーバ・デバイス式も現実的な選択かと。
※ 技適マーク無しの無線デバイスの実験は、日本国外で行いましょう。

2021/05/06

Bluetooth LE の消費電流

 EBYTE の nRF51822 モジュールは、電波発信せずにループさせると、4mA程度で動いている。スリープらしきコードを埋め込むと、なるほど下がったが、それでも、1mA台で、これでは、ボタン電池で何ヶ月も持つなんてことはない。なんか細かいことをしないと、きちんと止まらないのかな。いかんせん、Arduino で使うのはそもそもイレギュラーなのか資料が少ない。

 接続した後は、ビビビ、と剣山みたいな通信が始まる。データを送っても極端に消費は増えないが、ビビビは切断まで続く。待ち時間は、徹底的に消費を抑えるのが、BLEデバイスなんだな。

EBYTE E73-2G4M04s1D nRF51822 SoC

 ちなみに、前に紹介したBLEモジュールで試してみると、なるほど、スリープ時には、かなり消費が少ない。
JDY-19 BLE 4.2 モジュール

 きちんとスリープが出来るコードが書けないと、話にならない。うーん、何とかなりそうにないな。


追記 2021-05-10

 プログラムを書き込んだ後、一度リセットしないと、デバッグモード?とかのままで、余計に電気が流れるらしい。電源にスイッチを挟んで、リセットの代わりにした。立ち上げ直すと、0mA付近になった。ま、テストだけなので、実際に動かすとどうかは分からないが。

 BLE が低消費電力と言われているのは、主に、未接続のアドバタイズ状態のことを言っているのであって、接続し余計な通信し続けるならば、必ずしも低消費とは言えないだろう。ボタン電池で、何ヶ月も動く!っていったところで、要は発信時間、つまり電気消費を、ひたすら少なくするって話。

 リアルタイム性が必要なデバイスは、接続した後、リンクが切れないよう最低限の通信を定期的に行うスリープを使い、割り込みで処理するのだろう。

 非リアルタイムデバイスの場合は、アドバタイズデータ自体に、データも埋め込めばいい。アドバタイズデータを受信するだけなら、接続しなくても済む。
※ 技適マーク無しの無線デバイスの実験は、日本国外で行いましょう。