Raspberry Pi Pico W はBluetoothのセントラルとしてHID(Human Interface Device)であるキーボードやマウスをつなぐ事ができました。
Raspberry Pi Pico W にBluetoothのキーボードとマウスをつないでみた

もう一台の Pico W でBluetoothのHIDとしてキーボードを作れば自作コントローラーとして便利なものができるのではないかと試しています(^^)。


今回の主な目標はpico W → pico W のデータ転送をBluetoothで行う事ですが,windowsやMacともつないでみました。




ソフト的にはarduino-picoのライブラリからペリフェラルは"KeyboardBLE"ライブラリ,セントラルは"BluetoothHIDMaster"ライブラリを使っています。


何とか動いてセントラルのpico W が受け取ったデータをシリアルモニタに出力したところですV(^^)。






Windowsにもキーボードとしてつないでみました。
キーボード扱いなので,普通のノートパッドに書き込めます。






Macにもつないでテキストエディタに出してみましたが,例によって改行コードが合いません。また,英語キーボードと思っているようで "" が "”になっていました,,。






ペリフェラル側のキーボードのプログラムです。
よくできたライブラリで短く書けます。

ただ,データを"KeyboardBLE.write(データ)"で送る際にデータをアスキーなど数値にすると,漢字になったり,出なかったりと変になるので一旦文字キャラにして一文字ずつ送るようにすると落ち着きました。


/* BLE Keyboard test */
// Reference : KeyboardSerial-KeyboardBLE-BLESerial

#include <KeyboardBLE.h>

void setup() {
 // initialize control over the keyboard:
 KeyboardBLE.begin();
}

void loop() {

 for (int sample=0; sample <10; sample++){
   while (BOOTSEL==0) {    // push BOOT_button to start
     delay(1);
   }
   int sData=10+sample;    // sample data
   String string_send = "Data\'"+String(sData, DEC)+'\n';
   send_BLE(string_send);
 }

} // loop end

void send_BLE(String ss){
 for (int i=0; i < ss.length(); i++){
   KeyboardBLE.write(ss.charAt(i));
 }
}




以上,少々ハマりながらですが,PicoからPicoへのデータ送信はなんとかできました(^^)。

ま,セントラルがPCであればデータ送信はSerialBTの方が安定しているでしょうし,ゲームのコントローラを目指すならジョイスティック系のライブラリもあるのでそちらが有望かもしれません。

ただ,PicoではESP-NOWのようなシンプルな1対1交信が現状ではありません。私の今の知識で扱える一方通行の通信としてコントローラの自作などには便利に使えそうだと思っています。


参考(キーボードのコードと字バケ問題などの解説です)
Arduino HID-Projectを日本語キーボードに対応する (Qiita @nak435, Jan/2023)