シリアル通信するプログラムのテスト用に、ローカルで完結して仮想的なシリアル通信をする方法を探した。今のところ、そういう定番アプリを使うのがベストのようだ。
マイコン系のボードやIoT関連の機器を扱っているとシリアルポートを使ったプログラムを書くことがある。最近はRaspberryPiにROHMのBP35C2というWi-SUNという通信規格に対応したUSBドングルを使っていて、スマートメータと通信して消費電力などを取得することができる。(電力会社とメータの通信経路がAルート、これに対して宅内との通信経路をBルートと呼ばれる)これのコントロールにシリアルポートを介したやりとりをする必要がある。
これがプログラムを書き始めた当初、思った通りに動かないことが多く、(慣れや仕様の理解度もあるが)少しコードをいじっただけでうまく動かなくなることが多々あった。そこで単体テストを充実させたくなるわけだが、スマートメータとの通信確立状態のような状態をもっているため、各コマンドを個別にテストすることが難しい。
そこでシリアルでの通信を再現するエミュレータを用意し、ローカルで仮想のシリアルポートを用意して通信を再現したい。
というわけでその方法を探したが、いくつか定番のアプリケーションがあるようだ。ドライバ絡みなのか簡単にコードをかけるような情報はなかなか出てこなかった。
できればgolangですべて完結したコード書きたかったが、そこまでは簡単ではなさそう。
Windows編
- com0com (Null-modem emulator)
- オープンソースのwinsows用仮想シリアルポートドライバらしい
- 古くからの定番ぽい
- Virtual Serial Port Driver Pro
- 有料。14日間無料試用期間がある。
Null-modem emulator (com0com)
2021年3月時点でも最新は2017年の3.0.0.0のようだ。

com0com-3.0.0.0-i386-and-x64-signed.zip をダウンロード。解凍するとx86, x64の2つある。適切な方をインストール。

セットアップ画面。

シンプルだし、単純に今回のような目的には十分そう。
Virtual Serial Port Driver(有料)
Null-modem emulator(com0com)の説明サイトで代替手段として紹介されている。曰く、
It allows creating a large number of virtual COM ports and gives you great possibility to emulate serial port behaviour fully.
http://com0com.sourceforge.net/
大量の仮想COMポートを作成でき、シリアルポートの振舞いを完全に近い形でエミュレートできる可能性もあるということのよう。
Virtual Serial Port Driverのほうのサイトには、その機能比較表もある。

価格は予想以上に高かった。Standardが約$140、Proが約$200。Proはシリアルポートを分岐したり合流したりもできるなどかなり多機能と思われる。詳細は割愛。
2週間だけ試用できる。単純にダウンロードしてみたらPro版だった。
UIは比較的わかりやすい感じ。

“Pair”を選択するとローカルでのシリアルポートのペアを設定できる。

コメント
[…] […]