HID (Human Interface Device)を使って、RapberryPi PicoをUSBマウスとしてパソコンに接続し、Arduino IDEにより開発したスクリプトにより、パソコン画面上のマウスカーソルを移動させます。RapberryPi Zero Wを使ったUSBマウスについては、「RapberryPi Zero WをUSBマウスに」を参照してください。
RapberryPi Picoとタクトスイッチの接続
タクトスイッチを押すことで、Raspberry Pi PicoをUSBマウスとします。次のようにタクトスイッチをRapberryPi Picoの「GPIO12」に接続し、10kΩでプルダウンします。
USBマウススクリプトの作成
USBマウススクリプトは、次のようにメニューから[ファイル | →「スケッチ例」→「Adafruit TinyUSB Library」 →「HID」にある 「hid_mouse」を用いて作成します。
USBマウススクリプトのコンパイル・実行
メニューから「ツール」 により次のように設定します。
メニューから「スケッチ」→「マイコンボードに書き込む」をクリックし、USBマウススクリプトをコンパイル・実行します。次のエラーメッセージが発生した場合、メニュー「ツール」 の「USB Stack」が「Adafruit TinyUSB」になっていることを確認してください。
30 | #error TinyUSB is not selected, please select it in Tools->Menu->USB Stack | ^~~~~ exit status 1 ボードRaspberry Pi Picoに対するコンパイル時にエラーが発生しました。
作成したUSBマウスの動作確認
タクトスイッチを押すごとに、パソコン画面上のマウスカーソルが右下に移動します。
パソコンでWindows 10の「設定」でマウスを確認すると、次のように「Pico」とマウスとして認識されています。
HIDによるデータ通信(2023/12/20追加)
スケッチ例を使ってHIDによるデータ通信を行います。
- 「ツール」→「ボード」→「ボードマネージャ」をクリックし、「Pico」と入力し、「Raspberry Pi Pico/RP2040」の最新版3.6.2をインストールします。
- データ転送スクリプトは、次のようにメニューから[ファイル | →「スケッチ例」→「Adafruit TinyUSB Library」 →「HID」にある 「hid_generic_input」を用いて作成します。
- 取得したデータ転送スクリプトをRaspberry Pi Picoに書き込みます。
- パソコン側のプログラムは「HIDSimpleFramework」のHost applicationを使用します。
- Host applicationプログラムを実行すると次の画面が表示され、「Open」ボタンを押すとRaspberry Pi PicoにHIDインタフェースで接続されて、定期的に「1」と「2」のバイトデータが転送されます。
- set_report_callback関数でパソコンからのデータを受け取り、usb_hid.sendReport関数を使用してエコーバックします。
スケッチ例「hid_generic_input」で使用しているリポートディスクリプタ「TUD_HID_REPORT_DESC_GENERIC_INOUT」は、次のような構成になっています。「hid_device.h」から引用しました。
// HID Generic Input & Output // - 1st parameter is report size (mandatory) // - 2nd parameter is report id HID_REPORT_ID(n) (optional) #define TUD_HID_REPORT_DESC_GENERIC_INOUT(report_size, ...) \ HID_USAGE_PAGE_N ( HID_USAGE_PAGE_VENDOR, 2 ),\ HID_USAGE ( 0x01 ),\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ),\ /* Report ID if any */\ __VA_ARGS__ \ /* Input */ \ HID_USAGE ( 0x02 ),\ HID_LOGICAL_MIN ( 0x00 ),\ HID_LOGICAL_MAX ( 0xff ),\ HID_REPORT_SIZE ( 8 ),\ HID_REPORT_COUNT( report_size ),\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ /* Output */ \ HID_USAGE ( 0x03 ),\ HID_LOGICAL_MIN ( 0x00 ),\ HID_LOGICAL_MAX ( 0xff ),\ HID_REPORT_SIZE ( 8 ),\ HID_REPORT_COUNT( report_size ),\ HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ HID_COLLECTION_END \