Python 串口通信实战:读取与写入 Zigbee 数据示例

陆遥
陆遥
发布时间:2026-10-14 | 3人浏览过
原创

本文介绍使用 Python 在 Windows 环境下进行串口通信的完整示例,涵盖读取与写入操作。通过 serial 库实现 COM3 端口 115200 波特率的数据收发,演示如何解析 Zigbee 模块传来的 gbk 编码数据,并利用多线程机制在后台接收数据的同时主线程循环发送二进制指令。此外,提供树莓派将默认 Python 切换为 Python3 的系统配置命令,适用于嵌入式开发场景。

Python 串口通信概述

Python 3 串口数据读取演示

近期开发了一个测试用例,涉及 Zigbee 模块通过串口与树莓派连接,由树莓派接收 Zigbee 传输的数据。测试环境采用树莓派 3代 B+ 型号,Zigbee 模块设定为每三秒输出一次数据。需要注意的是,以下代码示例并非在 Linux 系统上运行,而是在 Windows 平台上编写的测试 Demo,使用的 Python 版本为 Python 3。

串口数据读取代码实现

Python 串口数据读取实现


# TODO 串口读取数据
# Auther wjw

import serial # 导入串口包
import time # 导入时间包


ser = serial.Serial("COM3",115200,timeout = 5) # 开启com3口,波特率115200,超时5
ser.flushInput() # 清空缓冲区

def main():
  while True:
    count = ser.inWaiting() # 获取串口缓冲区数据
    if count !=0 :
      recv = ser.read(ser.in_waiting).decode("gbk") # 读出串口数据,数据采用gbk编码
      print(time.time()," --- recv --> ", recv) # 打印一下子
    time.sleep(0.1) # 延时0.1秒,免得CPU出问题



if __name__ == '__main__':
  main()

上述代码已实现 Python 串口数据的读取功能,但在实际应用中,通常还需要具备数据写入能力。

串口数据写入与多线程处理

串口数据写入实现

写入功能主要依赖 write 方法。代码中开启了一个独立线程用于获取串口返回的数据,主线程则进入死循环,每隔一秒发送一次二进制 '1',随后每隔一秒发送一次二进制 '0',以此实现交替发送指令。


import serial
import time
import _thread  # 导入线程包

data_ser = serial.Serial("COM3",115200,timeout = 5)
data_ser.flushInput()



def get_data():
  while True:
    data_count = data_ser.inWaiting()
    if data_count !=0 :
      recv = data_ser.read(data_ser.in_waiting).decode("gbk")
      print(time.time()," --- data_recv --> ", recv)
    time.sleep(0.1)



if __name__ == '__main__':
  
  _thread.start_new_thread(get_data,()) # 开启线程,执行get_data方法
  while 1:
    time.sleep(20) 
    data_ser.write(b'1') # 发送二进制1
    time.sleep(20)
    data_ser.write(b'0') # 发送二进制0

树莓派 Python 环境配置

基本功能已完成。需要注意的是,树莓派系统默认预装的是 Python 2,可通过两条命令将默认 Python 版本修改为 Python 3。


sudo rm /usr/bin/python

sudo ln -s /usr/bin/python3.4 /usr/bin/python

以上即为 Python 读取串口数据的完整示例,更多关于 Python 串口通信的资料,请参阅本站其他相关文章。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表