使用 pySerial 和 Arduino(ATmega328P)微控制器进行串口编程的入门教程
在本教程中,您将学习如何在电脑上安装 pySerial,并使用 pySerial 的功能与 Arduino 或微控制器(ATmega328P)进行通信。
在这里,我将教一位初出茅庐的工程师或爱好者如何使用 pySerial 库,通过串口(虚拟 COM 端口)将他的嵌入式系统项目连接到 Windows 11 电脑上。
使用 pySerial 进行 Python 串口编程(适合初学者)
源代码
本教程中使用的全部源代码(Python 和 Arduino)均可从我们的网站下载。
•使用 pySerial 和 Arduino 的 Python 串口编程教程
•GitHub 代码仓库
在 Windows 11 上安装 Python 和 pySerial
首先,通过在命令提示符中输入 Python 来检查系统上是否已安装 Python。
如果 shell 报错找不到 python,或 python 未被识别为内部/外部命令。
现在你可以前往 Python 官方下载页面进行安装。
你可以安装 Python 解释器。
现在你可以通过进入命令提示符并输入以下命令来安装 pySerial 库。
或
PIP 是一个用于下载和管理 Python 语言软件库的工具,它自带解释器。
这是截图
你可以使用 pip list 命令检查系统上是否安装了 pyserial
使用 Thonny IDE 进行 Python 串口编程
如果之前安装Python觉得比较复杂,你可以选择另一个简单的开源IDE——Thonny。
使用 Thonny 非常简单,
Thonny 内置了 Python 解释器,并已预装 pySerial。
无需安装 Python 解释器或 PySerial,您可以轻松跳过上述步骤。
使用 PySerial 和 Python 打开串口
现在我们将使用 pySerial 打开串口连接。你可以使用 Thonny IDE 或命令行中的 Python。
首先将您的Arduino连接到电脑,并通过设备管理器查看COM端口号。
COM端口编号在您的系统上可能不同。
现在我们将创建一个简单的脚本。
这段代码不会有任何作用,
我们接下来将使用“COM24”端口号打开连接。
然后可以使用 SerialObj 这个对象/变量来配置串行参数,例如波特率、奇偶校验以及发送和接收数据。
然后我们使用.close()方法关闭端口。
如果你运行这段代码没有出现错误,那就说明你的设置已正确配置。
在 Thonny 中,你可以通过按 F5 键来创建文件并运行它。
在 Windows 命令行中,将代码保存为 serial_open.py 或任意你喜欢的名称,然后运行它。
配置串口波特率及其他参数
以下代码将教你如何操作:
我们正在配置波特率参数为9600,您可以使用任何已定义的波特率值,例如4800、9600、19200等。
接下来你定义了字节大小 = 8,这意味着8位表示一个比特
现在我们设置 parity = 'N',表示无奇偶校验,这是通用设置。
其他奇偶校验设置为
现在我们定义停止位的数量
因此,你可以使用1.5和2的停止位,但这些并不常用。
大多数情况下,您将使用8N1配置进行串行通信。
•8 位数据
•无奇偶性
•1 停止位
您也可以通过以下方式创建一个序列对象。
这种延迟通常用于为连接的设备(例如Arduino)提供足够的时间,在串口打开后进行复位并准备好。
串口通信期间处理 pySerial 异常
在某些情况下,打开串行端口可能会失败,原因包括端口不可用、已被其他应用程序占用,或系统中不存在该端口。
pySerial 库提供了 serial.SerialException 异常来处理此类错误。
通过捕获此异常,Python 程序可以检测到失败的原因,显示适当的错误信息,并优雅地恢复,而不是崩溃。
以下是一段用于处理 pySerial 异常的代码片段
从电脑向Arduino传输数据
在本节中,我们将使用 Python 向 PC 的串口写入一个字节,该字节将被 Arduino 接收。
运行在电脑上的Python脚本通过虚拟COM端口将ASCII字符顺序发送到Arduino Uno。
如上图所示,当Arduino接收到ASCII字符'A'时,会通过连接到数字引脚12的LED进行闪烁来响应。
请注意,当通过串行端口发送数据时,需要使用字节数组类型而不是字符串类型。
在Arduino端
Arduino端的程序持续通过串口等待接收字符“A”。
当接收到字符时,连接到数字引脚12的LED会亮起2秒钟。使用switch语句来识别接收到的字符,并执行相应的操作,如下所示。
使用 Python 和 pySerial 从 Arduino 接收串行数据
在这里,Arduino 通过串行端口将文本字符串“Hello from Arduino”发送到 Windows 或 Linux 电脑。
运行在电脑上的Python脚本使用pySerial库提供的readline()函数接收传输的数据,并将接收到的文本显示在控制台。
pySerial 库提供了以下用于从串行端口读取数据的功能:
•readline()
•读取()
readline() 函数会读取输入数据,直到遇到换行符(\n)。然后返回包括换行符在内的所有已读字节。
如果未收到换行符,函数将等待直到收到换行符或指定的读取超时时间到期。如果未配置超时,则 readline() 将无限期等待。
PC侧代码
Arduino 侧
在Arduino端,文本字符串存储在一个字符数组(char数组)中,如下所示。Arduino会以大约每秒一次的间隔,通过串口持续向PC传输该字符串。
一旦字符串被PC接收,数据就会以命令行形式显示如下所示。
将独立微控制器连接到电脑
在本节中,您将学习如何通过Python应用程序,使用UART串行通信协议,将独立的微控制器(如8051(AT89S51或W78E052DDG)、MSP430或PIC16F系列)与PC连接并进行数据交换。
由于独立的微控制器通过UART级别的串行信号进行通信,因此需要使用USB转串口转换器才能与电脑建立通信。
USB转串口转换器通过将微控制器的UART信号转换为USB数据,作为微控制器与计算机之间的桥梁,使操作系统能够识别该数据为虚拟COM端口。
连接后,Python应用程序可通过该虚拟COM端口传输和接收串行数据,从而实现与微控制器的通信,如下图所示。
这是一个连接到电脑的ATmega328P。
本文编译自hackster.io





