Возникли проблемы с RaspberryPi SerialPorts с помощью Electron-Builder - PullRequest
0 голосов
/ 24 января 2020

Здравствуйте, Big Brain Inte rnet People,

Проблема:

Я пытаюсь создать приложение для своего малинового пи, но, похоже, у меня проблема с серийными портами. Я могу собрать и запустить программу на моем хост-компьютере, но когда я создаю приложение с помощью Electron-Builder, у моего целевого устройства возникает проблема с использованием модуля serialport. Я предполагаю, что это как-то связано с raspberry pi с использованием процессора ARM, а мой рабочий стол хоста использует 64-битную версию, но я не уверен, как решить эту проблему.

Это мой первый проект с nodejs / электронный / HTML / js, поэтому любая помощь будет принята с благодарностью!

Хост-система:

Ubuntu 19.10

Arch: 64-битный

Узел : v10.15.2

Целевая система:

Raspberry Pi 4

Raspbian v10

Арка: Armv7l

Узел: v12.15.1 - версия armv7

Ошибка:

/tmp/.mount_sec-trTc9j6w/resources/app.asar/node_modules/bindings/bindings.js:121 Uncaught Error: /tmp/.org.chromium.Chromium.PmaAji: wrong ELF class: ELFCLASS64
    at process.func [as dlopen] (electron/js2c/asar.js:138)
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:881)
    at Object.func [as .node] (electron/js2c/asar.js:147)
    at Module.load (internal/modules/cjs/loader.js:701)
    at tryModuleLoad (internal/modules/cjs/loader.js:633)
    at Function.Module._load (internal/modules/cjs/loader.js:625)
    at Module.require (internal/modules/cjs/loader.js:739)
    at require (internal/modules/cjs/helpers.js:14)
    at bindings (/tmp/.mount_sec-trTc9j6w/resources/app.asar/node_modules/bindings/bindings.js:112)
    at Object.<anonymous> (/tmp/.mount_sec-trTc9j6w/resources/app.asar/node_modules/@serialport/bindings/lib/linux.js:2)

пакет. json

{
  "name": "sec-transmitter",
  "version": "0.1.0",
  "description": "",
  "main": "main.js",
  "dependencies": {
    "modbus-serial": "^7.7.4",
    "serialport": "^7.1.5"
  },
  "build": {
    "appId": "sec.com",
    "linux": {
      "category": "Network",
      "target": {
        "target": "AppImage",
        "arch": "armv7l"
      }
    }
  },
  "devDependencies": {
    "electron": "^5.0.5",
    "electron-builder": "^22.2.0",
    "electron-rebuild": "^1.8.8"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "electron .",
    "install": "electron-rebuild",
    "dist": "electron-builder",
    "postinstall": "electron-builder install-app-deps"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

main. js

const { app, BrowserWindow} = require('electron');
const path = require('path');




function createWindow() {
    //create the browser window
    let win = new BrowserWindow({
        width: 1024,
        height: 600,
        center: true,
        fullscreen: true,
        webPreferences: {
            nodeIntegration: true

        }


    })

    //and load the index html of the app
    win.loadFile('./source/index.html')
    win.webContents.openDevTools();

}

app.on('ready', createWindow)


index. html

image

бгл oop. js


const ModbusRTU = require('../node_modules/modbus-serial');

//create empty modbus client
const client = new ModbusRTU(

);


//open connection to serial port
client.connectRTUBuffered("/dev/ttyUSB0",
{ 
    baudRate: 9600,
    dataBits: 8,
    parity: 'none',
    stopBits: 2,
    autoOpen: false,


});

//set timeout, if slave did not reply back
client.setTimeout(500);

//List of ID's
const IDList = [2];

const getPingDevices = async (sensors) => {
    try{
        //get response from all sensors
        for(let sensor of sensors ) {

            //output response to console
            console.log(await getPingDevice(sensor));

            //wait 100 ms before pinging another sensor
            await sleep(100);

        }
    }catch(e){
        //if error, handle them here (it should not)
        console.log(e);
    }finally{
        //close ports
        //client.close();
        // after all the data from the sensors repear again
        setImmediate(() => {
            getPingDevices(IDList)
        })
    }
}

const getPingDevice = async (device_id) => {
    try{
        //set ID of slave
        await client.setID(device_id);

        //read the ping register at address 3000
        let val = await client.readHoldingRegisters(3001,1)

        client.close();

        //return the value
        return val.data[0];
    }catch(e){
        //if error return -1
        return -1
    }
}

const sleep = (ms) => new Promise(resolve => setTimeout(resolve,ms));

//start running
getPingDevices(IDList);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...