Node.js与arduino串口通讯

  1. JS的发展可以说是很迅猛从ECMA5 到ECMA6.其系统是越来越庞大。从原生到各种JS框架林立,从单纯的前端,到复杂的后端系统。使得越来越多的前端程序员也可以上手后端开发。Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的、可扩展的网络应用。Node.js采用事件驱动和非阻塞I/O模型,使其变得轻微和高效,非常适合构建运行在分布式设备的数据密集型实时应用。
    运行于浏览器的Javascript,浏览器就是Javascript代码的解析器,而Node.js则是服务器端JS的代码解析器,存于服务器端的JS代码由Node.js来解析和应用。
    本期采用node的串口实现与Arduino单片机的通讯:
    单片机:arduino uno

打开arduino LED 新建Serial文件,写入代码

本地图片,请重新上传图片

 int led=13;//测试灯

char getstr; 

void setup() 

{ 

  Serial.begin(9600); 

}

void loop() 

{ 

  getstr=Serial.read(); 

  Serial.println("a"); //给node.js发个a

  if(getstr=='a'){

    digitalWrite(led,HIGH); 

    Serial.println(getstr); 

  }

  else if(getstr=='b'){//收到b就关灯了

    digitalWrite(led,LOW); 

    Serial.print(getstr); 

  }

 delay(500);

while(1);

}
  1. OK 下载代码 单片机搞定。
    在电脑上安装npm后,在项目文件里面建立Serial.js文件,先执行安装serial 模块 :npm install serialport
    然后就可以写代码啦。
var SerialPort = require('serialport');
var port = new SerialPort('COM5',{ autoOpen: false,
    baudRate: 9600,//波特率
    dataBits: 8, //数据位
    parity: 'none', //奇偶校验
    stopBits: 1, // 停止位
    flowControl: false,// 流量控制 默认false
    parser: SerialPort.parsers.readline('\n')//去掉数据位后面的回车
})
port.open(function (err) {//打开串口
    if (err) {
        return console.log('Error opening port: ', err.message);
    }
    setTimeout(function() {
        port.write('a');//先发送个a   让单片机开灯
        setTimeout(function(){
            port.write('b');//再先发送个b  让单片机关灯
        },2000)   //这个延时是必须要有的
}, 2000);

});
var bufs = [];

port.on('data', function (buf) {//监听数据接收
    bufs.push(buf.toString("utf-8"));//串口过来的数据的16进制的,这里转成正常的 utf-8
    console.log("from arduino:-->"+buf.toString("utf-8"))
    console.log(bufs)
    if(buf.toString("utf-8")=='a\r'){ 
        console.log("get a")
    }
});
port.on('end', function (buf) {  //数据 接受完毕后的处理函数
    console.log(buf)
    var buf = Buffer.concat(bufs);
    console.log(buf)
});   

OK 运行该文件 node Serial.js后,就可以看到开关灯的效果。串口里也会打印双方接受的到的数据了。

本地图片,请重新上传

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章