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によるデータ通信を行います。

  1. 「ツール」→「ボード」→「ボードマネージャ」をクリックし、「Pico」と入力し、「Raspberry Pi Pico/RP2040」の最新版3.6.2をインストールします。
  2. データ転送スクリプトは、次のようにメニューから[ファイル | →「スケッチ例」→「Adafruit TinyUSB Library」 →「HID」にある 「hid_generic_input」を用いて作成します。
  3. スケッチ例「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 \
    
  4. 取得したデータ転送スクリプトをRaspberry Pi Picoに書き込みます。
  5. パソコン側のプログラムは「HIDSimpleFramework」のHost applicationを使用します。
  6. Host applicationプログラムを実行すると次の画面が表示され、「Open」ボタンを押すとRaspberry Pi PicoにHIDインタフェースで接続されて、定期的に「1」と「2」のバイトデータが転送されます。
  7. set_report_callback関数でパソコンからのデータを受け取り、usb_hid.sendReport関数を使用してエコーバックします。