SerialPort Node.js завис в состоянии «Ошибка»
Я пытаюсь заставить свой Arduino отправлять данные на мой компьютер с помощью последовательного порта Node.js. Все компилируется, мой Arduino работает хорошо и отправляет данные в последовательный монитор, но программа всегда переходит в myPort.on('close')
, и я не могу понять, почему.
//импортировать пакет js последовательного порта
const SerialPort = require('serialport');
//открытие порта
var myPort = new SerialPort("/dev/ttyS2", {
baudRate: 9600,
//парсер: SerialPort.parsers.raw
});
//как передать readline
const Readline = SerialPort.parsers.Readline;
const parser = new Readline();
myPort.pipe(parser);
myPort.on("open", onPortOpen);
myPort.on("data" , onData);
myPort.on("close" , onClose);
myPort.on("error" , onError);
function onPortOpen(){
console.log("Port open");
}
function onData(data){
console.log("data transfer completed..");
console.log(data);
}
function onError(){
console.log("Error. something went wrong..")
}
function onClose(){
console.log("Port is closed. Communication terminated");
}
Может, кто-нибудь знает, в чем потенциальные причины? Я дважды проверил свой порт, и это действительно COM3
, следовательно, /dev/ttyS2
для Windows 10.
@J.C, 👍0
1 ответ
Я вижу две проблемы в вашем коде. Я не могу сказать наверняка, связаны ли они с проблема, с которой вы столкнулись, но в любом случае:
По умолчанию признаком конца строки парсера
Readline
является"\n"
, тогда какSerial.println()
Arduino использует"\r\n"
. Для того, чтобы получить строку терминаторы совпадают, вам следует вызвать конструкторReadline
с помощью{ разделитель: "\r\n" }
в качестве аргумента.Прохождение потока через парсер возвращает новый поток. Вам следует следите за событиями данных на этом потоке, а не на исходном порту.
Поэтому я предлагаю вам попробовать:
const parser = new Readline({ delimiter: "\r\n" });
const parsedStream = myPort.pipe(parser);
myPort.on("open", onPortOpen);
parsedStream.on("data" , onData);
...
- Проблема с подключением датчика сердцебиения и температуры на arduino uno, но работает по отдельности
- Node.js не может распознавать символы из последовательного порта
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Использовать все контакты как цифровые входы/выходы
- Float печатается только 2 десятичных знака после запятой
- Arduino как USB HID
- Serial1' was not declared in this scope