既然學了npm跟nvm 我們就來下載serialport這個套件
就像上面講的 在終端機上打
npm install serialport
這樣在同個目錄底下就都可以使用那個套件
不過使用套件都要有引入,就像是python的import,C的include
而node是require 程式碼就像這樣
const Readline = require('@serialport/parser-readline')
var SerialPort = require("serialport");
然後改個名子
const parser = new Readline()
這樣就成功把套件引入進來了,再來Serial要溝通要知道對方的port跟鮑率
var arduinoCOMPort = "/dev/ttyACM0";
var arduinoport = new SerialPort(arduinoCOMPort, {baudRate: 9600}).setEncoding('utf8');
之後就是接收資料的部份
arduinoport.on("open", (err) => {
console.log('serial port open'); //成功連接時印出port open
if(err){
console.log("no serial device found")//失敗時印出 device not found
}
},20);
arduinoport.pipe(parser)
parser.on('data', line =>{
console.log(line)
})
執行出來的結果
之後可能會發現怎麼有時候第一條訊息好像會缺一塊
這是因為連接上的時候arduino seiral的輸出沒有同步到
所以要改成可以跟程式同步或是我傳送訊息給arduino在給我資料
所以arduino程式改成
char data;
#include "Adafruit_CCS811.h"
Adafruit_CCS811 ccs;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
ccs.begin();
delay(1000);
while(!ccs.available());
}
void loop() {
while(Serial.available()>0){
data = Serial.read();
if(data == 'g'){
if(ccs.available()){
if(!ccs.readData()){
Serial.print("CO2:");
Serial.print(ccs.geteCO2());
Serial.print(",");
Serial.print("TVOC:");
Serial.println(ccs.getTVOC());
}
}
}
}
}
然後在nodejs後面新增一個
setInterval(function(){
arduinoport.write('g')
},1000)
藉由傳送訊息讓arduino吐資料給你的方式 讓接收資料的時候不會有不同步的問題
之後在送資料給前端的時候,就不會產生格式不對或資料欄位錯誤的情況發生
今天到這樣結束,明天要教iot常用的通訊方式MQTT