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