[英]How to send data from raspberry pi 3 to my cordova app?
首先,我不是一个非常有经验的编码人员,但是我正在学习和练习! 当前,我正在尝试使用cordova开发一个混合应用程序,这是一个用于创建可像本地应用程序一样安装在ios或android上的网络应用程序的框架。
因此,我在家有一个私人项目。 我想创建一个应用程序以读取我的蓝牙加热器恒温器的温度(蓝色)。 多亏了我在网上找到的出色教程,我才得以使用gatttool
在树莓派3和蓝牙加热器恒温器之间建立连接。 现在,我可以读取很好的温度,但是,我想准确地在我的应用程序中的iphone上显示数字。 您将如何实施? 如何将覆盆子中的数据发送到手机? 最好是通过Wi-Fi吗? 如果有人知道这个问题的优秀教程,我将不胜感激。
谢谢! EM
您可以使用简单的netcat
通过UDP发送温度读数。 将以下内容保存在Raspberry Pi上的$HOME/transmit
文件中。 它使用gattool
永远读取温度,然后通过UDP将其传输到您的手机:
#!/bin/bash
# Change these to suit your local setup
PHONE_IP=192.168.0.8
PHONE_PORT=5005
while :; do
# Read value from thermometer with "gattool" - modify as appropriate
reading=$(gattool -b BC:6A:29:AE:CC:23 --char-read -a 0x25)
echo "DEBUG: Read with gattool: $reading"
# Send to phone with netcat
nc -w0 -u $PHONE_IP $PHONE_PORT <<< "$reading"
# Wait a second so we don't flood network
sleep 1
done
然后,可以使用以下命令使脚本可执行:
chmod +x $HOME/transmit
您可以使用以下命令运行它:
$HOME/transmit
然后在手机上,您需要从相应的UDP端口读取。 我不知道您的环境如何,但是您可以使用netcat
做到这一点,方法是将其保存在手机上为$HOME/recv
:
#!/bin/bash
PORT=5005
while :; do
received=$(/usr/bin/nc -w 0 -u -l $PORT)
echo $received
done
或者,如果您的手机运行Python,则将执行以下操作:
#!/usr/local/bin/python3
import socket
UDP_IP = "0.0.0.0"
UDP_PORT = 5005
# Create UDP socket and bind to any/all interfaces
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))
# Display all messages received
while True:
data, addr = sock.recvfrom(1024)
print("Received:",data)
有几种方法可以做到这一点。
在Raspberry Pi上,您可以编写脚本,该脚本使用gatttool读取温度并将值写入到/ tmp / temperature之类的文件中。 运行此脚本cron以每x分钟运行一次以更新值。
创建第二个程序,该程序是一个网络服务器,以通过http提供此数据。 您可以使用任何语言来执行此操作。 这是我使用Node.js的方法 。
// serve_temp.js
const fs = require('fs');
const http = require('http');
const hostname = '0.0.0.0';
const port = 3000;
const server = http.createServer((req, res) => {
fs.readFile('/tmp/temperature', (err, data) => {
if (err) throw err;
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end(data);
});
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
要对其进行测试,请将一些测试数据写入/ tmp / temperature文件。
echo 70 > /tmp/temperature
运行程序
node serve_temp.js
在手机上打开Safari并转到http://raspberrypi.local:3000 。 您应该看到“ 70”。 (您可能需要使用ip地址而不是名称。例如http://192.168.1.123:3000 。)您的Cordova应用程序可以进行相同的http调用来获取数据。
您可以将两个程序合并为一个。 使用Node.js,您可以使用noble库来使用蓝牙并从恒温器获取温度。
另一个选择是编写一个Cordova应用程序,该应用程序使用蓝牙直接与恒温器对话。 您可以使用cordova-plugin-ble-central完成此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.