我是Raspberry Pi开发的新手,我参与了一个项目,我们需要从以前与我们的Pi配对的不同传感器(例如温度传感器,可穿戴健康传感器等)发送的蓝牙读数,并发送给他们使用Pi作为网关的服务器。
如何访问接收蓝牙读数的端口?从那以后,我想它就像编写一个带有重要信息的脚本一样简单,比如设备ID和测量值,将它们放在格式化的消息中并将其发送到服务器,但我还需要建议。 / p>
任何帮助,甚至提供论坛或类似网站的链接,都将非常感激。
更新
我现在可以读取BLE设备中的每个handle
,并使用JSON
将数据解析为bash script
文件。但是,我不知道如何告诉Node
我需要每5秒钟更新一次信息。以下是我使用的代码:
// required modules
var http = require('http');
var fs = require('fs');
var exec = require('child_process').exec;
// for executing bash/shell scripts
function execute(command, callback){
exec(command, function(error, stdout, stderr){ callback(stdout); });
};
// executes script that updates JSON file with new readings
module.exports.getJSONFile = function(callback){
execute("./Scripts/BLEreadingsJSON.sh");
};
// creates HTTP server
http.createServer(function(request, response){
response.writeHead(200,{
'Content-Type': 'text/json' });
setInterval(function(){
var contents = fs.readFile('Scripts/nodeJS/readings.json', function(err, contents){
response.write(contents);
response.end();
});
}, 5*1000);
}).listen(8080); // listen for connections on this port
console.log('Listening to port 8080...');
当我执行此操作时,我收到以下错误:
pi@raspberrypi ~/Scripts $ node nodeJS/sendFileToServer.js
Listening to port 8080...
http.js:851
throw new TypeError('first argument must be a string or Buffer');
^
TypeError: first argument must be a string or Buffer
at ServerResponse.OutgoingMessage.write (http.js:851:11)
at /home/pi/Scripts/nodeJS/sendFileToServer.js:22:13
at fs.js:207:20
at Object.oncomplete (fs.js:107:15)
我认为这是因为它在创建文件之前尝试访问该文件。如何使用callback
?
答案 0 :(得分:0)
我得到了它的工作!对于那些仍然感兴趣的人,我最终使用了socket.io
。我有一个脚本,用新的BLE读数更新数据。此node.js
代码侦听这些更新并将文件发送到客户端:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var fs = require('fs')
app.get('/', function(req, res){
var index = "index.html";
res.sendFile(index, {root: "absolute_path_to_index"});
});
var text;
fs.readFile('absolute_path_to_file', function(err, data){
text = data;
});
io.on('connection', function(socket){
console.log("User connected");
socket.emit('news', text);
socket.on('disconnect', function(){
console.log("User disconnected");
});
// this line waits for changes in the file and uploads the new data
fs.watchFile('absolute_path_to_file', function(curr, prev){
fs.readFile('absolute_path_to_file', function(err, data){
socket.emit('news', data.toString());
});
});
});
http.listen(4321, function(){
console.log("Listening on port 4321...");
});