var util = require('util');
var SerialPort = require('serialport');
var xbee_api = require('xbee-api');
var C = xbee_api.constants;
var xbeeAPI = new xbee_api.XBeeAPI({
api_mode: 2
});
var serialport = new SerialPort("/dev/ttyS0", {
baudrate: 9600,
parser: xbeeAPI.rawParser()
});
var d= new Date();
var yyyy =d.getFullYear()
var MM = (d.getMonth()+1<10 ? '0' : '')+(d.getMonth()+1);
var dd = (d.getDate()<10 ? '0' : '')+d.getDate();
var h = (d.getHours()<10 ? '0' : '')+d.getHours();
var m = (d.getMinutes()<10 ? '0' : '')+d.getMinutes();
var s = (d.getSeconds()<10 ? '0' : '')+d.getSeconds();
if(m%5==0){ // correction time every 5 min
serialport.on("open", function () {
var frame_obj = {
type: 0x10,
id: 0x01,
//destination64: "0013A20040D8DA8D",
destination64: "0013A20040D8DA68",
destination64: "0013A20040D8DA93",
broadcastRadius: 0x00,
options: 0x00,
data: ""+h+m+s+dd+MM+yyyy
};
serialport.write(xbeeAPI.buildFrame(frame_obj));
console.log('Sent to serial port.');
});
}
serialport.on('data', function (data) {
console.log('data received: ' + data);
});
// All frames parsed by the XBee will be emitted here
xbeeAPI.on("frame_object", function (frame) {
console.log(">>", frame);
var d= new Date();
var yyyy =d.getFullYear()
var MM = (d.getMonth()+1<10 ? '0' : '')+(d.getMonth()+1);
var dd = (d.getDate()<10 ? '0' : '')+d.getDate();
var h = (d.getHours()<10 ? '0' : '')+d.getHours();
var m = (d.getMinutes()<10 ? '0' : '')+d.getMinutes();
var s = (d.getSeconds()<10 ? '0' : '')+d.getSeconds();
console.log( ""+h+"-"+m+"-"+s+"-"+dd+"-"+MM+"-"+yyyy);
var recadd = frame.remote64;
console.log(recadd);
});
/**/
serialport.on("open", function () { //send the ack back to xbee which recieve
var frame_obj = {
type: 0x10,
id: 0x01,
//destination64:recadd ,
broadcastRadius: 0x00,
options: 0x00,
data: "ack"
};
serialport.write(xbeeAPI.buildFrame(frame_obj));
console.log('Sent to serial port.');
});
感謝使用 Node.js Taiwan AMA,以下附上簡單提問範例供參考,請把內容改成你自己遇到的問題
目的
在每次接收到從各個xbee收到資料時能回應"ack"供判斷
使用的工具
<<我在 Pi3 - Raspbian GNU/Linux 下使用 npm 安裝 node.js 6.9.5 >>
操作流程
<<我下了 xxx 指令,輸入了下面的程式碼,>>
遇到的問題
參考了網路上範例使用xbee-api 目前想讓他每XX時間送出時間的資訊 (可能是以小時為單位) 在每次接收到從各個xbee收到資料時能回應"ack"供判斷 但必須知道來源是哪顆xbee所以用變數recadd紀錄下來 像這樣的變數如何傳到下方傳送的地方做使用呢
嘗試過的解法
試過把傳送ack整段塞進讀取封包的地方但無反應
程式碼
var util = require('util'); var SerialPort = require('serialport'); var xbee_api = require('xbee-api');
var C = xbee_api.constants;
var xbeeAPI = new xbee_api.XBeeAPI({ api_mode: 2 });
var serialport = new SerialPort("/dev/ttyS0", { baudrate: 9600, parser: xbeeAPI.rawParser() }); var d= new Date(); var yyyy =d.getFullYear() var MM = (d.getMonth()+1<10 ? '0' : '')+(d.getMonth()+1); var dd = (d.getDate()<10 ? '0' : '')+d.getDate(); var h = (d.getHours()<10 ? '0' : '')+d.getHours(); var m = (d.getMinutes()<10 ? '0' : '')+d.getMinutes(); var s = (d.getSeconds()<10 ? '0' : '')+d.getSeconds();
if(m%5==0){ // correction time every 5 min serialport.on("open", function () { var frame_obj = { type: 0x10, id: 0x01, //destination64: "0013A20040D8DA8D", destination64: "0013A20040D8DA68", destination64: "0013A20040D8DA93", broadcastRadius: 0x00, options: 0x00, data: ""+h+m+s+dd+MM+yyyy };
}); }
serialport.on('data', function (data) { console.log('data received: ' + data);
});
// All frames parsed by the XBee will be emitted here xbeeAPI.on("frame_object", function (frame) { console.log(">>", frame); var d= new Date(); var yyyy =d.getFullYear() var MM = (d.getMonth()+1<10 ? '0' : '')+(d.getMonth()+1); var dd = (d.getDate()<10 ? '0' : '')+d.getDate(); var h = (d.getHours()<10 ? '0' : '')+d.getHours(); var m = (d.getMinutes()<10 ? '0' : '')+d.getMinutes(); var s = (d.getSeconds()<10 ? '0' : '')+d.getSeconds(); console.log( ""+h+"-"+m+"-"+s+"-"+dd+"-"+MM+"-"+yyyy); var recadd = frame.remote64; console.log(recadd);
});
/**/ serialport.on("open", function () { //send the ack back to xbee which recieve var frame_obj = { type: 0x10, id: 0x01, //destination64:recadd , broadcastRadius: 0x00, options: 0x00, data: "ack" }; serialport.write(xbeeAPI.buildFrame(frame_obj)); console.log('Sent to serial port.'); });