繁体   English   中英

如何从树莓派3发送数据到我的cordova应用程序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM