Windows/C++でArduinoのSerialクラスっぽくシリアル通信

ArduinoでPCと通信する必要が出てきたので、WindowsでC++を使ったシリアル通信を行う方法を調べると結構めんどくさそう。

今回は必死こいて、WindowsでC++を使ったシリアル通信を行うクラスを作成しました。
その備忘録です。

SerialWrapperクラス

Windowsでシリアル通信を行うにはWin32 APIを叩く必要があります。

今回はArduinoで使う人を想定してArduinoのSerialクラスを意識したSerialWrapperクラスを作りました。
以下ソース

少し説明してみる

コンストラクタでCOMポートの番号を受け取って、デバイスを開き初期化します。
エラー処理は特にしていないです。
実装したい場合は、CreateFileの戻り値をチェックしてINVALID_HANDLE_VALUEならエラーです。

COMポートの番号はデバイスマネージャーで確認できます。

その他は、おおよそArduinoのSerialクラスと同様です。

関数名 説明
begin 引数に伝送速度を与えて設定する
abailable バッファに溜まったデータ数を返す
write 引数に与えられたデータを送る
read バッファに溜まったデータを1byte取得する

全体的にエラー処理をあまりしていないですが、軽く使う程度には十分だと思います。

参考サイト

デバイスの開き方やデータの送受信など簡単に説明されています。

WIN32APIでシリアル(RS-232C / EIA-232D)通信

WIN32APIでのシリアル通信に関わる各関数について詳細に説明されています。
より突っ込んだことをやりたい場合非常に参考になりそうです。

WindowsでRS232Cを使う

まとめ

WIN32APIがとにかくめんどくさいので一度使えるようになったら、その部分は触らなくていいようにしたいものです。。。
今回作成したSerialWrapperクラスは、難しい事が必要でなければ、簡単に使えるので重宝しています。

使いやすいのか使いにくいのかよくわからないところが多いですが(特に初期化周り)、「PCでシリアル通信をしてみよう」という方の参考になれば幸いです。

ノシ

Tweet about this on TwitterShare on FacebookShare on Google+