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後,就可以看到開關燈的效果。串口裏也會打印雙方接受的到的數據了。

本地圖片,請重新上傳

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