2022年3月14日こんにちは、MSKです。今回はElectronアプリでシリアル通信を行ってみたいと思います。今回はパソコンに僕が作ったデバイスをつけて試しています。使い勝手がよいので、Next.jsを使ったプロジェクトをそのまま使います。Next.jsでElectronアプリのプロジェクトを立ち上げてみる!Next.jsを使ってElectronアプリを作ってみました。...SerialPortのインストールSerialPortをインストールします。@types/serialport記事書いてる途中に別のプロジェクトでserialportをデフォルトでインストールしたら、10.x.xになっていました。新しいバージョンは後で調べて更新する予定ではありますが、現段階では9.2.8を前提に書いていますので、ご注意ください。接続されているCOMポートを取得するlibフォルダをelectron-srcの中に作って、その中にserialManager.tsを作成します。});}SerialPortのlistメソッドでComポートの一覧を取得できますので、それをforEachで全て表示しています。あとはpages/index.tsxにボタンをつけて、mainプロセスから呼べるようにipcRendererでメッセージを送ります。})electron-srcのindex.tsにserialManagerのsearchComPortをインポートしておきます。レンダラープロセスからメッセージが来た場合に反応するようにしておきます。以降、シリアル通信の送信や受信はこのような形でメインプロセスで行い、それをレンダラープロセスから呼び出し、またはコールバックします。IndexPageこれで実行してみると、エラーが発生しました。requiresと出ています。Nodeのバージョンがコンフリクトしているようです。(僕がたまたま発生しただけみたいですが、備忘録をかねて解決した方法書いておきます。実際いろいろ試しました・・・)次のコマンドでelectron-rebuildをインストールします。electron-rebuildインストールが終わったら、node_modules/.bin/electron-rebuildを実行します。devするとエラーが表示されず、コンソールに取得したCOMポートが表示されていると思います。COM1USB\VID_XXXX&amp;PID_XXXX\xxxxxxxxxxxxxxxxxxxxxxxxxxxxx(メーカー名)COM2USB\VID_XXXX&amp;PID_XXXX\xxxxxxxxxxxxxxxxxxxxxxxxxxxxx(メーカー名)COMポートを開いてみるComの名前、ボーレートとFlowコントロールするかを指定してComポートを開きます。(作ったデバイスではCTS・RTSを使ったFlowコントロールをEnableにしているので、今回はFlowコントロールするかをパラメータとして与えています。});}SerialPortの第一引数がComの名前、第二引数がオプションになります。今回はここでbaudRateとrtsctsを使用しています。第三引数にコールバック関数を登録して、結果を受け取っています。データの送受信をしてみる作ったデバイスはメッセージを受信した場合、1秒後に同じメッセージを返すようにしました。(テスト用なので簡単なものにしました。)そのため、先に受信する処理を作ります。});}onメソッドを使って、第一引数に”data”、第二引数にコールバック関数を登録してComポートから受信したデータをコンソールに表示するようにしています。次に送信処理を作ります。});}送信にはwriteメソッドを使います。引数に送信するメッセージを、第二引数に結果を受け取るコールバック関数を登録します。僕の場合、ビューにボタンをつけて、ボタンを押すとメインプロセスにメッセージを送り、そのメッセージを上の送信処理でデバイスに送るようにしました。送信するとコンソールに送信したメッセージが表示されました。最後に結構簡単にNode.jsの機能を使ってシリアル通信を実現できました。個人的にはFlowコントロールやボーレートの変更も簡単にできたことが嬉しかったです。以上、「Electronでシリアル通信を行ってみる!」でした。最後までご覧いただき、ありがとうございました。MEMSK九州在住の組み込み系エンジニアです。2児の父親でもあります。数学やプログラミングが趣味です。最近RustとReact、結び目理論と曲面結び目理論にはまっています。MSKもちのき研究所Electron-dbで一通りの操作をやってみる!Electronで出退勤を記録するアプリを作ってみた!組み込み系エンジニアMSKソフトウェア関連の技術が好きな30代男性です。最近は、Webアプリ開発にチャレンジ中。