我遵循教程来阐述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