Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

72 рядки
2.4KB

  1. import time
  2. from thread import start_new_thread
  3. from modules import cbpi
  4. try:
  5. import RPi.GPIO as GPIO
  6. except Exception as e:
  7. pass
  8. class Buzzer(object):
  9. sound = ["H", 0.1, "L", 0.1, "H", 0.1, "L", 0.1, "H", 0.1, "L"]
  10. def __init__(self, gpio, buzzer_type, beep_level):
  11. try:
  12. cbpi.app.logger.info("INIT BUZZER NOW GPIO%s" % gpio)
  13. self.gpio = int(gpio)
  14. self.beep_level = beep_level
  15. self.buzzer_type = buzzer_type
  16. GPIO.setmode(GPIO.BCM)
  17. GPIO.setup(self.gpio, GPIO.OUT)
  18. if buzzer_type == "PASSIVE":
  19. self.p = GPIO.PWM(int(gpio), 5000)
  20. self.state = True
  21. cbpi.app.logger.info("BUZZER SETUP OK")
  22. except Exception as e:
  23. cbpi.app.logger.info("BUZZER EXCEPTION %s" % str(e))
  24. self.state = False
  25. def beep(self):
  26. if self.state is False:
  27. cbpi.app.logger.error("BUZZER not working")
  28. return
  29. def play(sound):
  30. def output(level):
  31. if self.buzzer_type == "PASSIVE" and level == GPIO.LOW:
  32. self.p.stop()
  33. elif self.buzzer_type == "PASSIVE":
  34. self.p.start(50)
  35. else:
  36. GPIO.output(int(self.gpio), level)
  37. try:
  38. for i in sound:
  39. if (isinstance(i, str)):
  40. if i == "H" and self.beep_level == "HIGH":
  41. output(GPIO.HIGH)
  42. elif i == "H" and self.beep_level != "HIGH":
  43. output(GPIO.LOW)
  44. elif i == "L" and self.beep_level == "HIGH":
  45. output(GPIO.LOW)
  46. else:
  47. output(GPIO.HIGH)
  48. else:
  49. time.sleep(i)
  50. if self.buzzer_type == "PASSIVE":
  51. self.p.stop()
  52. except Exception as e:
  53. pass
  54. start_new_thread(play, (self.sound,))
  55. @cbpi.initalizer(order=1)
  56. def init(cbpi):
  57. gpio = cbpi.get_config_parameter("buzzer", 16)
  58. beep_level = cbpi.get_config_parameter("buzzer_beep_level", "HIGH")
  59. buzzer_type = cbpi.get_config_parameter("buzzer_type", "ACTIVE")
  60. cbpi.buzzer = Buzzer(gpio, buzzer_type, beep_level)
  61. cbpi.beep()
  62. cbpi.app.logger.info("INIT OK")