大家好
最近正在寫作業
主要目標是
 
"使用 arduino 讀取光敏電阻數據 然後使用  nodejs  讀取 COM3 的數據資料"
 
如何使用 arduino + nodejs 讀取序列資料呢?
 
在 arduino 我們可以這樣寫
//讀取光敏電阻
int photocellPin = 2; // 光敏電阻 接在 anallog pin 2
int photocellVal = 0; // photocell variable

void setup() {
Serial.begin(9600);
}

void loop() {
// 讀取光敏電阻並輸出到 Serial Port 這邊輸出的值是到達USB的輸出位置, 也就是 COM3 . 連結arduino 的USB位置
photocellVal = analogRead(photocellPin);
Serial.println(photocellVal);
delay(1000);
}
如果直接使用 nodejs 使用 SerialPort 讀取 COM3 會發現產生的資料是
Data:亂碼
Data:亂碼
Data:亂碼
Data:亂碼
Data:亂碼
我有上網看到一些解決方案
 
 
 
整理一下...
 
所以我們可以寫在sails.js 裡面的  indexController.js 裡面
//我把聆聽事件寫在這邊
//這邊聆聽 COM3 USB port
var SerialPort = require("serialport");
var serialport = new SerialPort('COM3', {
baudRate: 9600,//這數值必須與arduino 那邊設定對應
});
const parsers = SerialPort.parsers;//解析器讀取 console log
const parser = new parsers.Readline({
delimiter: '\r\n', //字串使用換行切割符號
});
serialport.pipe(parser);//輸出到解析器 (重點)
parser.on('data', function (inputstr){
//寫入資料庫
var date = new Date();
var hour = date.getHours();
hour = (hour < 10 ? "0" : "") + hour;
var min = date.getMinutes();
min = (min < 10 ? "0" : "") + min;
var sec = date.getSeconds();
sec = (sec < 10 ? "0" : "") + sec;
var year = date.getFullYear();
var month = date.getMonth() + 1;
month = (month < 10 ? "0" : "") + month;
var day = date.getDate();
day = (day < 10 ? "0" : "") + day;

//這邊簡單呼叫時間函式寫入.不再另外載入 moment.js
var queryStr = 'INSERT INTO `light_record` SET ';
queryStr += ' `val` = "'+inputstr+'", ';
queryStr += ' `state` = "1", ';
queryStr += ' `inputTime` = "'+year+"-"+month+'-'+day+' '+hour+':'+min+':'+sec+'" ';
queryStr += 'ON DUPLICATE KEY UPDATE val = "'+inputstr+'" ';
//console.log(queryStr);
z2.mdb.query(queryStr, function(err, rows) {
if (err)
throw err;
});
console.log("Write "+inputstr);
});
接好線大概是這樣
 

 
用 nodejs  的 sails  可以簡單顯示網站
 

 
給大家參考囉!
感恩