首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

张高兴的 MicroPython 入门指南:(三)使用串口通信

编程知识
2024年07月22日 15:18

目录

什么是串口

串口是串行接口的简称,这是一个非常大的概念,在嵌入式中串口通常指 UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)。使用串口进行的通信叫做串行通信,与之相对的一个概念是并行通信。串行通信是指数据一位一位的按顺序传输,而并行通信则是多位数据同时传输。如下图所示,DATA BUSUART 1 之间是并行通信,UART 1UART 2 之间是串行通信。

串口通信的数据帧格式如下图所示,通常一帧共包括 10 位:1 个起始位,8 个数据位和 1 个停止位。有一些特殊的数据帧在停止位前面包含 1 位的奇偶校验位,还有的停止位有 2 个比特。其中起始位为低电平(0),标志着数据传输的开始;停止位为高电平(1),表示数据帧传输结束;数据位则为实际发送的数据,使用高低电平来表示二进制信息,如果发送的内容是文本,那么这段数据为字符的二进制编码(ASCII、UTF-8等)。数据传输的速率我们使用波特率(Baud Rate)来表示,即每秒钟传送的码元符号的个数。比如数据传输速率为 9600 字符/s,那么这时的波特率为 9600。

设备进行串口通信时,设备的连线如下图所示,两个设备的信号线,即发送端(TXD)与接收端(RXD)交叉相连,并且需要共地。在 Raspberry Pi Pico 的引脚上共引出了 2 组串口,即 UART0UART1

使用方法

使用 MicroPython 控制 GPIO 要使用 machine 包中的 UART 类。

from machine import UART

通过构造函数实例化获取串口对象。

UART(id: int, baudrate: int = 115200, ...)
  • id 指串口的编号。对于 Pico 而言只能是 0 或 1。
  • baudrate 用于设置波特率。
  • txrx 参数指定要使用的 tx、rx 引脚。
  • parity 设置校验位。None 无,0 偶数,1 奇数。
  • stop 设置停止位的长度。
  • timeout 设置读取超时时间,单位为毫秒。

使用 init() 方法可以修改串口的设置,方法参数与构造函数的参数一致。常见的用法参考下面的例子:

uart0 = UART(0, 9600)   # 实例化串口 0,波特率为 9600
uart0.init(115200, bits=8, parity=None, stop=1) # 修改串口 0 设置
uart1 = UART(1, baudrate=9600, tx=Pin(8), rx=Pin(9))    # 实例化串口 1 并指定引脚

实例化串口对象后,使用 write(buf: bytearray) 方法发送数据,发送成功会返回字节数,失败则返回 None

data = b'hello world'
uart0.write(data)

接收数据使用 read(nbytes: Optional[int] = None) 方法,nbytes 设置接收的字节数,读取成功会返回一个字节对象,读取超时则返回 None。也可以使用 readline() 方法读取一行。

data = bytes()
data = uart0.read(10)
print(data.decode('utf-8')) # 解码成 utf-8 字符串
print(uart0.readline()) # 从串口读取一行

有些时候需要判断串口中有没有数据,可以使用 any() 方法。

while uart0.any() > 0:
    print(uart0.readline())

💡 提示

在部分开发板上可以像 GPIO 中断一样,使用串口中断 irq(trigger, priority=1, handler=None, wake=machine.IDLE)

使用 deinit() 方法可关闭串口。

uart0.deinit()

使用板载串口相互通信

Pico 上有两组串口 UART0UART1,因此可以使用这两组串口相互通信。

硬件需求

名称 数量
杜邦线 若干

电路

  • UART0 RX(GP1) - UART1 TX(GP4)
  • UART0 TX(GP0) - UART1 RX(GP5)

代码

from machine import UART, Pin
import utime

# 初始化串口
uart0 = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
uart1 = UART(1, baudrate=9600, tx=Pin(4), rx=Pin(5))
# 串口 1 发送数据
txData = b'hello world'
uart1.write(txData)
utime.sleep_ms(100)
# 串口 2 检测接收数据
rxData = bytes()
while uart0.any() > 0:
    rxData += uart0.read(1)
# 解码并打印
print(rxData.decode('utf-8'))

使用板载的 USB 串口

当 Pico 连接到计算机上时,在设备管理器中会新增一个通信端口 COMx,MicroPython 的 REPL 终端就是运行在这个串口之上。那么能使用这个板载 USB 串口传输数据吗?答案是可以的,但与正常串口通信的代码不同,需要使用 select,一个用于异步 I/O 多路复用的模块。将下面的代码烧录到 Pico 中,使用 PuTTY 等串口工具连接 Pico,当 Pico 检测到输入 1 时点亮板载 LED,输入 0 时熄灭。

import machine
import select
import sys

led = machine.Pin('LED', machine.Pin.OUT)
# 获取复用的轮询对象
poll_object = select.poll()
# 将系统标准输入注册为轮询对象
poll_object.register(sys.stdin, 1)

while True:
    # 检查 USB 串口输入
    if poll_object.poll(0):
        # 从 USB 串口中读取
        ch = sys.stdin.read(1)
        if ch == '1'
            led.value(1)
            # 向 USB 串口中写入
            print("LED ON")
        else
            led.value(0)
            print("LED OFF")

参考

  1. Universal asynchronous receiver-transmitter - Wikipedia:https://en.wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter
  2. Serial Communication - Wikipedia:https://en.wikipedia.org/wiki/Serial_communication
  3. BASICS OF UART COMMUNICATION:http://www.circuitbasics.com/basics-uart-communication/
  4. 波特率 - 百度百科:https://baike.baidu.com/item/波特率
  5. MicroPython documentation:https://docs.micropython.org/en/latest/library/machine.UART.html
From:https://www.cnblogs.com/zhanggaoxing/p/18316272
本文地址: http://www.shuzixingkong.net/article/295
0评论
提交 加载更多评论
其他文章 🚀RabbitMQ+redis+Redisson分布式锁+seata实现订单服务
引言 订单服务涉及许多方面,分布式事务,分布式锁,例如订单超时未支付要取消订单,订单如何防止重复提交,如何防止超卖、这里都会使用到。 开启分布式事务可以保证跨多个服务的数据操作的一致性和完整性, 使用分布式锁可以确保在同一时间只有一个操作能够成功执行,避免并发引起的问题。 订单流程(只展示重要的内容
入门到精通rsync和inotify
rsync 作用: 实现文件的备份 备份位置可以是当前主机,也可以是远程主机 备份过程可以是完全备份,也可以是增量备份 功能: 1)类似于cp的复制功能 将本地主机的一个文件复制到另一个位置下 2)将本地主机的文件推送到远程主机: 也可以是从远程主机拉取文件到本地 使用模式: shell模式: 就是
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图
本文介绍基于R语言中的readxl包与ggplot2包,读取Excel表格文件数据,并绘制具有多个系列的柱状图、条形图的方法~
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图 R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图 R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图
iOS开发基础135-Core Data
Objective-C (OC) 中使用 Core Data 是iOS应用开发中管理模型层对象的一种有效工具。Core Data 使用 ORM (对象关系映射) 技术来抽象化和管理数据。这不仅可以节省时间,还能减少编程错误。以下是使用 Core Data 的详细介绍,包括示例代码,以及深入底层的一些
VUE系列之性能优化--懒加载
一、懒加载的基本概念 懒加载是一种按需加载技术,即在用户需要时才加载相应的资源,而不是在页面初始加载时一次性加载所有资源。这样可以减少页面初始加载的资源量,提高页面加载速度和用户体验。 二、Vue 中的懒加载 在 Vue.js 中,懒加载主要用于路由组件的按需加载。Vue Router 提供了非常便
ComfyUI进阶:Comfyroll插件 (七)
前言: 学习ComfyUI是一场持久战,而Comfyroll 是一款功能强大的自定义节点集合,专为 ComfyUI 用户打造,旨在提供更加丰富和专业的图像生成与编辑工具。借助这些节点,用户可以在静态图像的精细调整和动态动画的复杂构建方面进行深入探索。Comfyroll 的节点设计简洁易用,功能强大,
ComfyUI进阶:Comfyroll插件 (七) ComfyUI进阶:Comfyroll插件 (七) ComfyUI进阶:Comfyroll插件 (七)
周边上新,T恤上星:博客园T恤幸运闪系列,一款上架预售,一款上照预览
今天发布2款博客园T恤,一款上架预售,见上图中的前两张照片;一款上照预览,见上图中的后两张照片,未敢上架,先看看大家的评价。在第三版星星款设计被放弃后,我们痴星不改,还是想推出带星星的幸运闪系列T恤
周边上新,T恤上星:博客园T恤幸运闪系列,一款上架预售,一款上照预览 周边上新,T恤上星:博客园T恤幸运闪系列,一款上架预售,一款上照预览 周边上新,T恤上星:博客园T恤幸运闪系列,一款上架预售,一款上照预览
前端使用 Konva 实现可视化设计器(18)- 素材嵌套 - 加载阶段
本章主要实现素材的嵌套(加载阶段)这意味着可以拖入画布的对象,不只是图片素材,还可以是嵌套的图片和图形。