このドキュメントでは、各OS環境で仮想シリアルポートペアを作成する方法を説明します。
仮想シリアルポートペアを使用することで、実際のハードウェアデバイスなしでシリアル通信のテストができます。
serdevmockは起動時に自動的に仮想ポートツールのインストール状況を検知し、未インストールの場合は警告とインストール手順を表示します。
構成:
アプリケーション → ポートA ← [仮想ペア] → ポートB ← serdevmock
- アプリケーションは
ポートAに接続 - serdevmockは
ポートBに接続 - 両者は仮想的にペアリングされており、データが相互に転送される
- com0com公式サイトから最新版をダウンロード
- インストーラを実行
- インストールウィザードに従ってインストール
- 「Setup Command Prompt」を管理者として起動
- 以下のコマンドを実行:
install PortName=COM10 PortName=COM11これでCOM10とCOM11がペアとして作成されます。
python -c "import serial.tools.list_ports; [print(f'{p.device}: {p.description}') for p in serial.tools.list_ports.comports()]"出力例:
COM10: com0com - serial port emulator (COM10)
COM11: com0com - serial port emulator (COM11)
# serdevmockを起動
serdevmock --protocol uart --port COM11 --config examples/echo_mode_win.json
# アプリケーションはCOM10に接続remove 0詳細はQUICKSTART_WINDOWS.mdを参照してください。
# Debian/Ubuntu
sudo apt-get install socat
# RHEL/CentOS/Fedora
sudo yum install socat
# Arch Linux
sudo pacman -S socatsocat -d -d pty,raw,echo=0 pty,raw,echo=0出力例:
2024/12/02 10:00:00 socat[12345] N PTY is /dev/pts/2
2024/12/02 10:00:00 socat[12345] N PTY is /dev/pts/3
この例では、/dev/pts/2と/dev/pts/3がペアとして作成されます。
注意: socatを終了すると仮想ポートも削除されます。
# バックグラウンドで実行
socat -d -d pty,raw,echo=0,link=/tmp/vport1 pty,raw,echo=0,link=/tmp/vport2 &
# プロセスID確認
echo $!これで/tmp/vport1と/tmp/vport2という名前でアクセスできます。
ターミナル1: socatを起動
socat -d -d pty,raw,echo=0 pty,raw,echo=0
# 出力されたポート名をメモ(例: /dev/pts/2 と /dev/pts/3)ターミナル2: serdevmockを起動
serdevmock --protocol uart --port /dev/pts/3 --config examples/echo_mode.jsonターミナル3: アプリケーションを実行
# アプリケーションは /dev/pts/2 に接続# バックグラウンドプロセスを停止
kill <プロセスID>
# または、フォアグラウンドの場合
Ctrl+CHomebrewを使用してインストール:
brew install socatLinuxと同じ方法で作成できます:
socat -d -d pty,raw,echo=0 pty,raw,echo=0出力例:
2024/12/02 10:00:00 socat[12345] N PTY is /dev/ttys002
2024/12/02 10:00:00 socat[12345] N PTY is /dev/ttys003
より使いやすい名前を付けることもできます:
socat -d -d pty,raw,echo=0,link=/tmp/vport1 pty,raw,echo=0,link=/tmp/vport2ターミナル1: socatを起動
socat -d -d pty,raw,echo=0 pty,raw,echo=0
# 出力されたポート名をメモ(例: /dev/ttys002 と /dev/ttys003)ターミナル2: serdevmockを起動
serdevmock --protocol uart --port /dev/ttys003 --config examples/echo_mode.jsonターミナル3: アプリケーションを実行
# アプリケーションは /dev/ttys002 に接続| 項目 | Windows (com0com) | Linux/macOS (socat) |
|---|---|---|
| インストール | 1回のみ | 1回のみ |
| ポート作成 | 永続的 | socatプロセス実行中のみ |
| ポート名 | COM10, COM11など | /dev/pts/N, /dev/ttysNなど |
| 管理者権限 | インストール時のみ | 不要 |
| 自動起動 | 可能 | systemd/launchd設定が必要 |
- デバイスマネージャーでポートが認識されているか確認
- 他のアプリケーションがポートを使用していないか確認
- com0comを再インストール
# ユーザーをdialoutグループに追加(Linux)
sudo usermod -a -G dialout $USER
# 再ログインが必要- socatが実行中か確認
- 正しいポート名を使用しているか確認
-d -dオプションでデバッグ出力を確認pty,raw,echo=0の設定を確認
/etc/systemd/system/socat-vport.service:
[Unit]
Description=Virtual Serial Port Pair
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/socat -d -d pty,raw,echo=0,link=/tmp/vport1 pty,raw,echo=0,link=/tmp/vport2
Restart=always
[Install]
WantedBy=multi-user.target有効化:
sudo systemctl enable socat-vport
sudo systemctl start socat-vport~/Library/LaunchAgents/com.user.socat.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.socat</string>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/bin/socat</string>
<string>-d</string>
<string>-d</string>
<string>pty,raw,echo=0,link=/tmp/vport1</string>
<string>pty,raw,echo=0,link=/tmp/vport2</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>有効化:
launchctl load ~/Library/LaunchAgents/com.user.socat.plist各OSで仮想シリアルポートペアを作成することで、実際のハードウェアなしでシリアル通信のテストが可能になります。
- Windows: com0comで永続的なポートペアを作成
- Linux/macOS: socatで一時的または永続的なポートペアを作成
これらのツールとserdevmockを組み合わせることで、クロスプラットフォームなシリアルデバイスエミュレーション環境が構築できます。