我有一台AllSky-340 CCD相机,它使用串口进行通信。
我使用PL2303 USB转换器将其连接到笔记本电脑。
dmesg的:
[14223.043367] usb 1-2: new full-speed USB device number 12 using xhci_hcd
[14223.172348] usb 1-2: New USB device found, idVendor=067b, idProduct=2303
[14223.172352] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[14223.172353] usb 1-2: Product: USB-Serial Controller
[14223.172355] usb 1-2: Manufacturer: Prolific Technology Inc.
[14223.172763] pl2303 1-2:1.0: pl2303 converter detected
[14223.173356] usb 1-2: pl2303 converter now attached to ttyUSB0
一个名为pyallsky的python代码允许在linux下控制AllSky340摄像头。它有效。
我已将此代码翻译成javascript以与节点一起使用。
以下是代码的一部分("E:"
是测试命令):
var serialport = require("serialport");
var sp = new serialport(portName);
sp.on('open', showPortOpen);
sp.on('close', showPortClose);
sp.on('disconnect', showPortDisconnect);
sp.on('error', showError);
sp.on('data', sendSerialData);
function showPortOpen(error) {
if (error) {
console.log('Error while opening the port ' + error);
} else {
console.log('port open. Data rate: ' + sp.options.baudRate);
var buffer = "E:"
sp.write(buffer, function (err, result) {
console.log("writing buffer: "+buffer)
if (err) {
console.log('Error while sending message : ' + err);
}
if (result) {
console.log('Response received after sending message : ' + result);
}
});
}
}
function sendSerialData(data) {
console.log('sendserial data says: '+data);
}
function showPortClose() {
console.log('port closed.');
}
function showPortDisconnect() {
console.log('port disconnected.');
}
function showError(error) {
console.log('Serial port error: ' + error);
}
但它不起作用:运行脚本,日志是
port open. Data rate: 9600
writing buffer: E:
并没有收到相机的任何信息。
我知道数据监听器正常工作,因为如果我同时运行pyallsky
python脚本,我的监听器会拦截数据(在pyallsky
抱怨多次访问之前到港口。)
关闭相机对close
和disconnect
侦听器没有任何影响。
仅拔出PL2303电缆会导致脚本记录
port disconnected.
port closed.
我的想法是js
代码仅与PL2303电缆通信,而不与相机通信。那可能吗?
我该如何解决?
答案 0 :(得分:0)
事实证明我必须强制将波特率强制为115200才能使其正常工作。
/// Opens the serial connection with the camera
var sp = new serialport("/dev/ttyUSB0",
{baudRate: 115200,
autoOpen:false},
err => err!== null ?
console.log('serialport instance error: ', err.message) : true
);