← UIAPduino WebHID Lab

HID-Serial Bridge

UIAPduino WebHID ↔ Web Serial(com0com 仮想 COM ペア)ブリッジ  /  Chrome / Edge 専用
⚠️ このページは Chrome または Edge でのみ動作します。
WebHID / Web Serial API は HTTPS または localhost が必要です。
📚 セットアップガイド — はじめて使う方へ
1
com0com をダウンロード・インストールする

com0com は Windows 用の仮想 COM ポートペアドライバです。
一方のポートに書き込んだデータがもう一方から読み出せる「ヌルモデム」をソフトウェアで実現します。

SourceForge のプロジェクトページからインストーラをダウンロードしてください。
「com0com - Signed」(署名済み版)を選ぶと、Windows のテスト署名モードを有効にする必要がなく、そのままインストールできます。

⚠️ インストールには 管理者権限 が必要です。インストーラを右クリック →「管理者として実行」で実行してください。
2
仮想 COM ペアを設定する(Setup GUI)

スタートメニュー → com0comSetup を起動します。
インストール直後は CNCA0 ↔ CNCB0 というペアが1つ作られています。

両ポートの 「use Ports class」 にチェックを入れます。
これにより Windows が自動で COM 番号を割り当て、Arduino IDE シリアルモニタ/シリアルプロッタ・TeraTerm・Python・C# など一般アプリが「普通の COM ポート」として認識できるようになります。

【Setup GUI の操作手順】 1. 左側ポートの「use Ports class」にチェック ✔ 2. 右側ポートの「use Ports class」にチェック ✔ 3. 画面下の「Apply」ボタンをクリック 4. ツリーに「COMx」「COMy」と表示されれば完了
com0com Setup GUI
▲ Setup GUI の画面例。両側に「use Ports class」チェックが入り、ツリーに COM8・COM9 が表示されている状態
💡 割り当てられた COM 番号は Windows が自動で決めます。そのまま使うのが推奨です。
ツリー表示や デバイスマネージャー(devmgmt.msc)→「ポート (COM と LPT)」で確認できます。
このページの「Connect Serial」で選ぶのがブリッジ側(一方)、通信アプリで開くのがもう一方です。
⚠️ アプリが COM ポートを開いたままにしていると、次の接続時にデータが残留することがあります。
アプリを終了してから接続し直してください。
3
UIAPduino にスケッチを書き込む

このページ下部の 「スケッチソース」 からスケッチをダウンロードし、Arduino IDE で UIAPduino に書き込みます。
HID受信モード に合わせてスケッチを選んでください。

【Protocol モード(推奨・デフォルト)】 → HidMonitorTest ボード : HID ProMicro CH32V003 Tools → USB : WebHID Only 動作 : WaitAvailable() でブラウザ接続待ち → タイトル表示 → カウンタ送信 用途 : Arduino IDE シリアルモニタで UIAPduino の出力を確認する
【Raw Binary モード】 → HidBridgeTest ボード : HID ProMicro CH32V003 Tools → USB : Keyboard+Mouse+WebHID 動作 : 受信バイトをそのまま Raw エコーバック 用途 : HID 通信の疎通確認・低レベルデバッグ
💡 書き込み後、UIAPduino を USB から一度抜き差しすると確実に再接続されます。
スケッチソースは「HID受信モード」ボタンで切り替えると、対応スケッチに自動で切り替わります。
4
このページでブリッジを開始する

Chrome または Edge で開いたこのページで、次の順に操作します。

① Connect HID
UIAPduino を選択
② Connect Serial
COM8 を選択
③ Bridge 自動開始
Running ⚫
💡 HID と Serial の両方が接続されると、ブリッジは自動でスタートします。
Monitor は通常 OFF のままで問題ありません。確認したいときだけ ON にしてください。
5
COMモニタアプリから COM9 に接続する

TeraTerm・Arduino IDE シリアルモニタ・Python・C# など、シリアル通信ができるアプリで COM9(ペアの反対側)を開きます。

ボーレート : 115200(または任意) データビット: 8 / パリティ: なし / ストップビット: 1 / フロー制御: なし

◆ Protocol モード(HidMonitorTest スケッチ)の場合

UIAPduino が起動し、ブラウザが HID 接続すると自動的にタイトルヘッダとカウンタが送られてきます。
COMモニタ側(COM9)には、UIAPduino が hid.Println() で送った文字列がそのまま表示されます。
Arduino IDE のシリアルモニタを使えば、UIAPduino のデバッグ出力を確認できます。

UIAPduino
hid.Println()
HID通信
0x50 Input Report
WebCom通信
COM8 TX
COMモニタ
COM9 受信

◆ Raw Binary モード(HidBridgeTest スケッチ)の場合

COMモニタアプリから COM9 にデータを送信すると、UIAPduino を経由してそのままエコーバックされます。
HID 通信の疎通確認や低レベルデバッグに使います。

COMモニタ
COM9 送信
WebCom通信
COM8 RX
HID通信
Feature Report
UIAPduino
Raw エコーバック
HID通信
Input Report
WebCom通信
COM8 TX
COMモニタ
COM9 受信
⚠️ Raw Binary モードでは HID の 0x00 パディングもそのまま WebCom通信に流れます。テキスト表示を期待する場合は Protocol モードを使ってください。
▶ Status
WebHID
Web Serial
HID Disconnected
Serial Disconnected
Bridge Stopped
Mode Protocol (0x50/0x52)
🔌 HID Device
📌 Serial Port
baudRate: 115200 / 8N1 / flowControl: none

com0com でペアを作成し、ブリッジ側(例: COM8)をここで選択。外部アプリは反対側(例: COM9)を開いてください。

⚙ Bridge Control
HID受信モード: — UIAPduino からの HID通信受信にのみ適用

HID通信 → WebCom通信: HID受信モードで選択。Raw Binary は全バイト転送(HidBridgeTest 向け)。Protocol は 0x50/0x52 をデコードして転送(hid.Print / hid.Write 系スケッチ向け)。
WebCom通信 → HID通信: 常に Raw。受信バイトを 32 バイト Feature Report に詰めて送信(30ms タイムアウト付き)。
Monitor OFF にするとデータ表示を止め、ブリッジ処理に専念します。SYSTEM / ERROR ログは常時表示。

📜 Data Monitor
■ HID RX ■ HID TX ■ SERIAL RX ■ SERIAL TX ■ SYSTEM ■ ERROR
⌨ Manual Send
Send to HID (Feature Report ID=0, 32 bytes)

32 bytes 未満はゼロパディング。32 bytes 超過はエラー。

Send to WebCom

入力バイト列をそのまま WebCom通信へ送信。

💾 スケッチソース — HidMonitorTest
GitHub ↗

書き込み手順: HidBridgeTest.ino / Hid.h / Hid.cpp を同じフォルダに置いて Arduino IDE で書き込む  /  ボード: HID ProMicro CH32V003, Tools → USB: Keyboard+Mouse+WebHID
起動時に hid.Ready()(0x53)で準備完了を通知。受信した Feature Report を hid.Send() で Raw エコーバック。
ブリッジを Raw Binary モードで使用してください。COMモニタ(TeraTerm 等)から送ったデータがそのまま返ってきます。

プロトコル仕様
1. 通信インターフェイス定義
用語 区間 技術
HID通信 UIAPduino ↔ ブラウザ USB HID(WebHID API)
WebCom通信 ブラウザ ↔ 仮想COMポート Web Serial API
VirtualCOM通信 仮想COMペア内部(COM8 ↔ COM9) com0com
COMモニタ通信 仮想COMポート ↔ モニタアプリ シリアル通信
2. HID通信パケット定義
方向 種別 サイズ
UIAPduino → ブラウザ Input Report 8 bytes
ブラウザ → UIAPduino Feature Report 最大 32 bytes
マーカーバイト一覧
マーカー 名称 方向
0x50PrintUIAPduino → ブラウザ
0x51GetPos双方向
0x52WriteUIAPduino → ブラウザ
0x53ReadyUIAPduino → ブラウザ
0x01接続通知ブラウザ → UIAPduino
3. プロトコル仕様
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
※ 任意使用。ブラウザはログ表示のみ。WebCom通信には転送しない
接続通知(0x01
byte[0] = 0x01
byte[1..] = 0x00
※ HID接続時にブラウザが送信。UIAPduino の WaitAvailable() が検出する
4. ブリッジ転送仕様
HID通信 → WebCom通信(モード選択)
パケット Protocol モード(デフォルト) Raw Binary モード
0x50テキストを収集し WebCom通信へ転送全バイトをそのまま転送
0x52byte[2] のサイズ分を WebCom通信へ転送
0x53ログのみ。転送しない
その他無視
WebCom通信 → HID通信(常に Raw)
32 bytes 以上 即 Feature Report 送信
32 bytes 未満 30ms タイムアウト後ゼロパディングして送信
5. 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 タイムアウト