使用UART與其他設備溝通非常方便,但是在MicroPython中,因為USB已經提供給REPL使用了,所以沒辦法和UART的功能同時使用。
所以必須設計一種方式來讓REPL與UART的功能可以任意切換。
這邊使用偵測GPIO腳位狀態的方式來達成,將GPIO 23(範例)連接至GND時,就可以進入UART模式,否則維持在預設的REPL模式:
from machine import Pin, Timer, UART
read_timer = Timer(0)
tag_read_data = False
ser_pin = Pin(23, Pin.IN, Pin.PULL_UP) # 腳23設成輸入、啟用上拉電阻。
print(ser_pin.value())
def read_data(t):
global tag_read_data
tag_read_data = True
if ser_pin.value() == 0:
com = UART(1, 9600, tx=1, rx=3)# UART 1設成USB序列埠的預設腳
com.init(9600)
read_timer.init(mode=Timer.PERIODIC, period=10, callback=read_data)
while True:
if tag_read_data:
read = com.readline()
if read != None:
com.write(read)
tag_read_data = False
流程說明:
- 將GPIO 23設成輸入、啟用上拉電阻
- 檢測GPIO 23的狀態,如果沒有與GND相接,值為1,就不執行後續程式,維持在REPL中;當值為0時(與GND相接),就進入UART模式
- 使用ESP 32的Timer 0 來不斷的檢查UART有沒有訊息輸入,如果有,則輸出回去UART
-END-
發佈留言