簡體   English   中英

Bash腳本掃描iBeacons並在Raspberry Pi上使用GPIO

[英]Bash script to scan for iBeacons and use GPIO on Raspberry Pi

我遵循了一個教程來點亮Raspberry Pi上的LED,以便當iBeacon使用GPIO引腳檢測到LED點亮時,我需要更改腳本,以便在不再檢測到iBeacon時LED再次熄滅。

目前的腳本是:

#!/bin/bash
gpio mode 1 out
trap "gpio write 1 0" exit
while read line
do
    if [[ `echo $line | grep "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 1" ` ]]; then
        gpio write 1 1
    fi     
done

調用者:

$ beacon scan -b | ./scriptName

beacon scan為:

pi@pibeacon ~ $ sudo beacon scan
BLE Beacon Scan ...
iBeacon     UUID: 92AB49BE-4127-42F4-B532-90FAF1E26491   MAJOR: 1       MINOR: 1       POWER:    -59   RSSI: -62 
iBeacon     UUID: 92AB49BE-4127-42F4-B532-90FAF1E26491   MAJOR: 1       MINOR: 1       POWER: -59   RSSI: -65 
iBeacon     UUID: 92AB49BE-4127-42F4-B532-90FAF1E26491   MAJOR: 1       MINOR: 1       POWER: -59   RSSI: -65 

在檢測到iBeacon的所有時間持續更新,並且在未檢測到iBeacon時停止。

目的是使腳本始終運行,並使用beacon scan命令的輸出來確定LED是否應打開或關閉-如果檢測到iBeacon,則LED應該點亮,然后將iBeacon移出范圍內的LED再次熄滅。 現有的條帶會一次打開LED,然后重置這種情況的唯一方法是停止腳本並重新啟動它。 謝謝

您可以使用現有代碼完成此操作的一種方法是在if語句中將變量設置為時間戳。 然后,在if語句之外(但在while內),您可以將當前時間與時間戳進行比較。 如果自檢測到信標以來已經過去了足夠的時間(例如5秒鍾),則您可以通過代碼關閉LED。

這種方法的缺點是,如果根本沒有檢測到信標,您的代碼將在read line語句中阻塞。 因此,這只有在您確定至少有一個信標始終保持程序運行的情況下才可行。 這種編程不太適合簡單的bash腳本,因為您確實需要兩個線程來處理它。 但是,如果要保留相同的基本工具集,這是一個不錯的選擇。

我想出了一個(不好的?)解決方案,並想在這里分享。 其效果是,當檢測到信標時,指示燈閃爍,然后當信標超出范圍時,指示燈停止閃爍。 我將此代碼設置為在Pi的啟動時運行,並已完成我需要的功能(非常粗糙的概念原型證明!)。

我使用了非常出色的Radius Networks開發工具包(原始腳本來自該工具包),強烈建議如果有人對iBeacons感興趣的話。

#!/bin/bash
gpio mode 1 out
trap "gpio write 1 0" exit
while read line
do
    if [[ $line = *"2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 1"* ]]; then
       gpio write 1 1
    fi     
gpio write 1 0
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM