简体   繁体   中英

Running a bluepy scan script on boot on a Raspberry Pi 3b

Good day. I am using a Raspberry Pi 3 model B running Raspbian Stretch. I have a Python script named bluepyscanner.py which is basically a Python 3 variation of the bluepy scanner sample code with a small addition for a .txt log file.

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))

I can run this script perfectly when I launch it from terminal with

$ sudo python3 /home/pi/bluepyscanner.py 

However, I am somehow unable to get this script to run automatically on boot. I have tried the following three methods separately and none has worked so far:

  1. rc.local (h ttps://www.raspberrypi.org/documentation/linux/usage/rc-local.md ): I appended the following line to /etc/rc.local

    python3 /home/pi/bluepyscanner.py

  2. Cron ( https://www.raspberrypi.org/documentation/linux/usage/cron.md ): I used the Cron GUI and added a recurring task to be launched "at reboot"

    sudo python3 /home/pi/bluepyscanner.py

  3. systemd ( https://www.raspberrypi.org/documentation/linux/usage/systemd.md ): I followed the instructions on the linked documentation page with main.py replaced by my bluepyscanner.py and the working directory replaced by /home/pi

Can anyone give me a pointer on what might have gone wrong? Bluetooth is enabled and bluepy is installed in accordance with this . I don't think the script has run because, unlike when ran from terminal, bluepyscanlog.txt was not created.

Thank you in advance for your time.

Please make these changes into your script

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

and make the proper changes in your /etc/rc.local

sudo python3 /home/pi/bluepyscanner.py

May be you can see previous copies of bluepyscanlog.txt at / If this doesn't do the job bluetooth service may be starting after rc.local is executed. Do this modifications in your /etc/rd.local as sudo

....
sudo service bluetooth start
sudo python3 /home/pi/bluepyscanner.py > /home/pi/bb.log

exit 0

Ensure that exit 0 is the last command in the file. If you created rc.local manually ensure it gets execution rights.

sudo chmod +x /etc/rc.local

You will see that your script is being executed. In my raspberry these are the contents of 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 mask original content)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM