上一篇:按键与外部中断
文章目录
- 前言
- 串口(UART)
- 简介
- MicroPython的UART
- UART 类——双工串行通信
- ESP32(NodeMCU-32S)
- GPIO
- 简介
- 引脚
- 文档
- 代码
- ESP32&&PC通讯
前言
在嵌入式学习中,串口发挥着重要的作用,不仅仅是与模块通讯,还发挥了探明黑箱、代码调试的作用。
串口(UART)
简介
一般来说我们只关心波特率的设置,波特率一般设置为9600或115200,通讯的两端波特率要一样,TX与另一端的RX相接,RX与另一端的TX相接。校验位、数据位、停止位按图中所示设置。
MicroPython的UART
UART 类——双工串行通信
UART 实现标准的 UART/USART 双工串行通信协议。在物理层,它由 2 条线组成:RX 和 TX。通信单位是一个Char,它可以是 8 位或 9 位,一般来说我们选择8位。
可以使用以下方法创建和初始化 UART 对象:
from machine import UART
uart = UART(1, 9600) # init with given baudrate
uart.init(9600, bits=8, parity=None, stop=1) # init with given parameters
支持的参数因开发板而异:
Pyboard:位可以是 7、8 或 9。停止可以是 1 或 2。使用parity=None,仅支持 8 和 9 位。启用奇偶校验后,仅支持 7 位和 8 位。
WiPy/CC3200:位可以是 5、6、7、8。停止可以是 1 或 2。
UART 对象是一个stream
对象,读写是使用标准流方法完成的:
uart.read(10) # read 10 characters, returns a bytes object
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
ESP32(NodeMCU-32S)
GPIO
简介
NodeMCU-32S 是安信可基于 ESP32-32S 模组所设计的核心开发板。该开发板延续了 NodeMCU 1.0经典设计,引出大部分I/O至两侧的排针,开发者可以根据自己的需求连接外设。使用面包板进行开发和调试时,两侧的标准排针可以使操作更加简单方便。
引脚
注意图中的UART。UART0是同电脑通讯的,其他的可以接模块,比如蓝牙:蓝牙模块教程
板子上是CH340和是CP2102的可能有区别。
文档
参阅 machine.UART.
from machine import UART
uart1 = UART(1, baudrate=9600, tx=33, rx=32)
uart1.write('hello') # write 5 bytes
uart1.read(5) # read up to 5 bytes
ESP32有三个硬件UART:UART0、UART1和UART2。它们各自分配了默认GPIO,但根据您的ESP32变体和板,这些引脚可能会与嵌入式闪存、板载PSRAM或外设发生冲突。
任何GPIO都可以用于使用GPIO矩阵的硬件UART,除了可以用作 rx
的仅输入引脚34-39。为了避免冲突,只需在构建时提供tx
和 rx
引脚即可。下面列出的默认管脚。
UART0 | UART1 | UART2 | |
---|---|---|---|
tx | 1 | 10 | 17 |
rx | 3 | 9 | 16 |
代码
ESP32&&PC通讯
import serial, time, struct
esp32 = serial.Serial(port='COM3', baudrate=9600, timeout=.1)
# code for sender
while True:
str_1 = "Hello" # replace random float with a string
str_2 = "World"
packet_bytes = struct.pack('2s2s', str_1.encode(), str_2.encode()) # '2s2s': two strings, each of length 2
esp32.write(packet_bytes) # send 4 bytes, each string is 2 bytes
time.sleep(0.01)
# code for receiver
# while True:
# if esp32.in_waiting: # Get the number of bytes in the input buffer
# packet_bytes = esp32.read(4) # receive 4 bytes
# str_1, str_2 = struct.unpack('2s2s', packet_bytes) # unpack into two strings
# print(str_1.decode(), str_2.decode())
使用USB转TTL,TX接GPIO32,RX接GPIO33
USB端接电脑。Micro usb线也接电脑。
在thonny IDE的option-general中取消只允许一个IDE运行的设置并确认。
开启两个IDE窗口,将上边的代码分成接收和发送两份。接收端解释器为Python3.x,发送端为MicroPython。运行可以观察到结果。
下一篇:PWM