※ Chrome / Edge のみ対応。接続後に UIAPduino の HID コンソール出力をここで受信できます。
Arduino スケッチの
hid.Print() /
hid.Println() /
hid.Clear()
の出力をリアルタイムで表示します(EP3 Input Report, マーカー 0x50)。
※ DEC モード: スペース区切りの 10 進数を入力(0〜255)。32 バイトを超えた分は無視されます。
書き込み手順: 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() のラッパー
| 方向 | 種別 | サイズ |
|---|---|---|
| UIAPduino → ブラウザ | Input Report | 8 bytes |
| ブラウザ → UIAPduino | Feature Report | 最大 32 bytes |
| マーカー | 名称 | 方向 |
|---|---|---|
0x50 | UIAPduino → ブラウザ | |
0x51 | GetPos | 双方向 |
0x52 | Write | UIAPduino → ブラウザ |
0x53 | Ready | UIAPduino → ブラウザ |
0x01 | 接続通知 | ブラウザ → UIAPduino |
0x50)byte[0] = 0x50 byte[1] = flags 0x80=MORE(続きあり) 0x04=CLEAR(画面クリア) byte[2..7] = テキスト(最大 6 文字、0x00 埋め) ※ 改行は 0x0A をテキストに含めて送信 ※ 6 文字超は複数パケットに分割し MORE フラグで継続を示す
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)
0x52)byte[0] = 0x52 byte[1] = flags 0x80=MORE(続きあり) byte[2] = ペイロード長(0〜5) byte[3..7] = バイナリペイロード
0x53)byte[0] = 0x53 byte[1..7] = 0x00 ※ 任意使用。ブラウザはログ表示のみ
0x01)byte[0] = 0x01 byte[1..] = 0x00 ※ HID接続時にブラウザが送信。UIAPduino の WaitAvailable() が検出する
| メソッド | プロトコル | 説明 |
|---|---|---|
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 タイムアウト |