S&B Volcano vaporizer remote control with Pi Pico W
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

state_connect.py 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #!/usr/bin/env python
  2. import uasyncio as asyncio
  3. from poll import cache_services_characteristics
  4. class StateConnect:
  5. def __init__(self, lcd, state):
  6. self.lcd = lcd
  7. self.state = state
  8. self.lock = asyncio.Lock()
  9. def enter(self, val = None):
  10. self.step = False
  11. self.done = False
  12. self.client = None
  13. self.connector = asyncio.create_task(self.connect(val))
  14. def exit(self):
  15. self.connector.cancel()
  16. if self.lock.locked():
  17. self.lock.release()
  18. return self.client
  19. async def connect(self, d):
  20. async with self.lock:
  21. self.done = False
  22. if self.state:
  23. client = await d.device.connect()
  24. async with self.lock:
  25. self.step = True
  26. await cache_services_characteristics(client)
  27. else:
  28. await d[0].disconnect()
  29. client = None
  30. async with self.lock:
  31. self.done = True
  32. self.client = client
  33. async def draw(self):
  34. self.lcd.fill(self.lcd.black)
  35. self.lcd.text("Volcano Remote Control App", 0, 0, self.lcd.green)
  36. self.lcd.text("Connecting to Bluetooth device", 0, 10, self.lcd.red)
  37. keys = self.lcd.buttons()
  38. if keys.once("y"):
  39. print("user abort")
  40. if self.state:
  41. return 5 # disconnect
  42. else:
  43. return 0 # scan
  44. async with self.lock:
  45. if self.done:
  46. if self.state:
  47. return 2 # selection
  48. else:
  49. return 0 # scan
  50. else:
  51. if self.state == False:
  52. self.lcd.text("Disconnecting...", 0, int(self.lcd.height / 2) - 5, self.lcd.white)
  53. else:
  54. if self.step == False:
  55. self.lcd.text("Connecting...", 0, int(self.lcd.height / 2) - 5, self.lcd.white)
  56. else:
  57. self.lcd.text("Fetching parameters...", 0, int(self.lcd.height / 2) - 5, self.lcd.white)
  58. self.lcd.show()
  59. return -1 # stay in this state