MicroPython-ESP32串口通信-1Z實(shí)驗(yàn)室

出品: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)慎宾。

usb2ttl.png

設(shè)備與設(shè)備之間至少需要接三個(gè)線丐吓。如下圖所示:


串口連接圖.png

關(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í)的話,可能還涉及到:

  1. PC串口調(diào)試助手的使用癞志。
  2. 自定義二進(jìn)制通信協(xié)議往枷。二進(jìn)制數(shù)據(jù)打包與解包,需要用到python的的struct模塊今阳。
  3. 使用PySerial讓PC與ESP32進(jìn)行串口通信

推廣

掃碼關(guān)注微信公眾號(hào)1Z實(shí)驗(yàn)室师溅, 回復(fù)關(guān)鍵詞ESP32串口通信 獲取更多源碼樣例。

source-uart.png

出品:1Z實(shí)驗(yàn)室 (1ZLAB: Make Things Easy)

1Z實(shí)驗(yàn)室 Make Things Easy . 致力于在機(jī)器人+計(jì)算機(jī)視覺+人工智能的重疊區(qū)域, 制作小白友好的教程.

ad.png

參考文獻(xiàn)

串口調(diào)試助手ubuntu桌面版

uPyCraft-UART文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盾舌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蘸鲸,更是在濱河造成了極大的恐慌妖谴,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異膝舅,居然都是意外死亡嗡载,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門仍稀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洼滚,“玉大人,你說我怎么就攤上這事技潘∫0停” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵享幽,是天一觀的道長铲掐。 經(jīng)常有香客問我,道長值桩,這世上最難降的妖魔是什么摆霉? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮奔坟,結(jié)果婚禮上携栋,老公的妹妹穿的比我還像新娘。我一直安慰自己咳秉,他們只是感情好婉支,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滴某,像睡著了一般磅摹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霎奢,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天户誓,我揣著相機(jī)與錄音,去河邊找鬼幕侠。 笑死帝美,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晤硕。 我是一名探鬼主播悼潭,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼舞箍!你這毒婦竟也來了舰褪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤疏橄,失蹤者是張志新(化名)和其女友劉穎占拍,沒想到半個(gè)月后蔚袍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體母截,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霸饲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沐鼠。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绳军,死狀恐怖五督,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蛔翅,我是刑警寧澤敲茄,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站搁宾,受9級(jí)特大地震影響折汞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盖腿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一爽待、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翩腐,春花似錦鸟款、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至等龙,卻和暖如春处渣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛛砰。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國打工罐栈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泥畅。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓荠诬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親位仁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柑贞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容