iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
1

既然學了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


上一篇
DAY8 介紹nodejs
下一篇
DAY10 介紹MQTT通訊協定
系列文
初學者也能實做的環控系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言