Raspberry Pi:将蓝牙读数发送到本地服务器

时间:2014-07-24 11:47:59

标签: bluetooth raspberry-pi bluetooth-lowenergy gateway

我是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

执行此操作

1 个答案:

答案 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...");
});