mic_serial.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import os
  2. import serial
  3. import time
  4. class kws_mic:
  5. def __init__(self, port,kwsquence, baudrate=115200, timeout=1):
  6. self.ser = None
  7. self.port = port
  8. self.baudrate = baudrate
  9. self.timeout = timeout
  10. self.running = False
  11. self.kws_queue = kwsquence
  12. def open(self):
  13. try:
  14. self.ser = serial.Serial(
  15. port=self.port,
  16. baudrate=self.baudrate,
  17. timeout=self.timeout
  18. )
  19. if self.ser.is_open:
  20. print(f"serial {self.port} open")
  21. self.running = True
  22. except Exception as e:
  23. print(f"open serial fail: {e}")
  24. def close(self):
  25. if self.ser and self.ser.is_open:
  26. self.running = False
  27. self.ser.close()
  28. print(f"serial {self.port} close")
  29. def send_data(self, data):
  30. if self.ser and self.ser.is_open:
  31. try:
  32. self.ser.write(data.encode('utf-8'))
  33. except Exception as e:
  34. print(f"send fial: {e}")
  35. def receive_data(self):
  36. step = 1
  37. while self.running:
  38. if self.ser and self.ser.is_open:
  39. try:
  40. data = self.ser.read()
  41. if data:
  42. dealdata = bytearray(data)[0]
  43. if dealdata == 0xAA and step ==1:
  44. step = 2
  45. elif dealdata == 0x55 and step ==2:
  46. step = 3
  47. elif (dealdata == 0x01 or dealdata == 0x02 or dealdata == 0x03 or dealdata == 0x04 or dealdata == 0x05 or dealdata == 0x06) and step ==3:
  48. step = 4
  49. elif dealdata == 0x00 and step ==4:
  50. step = 5
  51. elif dealdata == 0xFB and step ==5:
  52. # print("kws detected")
  53. self.kws_queue.put("resonse_1")
  54. step = 1
  55. except Exception as e:
  56. print(f"recvice fail: {e}")
  57. time.sleep(0.1)