我有以下代码,我从serialport接收数据并将所有内容附加到文本文件中。数据来自连接到Arduino UNO的Xbee。我正在使用Serial.print方法打印数据。散列'#'表示消息的结尾,因此我将其打印到文本文件中。无线模块处于AT(透明)模式。
我试图更改字符编码,但它会一直显示我的文件包含无效字符的消息。现在我将数据转换为字符串,但它仍然不起作用。
我使用的是node.js v0.12.1,我的操作系统是Debian测试版。
var http = require('http');
var fs = require("fs");
var SerialPort = require("serialport").SerialPort;
var sensorData = "";
var serialPort = new SerialPort("/dev/ttyUSB0", {
baudrate: 9600
});
serialPort.on("open", function () {
console.log('Serial port is open');
serialPort.on('data', function(data) {
var c = data.toString('utf8');
switch(c) {
case "#":
console.log(sensorData);
fs.appendFile("file.txt", sensorData, function (err) {
if (err) throw err;
});
sensorData = "";
break;
default:
sensorData += c;
}
});
});
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Test');
}).listen(1337, '127.0.0.1');
console.log('server is up at: http://127.0.0.1:1337/');
这是我收到的信息:
在Windows平台上执行时,我没有得到这个。有什么问题?
答案 0 :(得分:0)
Arduino字符串通常为end with a null byte(即\ 00),这可能意味着您的设备发送空字符串。
为了防止这种情况,我会检测你的data
缓冲区在长度为1时是否在第一个位置包含一个空字节,如果是这样的话,只需返回,这样你就不会将该内容附加到sensorData
。
serialPort.on('data', function(data) {
if (data.length === 1 && data[0] === 0) return;
var c = data.toString('utf8');
...