出品:1Z實(shí)驗(yàn)室 (1ZLAB: Make Things Easy)
概要
在本節(jié)課程阿凱為大家講解了串口通信的接線方式耕肩,ESP32中的串口UART資源與相關(guān)API, 并給出了一個(gè)UART的小應(yīng)用實(shí)例油额。
目錄
串口通信
UART執(zhí)行標(biāo)準(zhǔn)UART/USART雙工串行通信協(xié)議,關(guān)于串口通信你需要的預(yù)備知識(shí)有碼元
, 波特率
眯停, 奇偶校驗(yàn)
等概念。
可以在B站上觀看串口通信科普視頻.
TODO 英文的卿泽, 1Z實(shí)驗(yàn)室后面有精力也會(huì)考慮做一些科普視頻
硬件接線
這里介紹的串口通信的使用方式不局限于ESP32開發(fā)板莺债。
兩個(gè)單片機(jī)設(shè)備進(jìn)行串口通信,或者單片機(jī)通過USB轉(zhuǎn)TTL模塊與PC進(jìn)行串口通信签夭。
如果你對(duì)USB轉(zhuǎn)TTL模塊比較陌生的話齐邦,請(qǐng)打開淘寶自行搜索 USB轉(zhuǎn)TTL模塊 。
另外請(qǐng)留意USB轉(zhuǎn)TTL的芯片型號(hào)第租,你可能需要安裝其驅(qū)動(dòng)措拇。
我手里的這個(gè)USB轉(zhuǎn)TTL的型號(hào)是CH340G, Ubuntu自帶其驅(qū)動(dòng)慎宾。
設(shè)備與設(shè)備之間至少需要接三個(gè)線丐吓。如下圖所示:
關(guān)于USB轉(zhuǎn)TTL
GND
是地線,提供低電平的參考電壓趟据。 接下來就是RX
信息接收端券犁, 還有TX
信息發(fā)送端。 單片機(jī)A的RX
接單片機(jī)B的TX
汹碱, 單片機(jī)B的RX
接單片機(jī)A的TX
粘衬。
**至于VCC接口,可接可不接, 如果USB轉(zhuǎn)TTL的正負(fù)極接反了容易導(dǎo)致電腦主板的燒毀。 **
要注意他們兩個(gè)單片機(jī)的工作電壓是否匹配稚新,例如ESP32的工作電壓是3.3v那么另外一個(gè)VCC接口也只能接VCC勘伺。 有的USB轉(zhuǎn)TTL模塊有3.3v與5v兩個(gè)接口, 可以將ESP32開發(fā)板的VCC
與USB轉(zhuǎn)TTL的3.3v接口相連接枷莉, 或者將ESP32的VIN接口與USB轉(zhuǎn)TTL的5v接口相連接娇昙。
UART構(gòu)造器
不同于其他MicroPython開發(fā)板,ESP32可以自定義管腳作為UART笤妙, 不過ESP32自身只有兩個(gè)UART資源冒掌。
導(dǎo)入UART
模塊
from machine import UART
UART
對(duì)象的構(gòu)造器函數(shù):
UART(id, baudrate, bits, parity, rx, tx, stop, timeout)
-
id
: 串口編號(hào)ESP32的UART資源只有兩個(gè), id有效取值范圍為
1,2
-
bandrate
: 波特率(時(shí)鐘頻率)常用波特率為:
-
9600
(默認(rèn)) 115200
信息接受雙方的波特率必須一致蹲盘,否則會(huì)亂碼股毫。
-
-
bits
:單個(gè)字節(jié)的位數(shù)(比特?cái)?shù))-
8
(默認(rèn)) 7
9
-
-
parity
: 校驗(yàn)方式-
None
不進(jìn)行校驗(yàn)(默認(rèn)) -
0
偶校驗(yàn) -
1
奇校驗(yàn)
-
-
rx
:接收口的GPIO編號(hào)在ESP32上面很多個(gè)管腳都可以自定義為UART管腳有效GPIO編號(hào)如下:
0,2召衔,4铃诬,5,9苍凛,10趣席, 12-19, 21-23醇蝴,25宣肚, 26, 34-36悠栓, 39
-
tx
:發(fā)送口的GPIO編號(hào)有效GPIO管腳編號(hào)同
rx
-
stop
: 停止位個(gè)數(shù)-
1
(默認(rèn)) 2
-
-
timerout
: 超時(shí)時(shí)間取值范圍:
0 < timeout ≤ 2147483647
演示實(shí)例
from machine import UART
uart = UART(2, baudrate=115200, rx=13,tx=12,timeout=10)
UART的API講解
字符串讀寫
uart.read(10) # read 10 characters, returns a bytes object
# 讀入10個(gè)字符霉涨, 返回一個(gè)比特對(duì)象
uart.read() # read all available characters
# 讀取所有的有效字符
uart.readline() # read a line
# 讀入一行
uart.readinto(buf) # read and store into the given buffer
# 讀入并且保存在緩存中
uart.write('abc') # write the 3 characters
# 向串口寫入3個(gè)字符abc
字符讀寫
uart.readchar() # read 1 character and returns it as an integer
# 讀入一個(gè)字符
uart.writechar(42) # write 1 character
# 寫入ASCALL碼為42的字符
uart.writechar(ord('*')) # 等同于uart.writechar(42)
檢測串口是否有數(shù)據(jù)
uart.any() # returns the number of characters waiting
ESP32串口自發(fā)自收實(shí)驗(yàn)
接線 將開發(fā)板的 13號(hào)引腳與12號(hào)引腳用杜邦線相連接
'''
ESP32串口通信-字符串?dāng)?shù)據(jù)自發(fā)實(shí)驗(yàn)
接線 將開發(fā)板的 13號(hào)引腳與12號(hào)引腳用杜邦線相連接。
'''
from machine import UART,Pin
import utime
# 初始化一個(gè)UART對(duì)象
uart = UART(2, baudrate=115200, rx=13,tx=12,timeout=10)
count = 1
while True:
print('\n\n===============CNT {}==============='.format(count))
# 發(fā)送一條消息
print('Send: {}'.format('hello {}\n'.format(count)))
print('Send Byte :') # 發(fā)送字節(jié)數(shù)
uart.write('hello {}\n'.format(count))
# 等待1s鐘
utime.sleep_ms(1000)
if uart.any():
# 如果有數(shù)據(jù) 讀入一行數(shù)據(jù)返回?cái)?shù)據(jù)為字節(jié)類型
# 例如 b'hello 1\n'
bin_data = uart.readline()
# 將手到的信息打印在終端
print('Echo Byte: {}'.format(bin_data))
# 將字節(jié)數(shù)據(jù)轉(zhuǎn)換為字符串 字節(jié)默認(rèn)為UTF-8編碼
print('Echo String: {}'.format(bin_data.decode()))
# 計(jì)數(shù)器+1
count += 1
print('---------------------------------------')
樣例輸出
===============CNT 1===============
Send: hello 1
Send Byte :
8
Echo Byte: b'hello 1\n'
Echo String: hello 1
---------------------------------------
===============CNT 2===============
Send: hello 2
Send Byte :
8
Echo Byte: b'hello 2\n'
Echo String: hello 2
---------------------------------------
===============CNT 3===============
Send: hello 3
Send Byte :
8
Echo Byte: b'hello 3\n'
Echo String: hello 3
---------------------------------------
課程預(yù)告
上文講解了如何使用ESP32的UART資源惭适,如何發(fā)送與接收字符串笙瑟。 如果后續(xù)深入學(xué)習(xí)的話,可能還涉及到:
- PC串口調(diào)試助手的使用癞志。
- 自定義二進(jìn)制通信協(xié)議往枷。二進(jìn)制數(shù)據(jù)打包與解包,需要用到python的的struct模塊今阳。
- 使用PySerial讓PC與ESP32進(jìn)行串口通信
推廣
掃碼關(guān)注微信公眾號(hào)1Z實(shí)驗(yàn)室师溅, 回復(fù)關(guān)鍵詞ESP32串口通信 獲取更多源碼樣例。
出品:1Z實(shí)驗(yàn)室 (1ZLAB: Make Things Easy)
1Z實(shí)驗(yàn)室 Make Things Easy . 致力于在機(jī)器人+計(jì)算機(jī)視覺+人工智能的重疊區(qū)域, 制作小白友好的教程.