Здравствуйте, 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
бгл 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);