簡體   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