Windows 10のバッチファイルからシリアル通信を使う必要があって、いろいろ調べたりつまずいたりした結果、Node.jsのnode-serialportを使ってしまうのが一番楽だったので顛末を記載します。
条件
- Windows 10
- ダブルクリック一発実行くらいで終わらせられること
- 都度コマンドを入力したりするのは面倒だし間違えるのでNG
- インストーラが必要なソフトは使わないこと
そもそもバッチファイルでないといけないのか
「簡単に実行できること」という条件があって、ダブルクリックとかで一発実行したら終わり程度にとどめる必要がありまして。
PowerShellは考えたのですが、セキュリティポリシーを変更しないとスクリプトを実行できないので避けました。
※いま改めて調べなおしたら、適切に実行させる方法もあったんですね。
コマンドプロンプトからシリアル通信を扱うには
Windows10のコマンド群には、シリアル通信を扱えるものはないようです。シリアル通信をするには、何らかのソフトを追加する必要があります。
TeraTermのマクロを使う
Zip圧縮版のTeraTermがあるので、それを解凍すればインストーラの問題はOKです。ですが、デバッグが絶望的にやりづらいのと、シリアル通信が切れたときの再接続などでの"少し待つ"という動作の調整が難しいのとでこれはあきらめました。
Node.jsを使う
Node.jsはWindows用にひとつの実行ファイルに全てまとまっているものがあり、それを任意の場所に置いておけばすぐ実行できます。
また、node-serialportを使うと、バイナリ・テキストの区別も気にすることなく送受信が可能で、細かく動作モードを設定するとかもなく非常にはかどりました。
TeraTermでは難しかった少し待つ動作も、setIntervalとか使えるので実装に手間がかからずにすみました。
Node.jsの面倒な点
そのモジュールが、非常に大量の細かいファイルから成っているので、環境をまるっと他のドライブへコピーするときに果てしない時間がかかります。Node.jsはその背景から、あまりこういう使い方は想定されていないのかもしれません。
最後に
RubyでもWindowsの実行ファイルにまとめて動かす仕組みがあるようですし、結局のところ、慣れた環境を整えられれば良いという話ではあります。Windowsでも軽量言語を手軽に実行できる環境が整ってきているので、ちょっとした自動作業を慣れない環境で取り組まなくてもいいのはありがたいことです。