電子シリアル通信

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. 開発環境

ハードウェア:

  1. マイクロコントローラー: Arduino UNO
  2. Arudino IDE バージョン: v 1.8.19
  3. OS:ウィンドウズ10

ソフトウェア:

  1. 電子バージョン: v19.0.4
  2. ノードのバージョン: v14.19.3
  3. npm バージョン: v6.14.17
  4. VS コードのバージョン: v1.68.1
  5. シリアルポートのバージョン: v10.4.0

3. プログラムの説明

この例には主に次の機能があります。

  1. シリアルデバイスのトラバース
  2. デバイスのオンとオフを切り替える
  3. デバイスにデータを送信する
  4. デバイスから送信されたデータを受信する

まずは下のプログラム図を見てください。プログラムは図に基づいて実装方法を上から順に説明します。

ここに画像の説明を挿入します

まず、プリロード スクリプトのコードを記述します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 シリアルデバイスのトラバース

  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>

  1. 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 デバイスの電源のオンとオフ

  1. 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="

おすすめ

転載: blog.csdn.net/Zhang_YingJie/article/details/125539401