← UIAPduino WebHID Lab

HID Console

HID ProMicro CH32V003 / Tools → USB: Keyboard+Mouse+WebHID / Sketch: HidPrint.ino / Hid クラス コンソール出力モニタ & Recv 送信
⚠️ このページは Chrome または Edge でのみ動作します。
WebHID API は Firefox・Safari では利用できません。Chrome / Edge で開き直してください。

接続

未接続

※ Chrome / Edge のみ対応。接続後に UIAPduino の HID コンソール出力をここで受信できます。

HID コンソール hid.Print() / hid.Println() の出力

Arduino スケッチの hid.Print() / hid.Println() / hid.Clear() の出力をリアルタイムで表示します(EP3 Input Report, マーカー 0x50)。

送信 ブラウザ → UIAPduino(hid.Recv() で受け取り)

※ DEC モード: スペース区切りの 10 進数を入力(0〜255)。32 バイトを超えた分は無視されます。

ログ

スケッチソース — HidPrint

GitHub ↗

書き込み手順: Arduino IDE → sketches/HidPrint/HidPrint.ino / ボード: HID ProMicro CH32V003, Tools → USB: Keyboard+Mouse+WebHID

プロトコル仕様

UIAPduino ↔ ブラウザ間の HID通信仕様

Print(UIAPduino → ブラウザ)  Input Report, 8 bytes
  byte[0] = 0x50          マーカー
  byte[1] = flags         0x80=続きあり  0x04=クリア
  byte[2..7] = text       テキスト本体(最大 6 文字、残りは 0 埋め)
  ※ 改行は 0x0A をテキストに含めて送信

Ready(UIAPduino → ブラウザ)  Input Report, 8 bytes
  byte[0] = 0x53          マーカー(準備完了通知)
  byte[1..7] = 0x00       予約

接続通知(ブラウザ → UIAPduino)  Feature Report, 32 bytes
  byte[0] = 0x01          接続通知マーカー
  byte[1..] = 0x00       未使用
  ※ HID接続時にブラウザが送信。UIAPduino の WaitAvailable() が検出する

Recv(ブラウザ → UIAPduino)  Feature Report, 最大 32 bytes
  sendFeatureReport(0, Uint8Array[32])  ← JS
  WebHID.recv(buf, maxLen)              ← hid.Recv() のラッパー
プロトコル仕様
1. HID通信パケット定義
方向 種別 サイズ
UIAPduino → ブラウザ Input Report 8 bytes
ブラウザ → UIAPduino Feature Report 最大 32 bytes
マーカーバイト一覧
マーカー 名称 方向
0x50PrintUIAPduino → ブラウザ
0x51GetPos双方向
0x52WriteUIAPduino → ブラウザ
0x53ReadyUIAPduino → ブラウザ
0x01接続通知ブラウザ → UIAPduino
2. プロトコル仕様
Print(0x50
byte[0] = 0x50
byte[1] = flags  0x80=MORE(続きあり)  0x04=CLEAR(画面クリア)
byte[2..7] = テキスト(最大 6 文字、0x00 埋め)
※ 改行は 0x0A をテキストに含めて送信
※ 6 文字超は複数パケットに分割し MORE フラグで継続を示す
GetPos(0x51
【リクエスト】UIAPduino → ブラウザ
byte[0]=0x51  byte[1]=0x01  byte[2..7]=0x00

【レスポンス】ブラウザ → UIAPduino(Feature Report)
byte[0]=0x51  byte[1]=0x01
byte[2..3]=X座標(Little Endian, int16_t)
byte[4..5]=Y座標(Little Endian, int16_t)
Write(0x52
byte[0] = 0x52
byte[1] = flags  0x80=MORE(続きあり)
byte[2] = ペイロード長(0〜5)
byte[3..7] = バイナリペイロード
Ready(0x53
byte[0] = 0x53
byte[1..7] = 0x00
※ 任意使用。ブラウザはログ表示のみ
接続通知(0x01
byte[0] = 0x01
byte[1..] = 0x00
※ HID接続時にブラウザが送信。UIAPduino の WaitAvailable() が検出する
3. Hid クラス API
メソッド プロトコル 説明
Print(const char* s)0x50テキスト送信(改行なし)
Print(int v)0x50整数送信(改行なし)
Println(const char* s = "")0x50テキスト送信 + 改行(0x0A)
Println(int v)0x50整数送信 + 改行(0x0A)
Clear()0x50 CLEAR画面クリア
Write(const uint8_t* buf, uint8_t len)0x52バイナリ送信
Send(const uint8_t* buf, uint8_t len)Rawマーカーなし Raw 送信
Ready()0x53準備完了通知(任意)
Recv(uint8_t* buf, uint8_t maxLen)Feature Report 受信。戻り値: 受信バイト数
WaitAvailable(uint32_t timeoutMs = 0)Feature Report 到着まで待つ。データを消費しない。0 = 無限待ち
GetPos(int16_t& x, int16_t& y)0x51カーソル座標取得。500ms タイムアウト