4
4
import sys
5
5
import time
6
6
import machine
7
+ from micropython import schedule
7
8
8
9
if sys .platform != "esp32" :
9
10
from typing import Literal
@@ -30,51 +31,34 @@ class AudioPlayerUnit:
30
31
audio_player_0 = AudioPlayerUnit(2, port=(33, 32))
31
32
"""
32
33
34
+ _uart_instance = None
35
+
33
36
def __init__ (self , id : Literal [0 , 1 , 2 ] = 2 , port : list | tuple = None , verbose = False ):
37
+ if AudioPlayerUnit ._uart_instance is not None :
38
+ AudioPlayerUnit ._uart_instance .deinit ()
39
+ verbose and print ("UART instance exit, deinit uart obj" )
40
+
34
41
self .uart = machine .UART (id , tx = port [1 ], rx = port [0 ])
35
42
self .uart .init (9600 , bits = 8 , parity = None , stop = 1 )
36
43
self .uart .irq (handler = self ._handler , trigger = machine .UART .IRQ_RXIDLE )
37
- self .uart . read ()
44
+ AudioPlayerUnit . _uart_instance = self .uart
38
45
self .verbose = verbose
39
46
self .raw_message = ""
40
47
self .command_num = 0
41
48
self .is_recieved = False
42
49
self .received_data = [False ]
43
50
self .play_status = None
51
+ self .uart .read ()
44
52
45
53
def _handler (self , uart ) -> None :
46
54
data = uart .read ()
55
+ schedule (self ._handler_data , data )
56
+
57
+ def _handler_data (self , data ):
47
58
if data is not None and len (data ) > 5 :
48
59
self .verbose and print (
49
60
"Received message:" , " " .join (f"0x{ byte :02X} " for byte in data ).split ()
50
61
)
51
- # self.verbose and print(data[0] == self.command)
52
- # self.verbose and print(data[1] == (~self.command) & 0xFF)
53
- # if self.retun_value is not None:
54
- # self.verbose and print(data[2:4] == bytes(self.retun_value))
55
- # else:
56
- # self.verbose and print("True")
57
- # self.verbose and print(
58
- # data[-1]
59
- # == (
60
- # self.command + ~self.command
61
- # & 0xFF
62
- # + sum(data[4:-1])
63
- # + (0 if self.retun_value is None else sum(self.retun_value))
64
- # )
65
- # & 0xFF
66
- # )
67
- # self.verbose and print(
68
- # (
69
- # hex(
70
- # self.command
71
- # + (~self.command & 0xFF)
72
- # + sum(data[4:-1])
73
- # + (0 if self.retun_value is None else sum(self.retun_value))
74
- # & 0xFF
75
- # )
76
- # )
77
- # )
78
62
if (data [0 ] == 0x0A and self .command == 0x05 ) or (
79
63
data [0 ] == self .command and data [1 ] == (~ self .command & 0xFF )
80
64
):
@@ -99,7 +83,7 @@ def _handler(self, uart) -> None:
99
83
# self.check_tick_callback()
100
84
else :
101
85
self .verbose and print ("Invalid frame received: header/footer mismatch" )
102
- uart .read ()
86
+ self . uart .read ()
103
87
104
88
def _wait_for_message (self , time_out : int = 500 ):
105
89
self .is_recieved = False
@@ -146,7 +130,7 @@ def check_play_status(self):
146
130
audio_player_0.check_play_status()
147
131
"""
148
132
self ._send_message (0x04 , [0x00 ], [0x02 , 0x00 ])
149
- return self ._wait_for_message (500 )[0 ]
133
+ return self ._wait_for_message (600 )[0 ]
150
134
151
135
def play_audio (self ) -> int : # 可从暂停处开始播放
152
136
"""Play the audio.
@@ -165,7 +149,7 @@ def play_audio(self) -> int: # 可从暂停处开始播放
165
149
audio_player_0.play_audio()
166
150
"""
167
151
self ._send_message (0x04 , [0x01 ], [0x02 , 0x00 ])
168
- return self . _wait_for_message ( 500 )[ 0 ]
152
+ time . sleep ( 0.6 )
169
153
170
154
def pause_audio (self ) -> int : # 暂停播放
171
155
"""Pause the audio.
0 commit comments