
大家好
最近正在寫作業

主要目標是
"使用 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 可以簡單顯示網站
給大家參考囉!
感恩

留言板
歡迎留下建議與分享!希望一起交流!感恩!