ESP32的UART串口通信(基於micropython)
摘要
關於esp32基於micropython開發的資料不多,如MicroPython 文檔,里面的例程不多。在UART串口通信上的例程更少,故今日來分享一下個人的學習收獲。
軟硬件環境
硬件有ESP-WROOM-32,TJC3224K028_011串口屏,USB轉串口模塊,杜邦線若干
軟件有thonny,正點原子的XCOM,USART HMI,win10系統,還需要裝好串口驅動。
正文
I have an ESP32
我學習ESP32的途徑主要有MicroPython 文檔和randomnerdtutorials。
esp32 上有三對UART串口,一般情況下esp32開發板的串口0是用來燒錄的,串口1接了外置sd卡,所以最好使用閑置的串口2,避免發生沖突,方便調試。
首先,初始化串口2,並設置波特率為115200。關於初始化串口,還有一些參數可添加,此處這兩個就夠了,詳情可參考此處。
from machine import UART # 導入串口模塊
uart = UART(2, 115200) # 初始化一個串口
然后通過幾個函數,進行數據的收發。
uart.read() # 讀取所有收到的信息
uart.write('abc') # 發送abc三個字符
關於發送數據,有點py基礎的人應該都知道字符串前加上標識表是不同類型的字符,如:詳情可參考此處
'\xff' # 默認字符串,該轉義的會轉義
u'\xff' # 同上
r'\xff' # 不轉義字符串
b'\xff' # 二進制字符串
而對於串口屏的數據發送,最好還是采用b'\xff'
的格式,否則會出現結束符無法被串口屏識別的情況。如
上圖中有效的結束符只有第四句uart.write(b"\xff\xff\xff")
,uart.write(r"\xFF\xFF\xFF")
也不行,我試過了,反正用二進制發送准沒錯。
建議修改句也用二進制發送,以免出現莫名其妙不可預知的問題。
好了,此時基礎的數據收發已經學會了,現在我們需要整串口屏了
I have a 串口屏
關於串口屏的學習建議參考此處,講的非常清楚。
通過USART HMI搭一個用來演示的界面,圖中藍框選中的是數字控件n0
,右下角選中的是控件所顯示的值val
,我們可以通過修改n0的val值n0.val
來改變顯示的數字。
好的,那我們通過usb轉串口模塊把ESP32的串口2連接到電腦,先在USART HMI上調試一下。
先把上面的代碼稍加修改后復制下來粘到thonny里
# code: gb2312 # 在串口屏中使用的字庫的編碼是gb2312
from machine import UART # 導入串口模塊
import time # 導入時間模塊
uart = UART(2, 115200) # 初始化串口2,並設置波特率為115200
uart.write(b"n0.val=700") # 以二進制形式發送修改文本
time.sleep(2) # 休息兩秒,此行和上面那個導入時間模塊的代碼刪了也行
# 加上是為了在回顯中能讓修改式和結束符能分行
uart.write(b"\xff\xff\xff") # 發送結束符
uart.write(b"n0.val=600")
time.sleep(2)
uart.write(b"\xff\xff\xff")
print(1) # 打印個1以表結束
我們來看看輸出
Ehn! ESP32串口屏
用杜邦線把串口屏和ESP32鏈接起來,相信應該不用我講怎么用杜邦線連接串口屏和ESP32吧。 注意rx和tx要反接。
接好后我們就能通過ESP32向串口屏發送修改指令了。
介於桌面太亂,就不拍實物展示了。
所有文件
https://download.csdn.net/download/m0_50696464/18788059
碎碎念
你問我為什么用mpy(thonny)而不用c(arduino IDE)?這不重要。個人對py情有獨鍾,但凡能用py的絕不用c。說實話,比如點個燈
點燈大師就是我用mpy寫就兩三行的事,用C語言寫簡直要把我折磨死對不起是我才疏學淺學業不精知難而退雖說很多人都說用C語言比較好效率比較高運行速度比較快,但作為一個只想做點小東西的非嵌入式相關專業的學生,要我去接觸底層的hal庫或是寄存器之類的簡直是要我的命。人生苦短,我用python,這句話可不只是隨便說說的啊。
相比於串口屏,純lcd模塊太難用了。接口多就算了,各種函數看的我真的腦殼痛,寫了幾百行,整個界面還是丑。串口屏就四個接口,VCC、GND、RX、TX用起來真心比lcd方便多了,還有上位機軟件能搭建漂亮的圖形界面,操作起來非常友好。如果不想在這方面走太深學個串口屏完全夠用了,學lcd模塊操作真沒啥必要。不過價格上確實是lcd便宜,這沒話說。