@@ -136,18 +136,22 @@ def reset(self, mode: int, debug: bool = False) -> None:
136136 return
137137
138138 startup_message = b""
139- while self ._uart .in_waiting : # pylint: disable=no-member
140- more = self ._uart .read ()
141- if more :
142- startup_message += more
143-
144- if not startup_message :
139+ if self ._uart is not None :
140+ while self ._uart .in_waiting : # pylint: disable=no-member
141+ more = self ._uart .read ()
142+ if more :
143+ startup_message += more
144+
145+ if startup_message :
146+ if debug :
147+ try :
148+ print (startup_message .decode ("utf-8" ))
149+ except UnicodeError :
150+ raise RuntimeError (
151+ "Garbled ESP32 startup message"
152+ ) from UnicodeError
153+ else :
145154 raise RuntimeError ("ESP32 did not respond with a startup message" )
146- if debug :
147- try :
148- print (startup_message .decode ("utf-8" ))
149- except UnicodeError :
150- raise RuntimeError ("Garbled ESP32 startup message" ) from UnicodeError
151155
152156 # Everything's fine. Remember mode.
153157 self ._mode = mode
@@ -174,13 +178,14 @@ def start_bluetooth(self, debug: bool = False) -> Adapter:
174178 # Choose Bluetooth mode.
175179 self ._chip_select .switch_to_output (False )
176180
177- self ._uart = busio .UART (
178- self ._tx or board .ESP_TX ,
179- self ._rx or board .ESP_RX ,
180- baudrate = 115200 ,
181- timeout = 0 ,
182- receiver_buffer_size = 512 ,
183- )
181+ if self ._uart is None :
182+ self ._uart = busio .UART (
183+ self ._tx or board .ESP_TX ,
184+ self ._rx or board .ESP_RX ,
185+ baudrate = 115200 ,
186+ timeout = 0 ,
187+ receiver_buffer_size = 512 ,
188+ )
184189
185190 # Reset into Bluetooth mode.
186191 self .reset (ESP32 .BLUETOOTH , debug = debug )
@@ -189,9 +194,11 @@ def start_bluetooth(self, debug: bool = False) -> Adapter:
189194 self ._gpio0_rts .switch_to_output ()
190195 # pylint: disable=no-member
191196 # pylint: disable=unexpected-keyword-arg
192- self ._bleio_adapter = _bleio .Adapter (
193- uart = self ._uart , rts = self ._gpio0_rts , cts = self ._busy_cts
194- )
197+ if self ._bleio_adapter is None :
198+ self ._bleio_adapter = _bleio .Adapter (
199+ uart = self ._uart , rts = self ._gpio0_rts , cts = self ._busy_cts
200+ )
201+
195202 self ._bleio_adapter .enabled = True
196203 return self ._bleio_adapter
197204
@@ -201,8 +208,6 @@ def stop_bluetooth(self):
201208 return
202209 self ._bleio_adapter .enabled = False
203210 self .reset (ESP32 .NOT_IN_USE )
204- self ._uart .deinit ()
205- self ._uart = None
206211
207212 def start_wifi (self , debug : bool = False ) -> SPI :
208213 """Start WiFi on the ESP32.
0 commit comments