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