diff --git a/btscan/main.py b/btscan/main.py new file mode 100644 index 0000000..787e227 --- /dev/null +++ b/btscan/main.py @@ -0,0 +1,76 @@ +"""Scan for and display nearby bluetooth devices""" + +___name___ = "Bluetooth Scan" +___license___ = "MIT" +___dependencies___ = ["sleep", "app", "sim800"] +___categories___ = ["Other", "System"] + +import ugfx, app +from machine import Neopix +np = Neopix() + +import sim800 +from tilda import Buttons +from time import sleep + +btrestore = False +duration = 10 +status_height = 20 + +ugfx.init() +ugfx.clear() +ugfx.set_default_font(ugfx.FONT_FIXED) + +def instructions(duration): + ugfx.Label(5, 180, 240, 30, "Press A to start, B to change scan length or MENU to exit") + ugfx.Label(5, 210, 240, 15, "Scan requires ~{0} seconds".format(duration)) + +if not sim800.btison(): + sim800.btpoweron() + btrestore = True + +instructions(duration) +# while (not Buttons.is_pressed(Buttons.BTN_A)) and (not Buttons.is_pressed(Buttons.BTN_B)) and (not Buttons.is_pressed(Buttons.BTN_Menu)): +while not Buttons.is_pressed(Buttons.BTN_Menu): + a = Buttons.is_pressed(Buttons.BTN_A) + b = Buttons.is_pressed(Buttons.BTN_B) + if not a and not b: + ugfx.poll() + continue + + if b: + duration = duration + 5 + if duration > 60: + duration = 5 + ugfx.clear() + instructions(duration) + continue + + ugfx.clear() + + np.display([0,0]) + np.display([0x000099, 0x000099]) + devs = sim800.btscan(duration*1000) + np.display([0x00, 0x00]) + + if len(devs) == 0: + ugfx.Label(0, 0, 240, 25, "No devices found") + np.display([0x110000,0x110000]) + sleep(1) + np.display([0,0]) + else: + if type(devs[0]) == int: + devs = [devs] + + y = 0 + for dev in devs[:20]: + ugfx.Label(0, y, 240, 25, "{3}dB {1}".format(*dev)) + y += status_height + instructions(duration) + +## App quitting... +if btrestore: + sim800.btpoweroff() + +ugfx.clear() +app.restart_to_default() diff --git a/lib/sim800.py b/lib/sim800.py index ced8e4a..ebd3da5 100644 --- a/lib/sim800.py +++ b/lib/sim800.py @@ -558,7 +558,7 @@ def btscan(timeout=30000): response = command("AT+BTSCAN=1," + str(int(timeout/1000)), timeout+8000, "+BTSCAN: 1") for entry in extractvals("+BTSCAN: 0,", response): splitentry = entry.split(",") - result = [int(splitentry[0]), splitentry[1].strip("\""), splitentry[2], int(splitentry[3])] + result.append([int(splitentry[0]), splitentry[1].strip("\""), splitentry[2], int(splitentry[3])]) return result # Get the requesting paring device name