1 はじめに
プロジェクト名 | ノードのシリアルポート |
---|---|
ホームページ | https://シリアルポート.io/ |
オープンソース契約 | と |
ギットハブ | https://github.com/serialport/node-serialport |
ギットハブスター | 5.2k 星(2022-6-30) |
ギットハブフォーク | 989 フォーク(2022-6-30) |
githubのgitアドレス | https://github.com/serialport/node-serialport.git |
Nodeのシリアル通信ライブラリ[SerialPort]を例を用いて紹介します。これは、シリアル ポートを介してハードウェア デバイスと通信する Electron アプリケーションの例でもあります。完全なコードは記事の最後に添付されています。この例には UI フレームワークは含まれず、HTML、CSS、および JavaScript のみを使用してコードを記述します。焦点はコミュニケーション方法です。
2. 開発環境
ハードウェア:
- マイクロコントローラー: Arduino UNO
- Arudino IDE バージョン: v 1.8.19
- OS:ウィンドウズ10
ソフトウェア:
- 電子バージョン: v19.0.4
- ノードのバージョン: v14.19.3
- npm バージョン: v6.14.17
- VS コードのバージョン: v1.68.1
- シリアルポートのバージョン: v10.4.0
3. プログラムの説明
この例には主に次の機能があります。
- シリアルデバイスのトラバース
- デバイスのオンとオフを切り替える
- デバイスにデータを送信する
- デバイスから送信されたデータを受信する
まずは下のプログラム図を見てください。プログラムは図に基づいて実装方法を上から順に説明します。
まず、プリロード スクリプトのコードを記述しますpreload.js
。このスクリプトは、レンダラー プロセスとメイン プロセス間の IPC 通信の鍵となります。
const {
contextBridge, ipcRenderer } = require('electron')
contextBridge.exposeInMainWorld('aeIo', {
/**
* 获取串口设备列表
*/
async list() {
return await ipcRenderer.invoke('aeio-list') },
/**
* 打开串口设备
* @param {串口地址} path
* @param {波特率} baudRate
*/
open: (path, baudRate = 9600) => {
ipcRenderer.send('aeio-open', path, baudRate) },
/**
* 关闭设备
*/
close:()=>{
ipcRenderer.send('aeio-close')},
/**
* 发送数据
* @param {向arduino发送的数据} data
*/
write: (data) => {
ipcRenderer.send('aeio-write', data) },
/**
* 从arduino接收数据
* @param {*} callback
*/
read: (callback) => {
ipcRenderer.on('aeio-read', callback) },
/**
* 接收消息 这个消息内容大部分都是main.js发出的,主要是用作提示
* @param {*} callback
*/
message: (callback) => {
ipcRenderer.on('aeio-message', callback) },
});
3.1 シリアルデバイスのトラバース
index.html
<div><button id="mBtnList" onclick="getList()">获取串口设备列表</button>设备列表:<span id="dListInfo"></span></div>
<script>
/**
* 向主进程发送获取串口设备的消息,并等待串口设备集合
**/
function getList() {
window.aeIo.list().then((list) => {
let dListInfo = document.getElementById('dListInfo');
dListInfo.innerHTML = JSON.stringify(list);
});
}
</script>
main.js
/**
* 获取串口列表
*/
ipcMain.handle('aeio-list', (ev, args) => {
return SerialPort.list().then((info, err) => {
if (err) {
sendToRenderer(error(`设备列表获取失败:${
err}`))
return [];
}
//将集合返回给界面
return info;
})
})
SerialPort.list()
このメソッドは、接続されているシリアル デバイスを返します。返されるのはコレクションです。返されたデータ セットでは、シリアル ポート デバイスを表す各オブジェクトに属性がありpath
、この属性の値が open メソッドに渡されます。
3.2 デバイスの電源のオンとオフ
index.html
<div>串口设备:<input type="text" id="mInputDevPath" placeholder="请从设备列表上复制" width="200px" />波特率:<input type="text"
id="mInputDevPort" placeholder="波特率" width="200px" value="115200" /><button id="mBtnOpen"
onclick="openDevice()">打开设备</button><button id="mBtnClose" onclick="