使用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-
發佈留言