为了通过python编程控制串口发送数据给单片机,编写此程序
使用serial模块完成串口的读取和数据的收发
重点掌握以下几个api的使用方法:
- 读取串口设备列表:list(serial.tools.list_ports.comports())
- 初始化串口对象:ser=serial.Serial()
- 打开串口:ser.isOpen()
- 发送数据:ser.write()
- 读取数据:ser.read()
- 关闭串口:ser.close()
完整代码如下:
# !/usr/bin/env python
# -*- coding: utf-8 -*-
"""
# ============================================================
# @Date : 2022/05/16 21:50:12
# @Author : miles
# @Email : [email protected]
# @File : serial_demo.py
# @IDE : PyCharm
# @Func : Describes the function of the file
# @Note : pip install pyserial
# ============================================================
"""
import time
import serial.tools.list_ports
if __name__ == '__main__':
# 读取串口列表
ports_list = list(serial.tools.list_ports.comports())
if len(ports_list) <= 0:
print("无串口设备")
else:
print("可用的串口设备如下: ")
print("%-10s %-30s %-10s" % ("num", "name", "number"))
for i in range(len(ports_list)):
comport = list(ports_list[i])
comport_number, comport_name = comport[0], comport[1]
print("%-10s %-30s %-10s" % (i, comport_name, comport_number))
# 打开串口
port_num = ports_list[0][0]
print("默认选择串口: %s" % port_num)
# 串口号: port_num, 波特率: 115200, 数据位: 7, 停止位: 2, 超时时间: 0.5秒
ser = serial.Serial(port=port_num, baudrate=115200, bytesize=serial.SEVENBITS, stopbits=serial.STOPBITS_TWO,
timeout=0.5)
if not ser.isOpen():
print("打开串口失败")
else:
print("打开串口成功, 串口号: %s" % ser.name)
# 串口发送字符串数据
data = "%d:%d" % (130, 1)
print("发送数据: %s" % data)
write_len = ser.write(data.encode('utf-8'))
print("串口发出{}个字节".format(write_len))
# 串口发送十六进制数据
# data = 0xAB
# print("发送数据: %X" % data)
# write_len = ser.write(bytearray([data]))
# print("串口发出{}个字节".format(write_len))
# 等待串口返回信息并输出
t0 = time.time()
while True:
com_input = ser.read(10)
t1 = time.time()
t = t1 - t0
print("\r等待串口接收数据, %.2f 秒" % t, end="")
if com_input or t >= 3:
if com_input:
print("\n%s" % com_input)
else:
print("\n%s" % "没有接收到任何数据")
break
# 关闭串口
ser.close()
if ser.isOpen():
print("串口未关闭")
else:
print("串口已关闭")
在电脑上插入USB转串口模块连接到单片机,运行结果如下: