猛禽洛的程式筆記庫

[MicroPython] 在ESP 32上使用UART經由USB傳遞資料

使用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-

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *