我遵循教程來闡述Raspberry Pi上的LED,以便當iBeacon檢測到使用GPIO引腳啓用LED時,但我需要更改腳本當不再檢測到iBeacon時LED再次熄滅。Bash腳本掃描iBeacons並在Raspberry Pi上使用GPIO
此刻的腳本是:
#!/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
是:
[email protected] ~ $ 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打開一次,然後重置狀態的唯一方法是停止腳本並重新啓動它。 謝謝
「line」的內容究竟是什麼?你甚至可能根本不需要'grep'。試試:'if [[$ line = *「2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 1」*]]; then'。 – 2014-11-02 16:33:24
@gniourf_gniourf行變量是從stdin填充的,那麼它就是'beacon scan -b'輸出。 – mpromonet 2014-11-02 16:42:12
信標掃描命令正在輸出它看到的iBeacons的uuids的巨大列表,然後grep用於在此輸出中查找數據。是否有可能知道「信標掃描」輸出最近沒有更新過,或者是否最好創建一個每幾秒鐘啓動一次信標掃描命令的腳本,以便輸出被清除,然後可以使用相同的if語句? – hdworld 2014-11-02 16:48:19