在Raspberry Pi 3b上启动时运行bluepy扫描脚本

时间:2018-01-15 05:37:25

标签: python bluetooth raspberry-pi bluetooth-lowenergy raspbian

美好的一天。我正在使用运行Raspbian Stretch的Raspberry Pi 3模型B.我有一个名为bluepyscanner.py的Python脚本,它基本上是bluepy scanner sample code的Python 3变体,对.txt日志文件添加了一小部分。

from bluepy.btle import Scanner, DefaultDelegate

class ScanDelegate(DefaultDelegate):
    def __init__(self):
        DefaultDelegate.__init__(self)

    def handleDiscovery(self, dev, isNewDev, isNewData):
        if isNewDev:
            print("Discovered device", dev.addr)
        elif isNewData:
            print("Received new data from", dev.addr)

scanner = Scanner().withDelegate(ScanDelegate())
devices = scanner.scan(10.0)

for dev in devices:
    print("Device {} ({}), RSSI={} dB".format(dev.addr, dev.addrType, dev.rssi))
    for (adtype, desc, value) in dev.getScanData():
        print("  {} = {}".format(desc, value))
        with open('bluepyscanlog.txt', 'a') as the_file:
            the_file.write("{}={}\n".format(desc, value))

当我从终端用

启动它时,我可以完美地运行这个脚本
$ sudo python3 /home/pi/bluepyscanner.py 

但是,我无法让这个脚本在启动时自动运行。我分别尝试了以下三种方法,到目前为止还没有任何方法:

  1. rc.local(h ttps://www.raspberrypi.org/documentation/linux/usage/rc-local.md):我将以下行添加到/etc/rc.local

    python3 /home/pi/bluepyscanner.py

  2. Cron(https://www.raspberrypi.org/documentation/linux/usage/cron.md):我使用了Cron GUI并添加了一个定期启动的任务"在重启时#34;

    sudo python3 /home/pi/bluepyscanner.py

  3. systemd(https://www.raspberrypi.org/documentation/linux/usage/systemd.md):我按照链接文档页面上的说明操作,将main.py替换为我的bluepyscanner.py,工作目录替换为/ home / pi

  4. 任何人都可以给我指出可能出错的地方吗?启用蓝牙并根据this安装bluepy。我不认为脚本已经运行,因为与从终端运行时不一样,没有创建bluepyscanlog.txt。

    提前感谢您的时间。

1 个答案:

答案 0 :(得分:0)

请将这些更改添加到您的脚本中

...
 with open('/home/pi/bluepyscanlog.txt', 'a+') as the_file:
...

并在/etc/rc.local

中进行适当的更改
sudo python3 /home/pi/bluepyscanner.py

您可以在/找到bluepyscanlog.txt的先前副本 如果这不起作用蓝牙服务可能在执行rc.local后启动。在/etc/rd.local sudo

中进行此修改
....
sudo service bluetooth start
sudo python3 /home/pi/bluepyscanner.py > /home/pi/bb.log

exit 0

确保exit 0是文件中的最后一个命令。如果您手动创建了rc.local,请确保它获得执行权限。

sudo chmod +x /etc/rc.local

您将看到您的脚本正在执行。 在我的树莓中,这些是bb.log

的内容
Discovered device d2:xx:XX:XX:XX:XX
Device d2:xx:XX:XX:XX:XX (random), RSSI=-62 dB
  Flags = 06
  0x12 = 08001000
  Incomplete 128b Services = xxxxxxxxxxxxxxxxxxxxxxxxx
  16b Service Data = xxxxxxxxxxxxxx
  Complete Local Name = xxxxxxxxxxx
  Tx Power = 05

(Xs掩盖原始内容)