Arduino串行和套接字

我尝试使用Node.js和Socket.io发送串行数据到Arduino和我的代码。

而html页面只有一个button。 它的工作节点和html端。但这不是发送串行数据。

var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io')(server); var port = process.env.PORT || 3000; server.listen(port, function () { // console.log('Server listening at port %d', port); }); // Routing app.use(express.static(__dirname + '/public')); var SerialPort = require("serialport").SerialPort var serialPort = new SerialPort("/dev/ttyACM3", { baudrate:9600 }, false); // this is the openImmediately flag [default is true] io.on('connection', function (socket) { socket.on('my other event', function (data) { console.log(data); serialPort.open(function () { console.log('open'); serialPort.on('data', function (data) { console.log('data received: ' + data); }); serialPort.write(data, function (err, results) { console.log('err ' + err); console.log('results ' + results); }); }); }); }); app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); 

发送串行消息到Arduino并不像传入string那么简单。 不幸的是,你必须发送string的字符,Arduino将接收并连接回string。 发送最后一个字符后,您需要发送一个最终的新行字符(/ n),这是Arduino停止连接并评估消息的信号。

这就是你需要在你的Node.js服务器上做的事情:

 // Socket.IO message from the browser socket.on('serialEvent', function (data) { // The message received as a String console.log(data); // Sending String character by character for(var i=0; i<data.length; i++){ myPort.write(new Buffer(data[i], 'ascii'), function(err, results) { // console.log('Error: ' + err); // console.log('Results ' + results); }); } // Sending the terminate character myPort.write(new Buffer('\n', 'ascii'), function(err, results) { // console.log('err ' + err); // console.log('results ' + results); }); }); 

这是接收这个的Arduino代码:

 String inData = ""; void loop(){ while (Serial.available() > 0) { char received = Serial.read(); inData.concat(received); // Process message when new line character is received if (received == '\n') { // Message is ready in inDate } } }