com0comなどの外部ツールを使わずに、TCPソケット経由でserdevmockを使用する方法です。
serdevmockをTCPサーバーとして起動し、テスト対象アプリケーションはTCPクライアントとして接続します。pyserialのsocket://プロトコルを使えば、既存のシリアル通信コードをほぼ変更せずに使用できます。
serdevmock --protocol uart --port socket://0.0.0.0:5000 --config examples/at_command_socket.jsonsocket:// で始まるポート名を指定すると、serdevmockは自動的にTCPサーバーとして起動します。
import serial
# socket://プロトコルを使用
ser = serial.serial_for_url('socket://localhost:5000', timeout=1)
# 通常のシリアル通信と同じように使用
ser.write(b'AT\r\n')
response = ser.read(100)
print(response)
ser.close()import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 5000))
sock.send(b'AT\r\n')
response = sock.recv(1024)
print(response)
sock.close()- ✅ 外部ツール不要
- ✅ 完全なマルチプラットフォーム対応
- ✅ ネットワーク越しのテストも可能
- ✅ 複数クライアントの接続も可能(将来的に)
⚠️ 実際のシリアルポートではないため、一部のハードウェア依存機能は使えない⚠️ テスト対象コードがsocket://プロトコルに対応している必要がある
{
"port": "socket://0.0.0.0:5000",
"baudrate": 9600,
"data_bits": 8,
"parity": "N",
"stop_bits": 1,
"echo_mode": true,
"response_rules": []
}{
"port": "socket://0.0.0.0:5000",
"baudrate": 9600,
"data_bits": 8,
"parity": "N",
"stop_bits": 1,
"echo_mode": false,
"response_rules": [
{
"request_pattern": "AT",
"response_data": "OK\r\n",
"delay_ms": 100
}
]
}別のポート番号を使用してください(例: 5001, 5002など)
Windowsの場合、Pythonへのアクセス許可を設定してください。