从零开始的MicroPython(四) 串口

上一篇:按键与外部中断

前言

在嵌入式学习中,串口发挥着重要的作用,不仅仅是与模块通讯,还发挥了探明黑箱、代码调试的作用。

串口(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。为了避免冲突,只需在构建时提供txrx 引脚即可。下面列出的默认管脚。

UART0UART1UART2
tx11017
rx3916

代码

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

image

USB端接电脑。Micro usb线也接电脑。

在thonny IDE的option-general中取消只允许一个IDE运行的设置并确认。

开启两个IDE窗口,将上边的代码分成接收和发送两份。接收端解释器为Python3.x,发送端为MicroPython。运行可以观察到结果。

下一篇:PWM

  • 30
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值