Python 串口收发使用与示例教程

开发
串口通信是连接物理世界和数字世界的桥梁,今天咱们来聊聊怎么用Python搞定串口通信,让你的电脑和各种设备愉快地“对话”。

今天咱们来聊聊怎么用Python搞定串口通信,让你的电脑和各种设备愉快地“对话”。别担心,跟着我,保证轻松上手!

一、准备工作

首先,确保你的电脑有串口(通常是USB转串口),然后安装pyserial库。打开终端或命令行,敲入这行命令:

pip install pyserial

安装好了?那咱们就开始吧!

二、串口基础知识

串口通信,简单说就是设备之间通过一根线,一个字节一个字节地传递信息。在Python里,我们用Serial类来控制这个过程。

三、实战代码

(1) 打开串口

import serial

# 创建串口对象
ser = serial.Serial('COM3', 9600, timeout=1)

# 检查是否成功打开
if ser.isOpen():
    print("串口已打开!")
else:
    print("串口打开失败,请检查设置!")

这里,COM3是串口号,不同的电脑可能不同,9600是波特率,要和设备一致哦!

(2) 发送数据

发送数据很简单,用write()方法就行:

# 准备发送的数据
data_to_send = "Hello, Arduino!".encode()

# 发送数据
ser.write(data_to_send)
print("数据已发送!")

记得把字符串编码成字节哦,因为串口通信处理的是字节流。

(3) 接收数据

接收数据要用readline()或read()方法。这里我们用readline()来读取一行:

while True:
    # 读取一行数据
    data_received = ser.readline().decode().strip()
    
    if data_received:
        print(f"收到数据:{data_received}")
    else:
        break

decode()是把接收到的字节解码回字符串,strip()去掉末尾的换行符。

四、完整示例

把上面的代码整合一下,就得到一个完整的串口收发程序:

import serial

def main():
    # 创建串口对象
    ser = serial.Serial('COM3', 9600, timeout=1)
    
    if not ser.isOpen():
        print("串口打开失败,请检查设置!")
        return
    
    print("串口已打开!")
    
    # 准备发送的数据
    data_to_send = "Hello, Arduino!".encode()
    
    # 发送数据
    ser.write(data_to_send)
    print("数据已发送!")
    
    while True:
        # 读取一行数据
        data_received = ser.readline().decode().strip()
        
        if data_received:
            print(f"收到数据:{data_received}")
        else:
            break
    
    # 关闭串口
    ser.close()
    print("串口已关闭!")

if __name__ == "__main__":
    main()

五、小贴士

  • 记得检查你的串口号和波特率。
  • 发送前最好等待设备准备好,比如Arduino重启后需要等待几秒。
  • 玩串口通信时,记得及时关闭串口,避免资源占用。

六、错误处理与调试

在实际应用中,串口通信可能会遇到各种各样的问题,如设备未连接、波特率不匹配等。为了确保程序的健壮性,我们需要添加错误处理机制:

try:
    # 尝试打开串口
    ser = serial.Serial('COM3', 9600, timeout=1)
except serial.SerialException as e:
    print(f"串口打开失败: {e}")

此外,使用logging模块可以帮助我们记录程序运行过程中的关键信息,便于调试和维护:

import logging

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)

# 记录日志
logger.debug("尝试打开串口...")

七、多设备通信

如果需要同时与多个设备通信,可以创建多个Serial实例,每个实例对应一个设备:

device1 = serial.Serial('COM3', 9600)
device2 = serial.Serial('COM4', 9600)

# 向两个设备发送相同数据
data_to_send = "Hello, Devices!".encode()
device1.write(data_to_send)
device2.write(data_to_send)

八、高级数据处理

在某些场景下,你可能需要解析从设备接收到的复杂数据。Python的强大在于,你可以利用各种库来处理这些数据,比如使用正则表达式提取特定模式的信息:

import re

# 假设设备返回的数据格式为:Temperature: 23.5°C
pattern = r'Temperature: (\d+\.\d+)°C'
data_received = ser.readline().decode().strip()

match = re.search(pattern, data_received)
if match:
    temperature = float(match.group(1))
    print(f"当前温度为:{temperature}°C")

九、小项目实践

为了加深理解,尝试设计一个小项目,比如一个温度监测系统,使用Arduino作为温度传感器,Python作为数据处理中心。这样不仅可以练习串口通信,还能学习数据处理和可视化。

十、结语

串口通信是连接物理世界和数字世界的桥梁,掌握它将开启无限可能。无论是DIY爱好者还是专业开发者,Python都能提供强大的工具箱,帮助你实现创意。

责任编辑:赵宁宁 来源: 手把手PythonAI编程
相关推荐

2024-06-11 00:00:01

用ReactGraphQLCRUD

2023-03-28 09:58:56

Python变量

2020-05-14 10:00:06

Python数据技术

2021-10-25 10:40:03

Java开发微服务

2010-03-23 14:12:43

Python开发Win

2010-03-16 15:38:57

Python串口

2010-03-16 15:38:57

Python串口

2023-05-26 00:14:38

PythonJinJa2

2009-07-03 17:44:06

JSP介绍

2010-03-23 13:30:36

Python VIM

2024-11-04 14:42:12

2009-07-09 16:22:12

WebWork配置

2010-11-23 15:12:03

MySQL授权表

2009-12-10 09:44:43

linuxioctl

2024-06-13 12:11:13

2013-01-23 14:42:26

Android开发NFC

2021-05-06 15:18:09

Shell脚本Linux

2009-08-25 15:59:28

C#串口操作

2017-03-13 16:46:11

Linuxminicomusb串口

2024-09-09 16:30:08

Python编程
点赞
收藏

51CTO技术栈公众号