PySerial库的简单用法 您所在的位置:网站首页 ser是什么 PySerial库的简单用法

PySerial库的简单用法

2024-01-13 04:31| 来源: 网络整理| 查看: 265

import serial

API:pySerial API — pySerial 3.4 documentation

这次尝试适用PySerial库是为了从树莓派小车连接的UWB定位模块的串口中,获取与解析出串口所传输的定位信息。以下是在尝试过程中使用到的一些小代码段~希望记录下来可以帮到大家~

1、查看串口列表:serial.tools.list_ports.comports() ports = serial.tools.list_ports.comports() # 寻找名字"CH340 "的串口 for port, desc, hwid in sorted(ports): if "CH340 " in desc: self.UWB_port = port print("INFO:UWB所占用串口为:{}: {} [{}]".format(port, desc, hwid))

可能遇到的问题1:串口名称不对

如果是在windos系统中查看UWB串口占用情况,可在“设备管理器”查看串口名称,通常名称中包含“CH340”之类的字符串。

如果是在树莓派的系统中查看UWB串口占用情况,发现在树莓派系统里面是不叫“CH340”的名字的。比如我的串口名叫"/dev/ttyUSB1",名字里面的数字可能和你插usb的顺序有关。

可以通过命令行查看一下:

树莓派系列(一)-——————树莓派usb串口的使用_由山的博客-CSDN博客_树莓派usb串口通信

可能遇到的问题2:提示AttributeError: module 'serial' has no attribute 'tools'

        解决方法:

        如果已经安装好了serial和pyserial库,且查看过包是存在tools这个文件夹的,可以通过加入下面一行,可能可以解决。

2、打开串口:ser.Serial() 方法1: ser = serial.Serial('/dev/ttyUSB0') 方法2: >>> ser = serial.Serial() >>> ser.baudrate = 19200 >>> ser.port = 'COM1' >>> ser Serial(port='COM1', baudrate=19200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0) >>> ser.open() >>> ser.is_open # 判断串口是否打开 bool True >>> ser.close() >>> ser.is_open False 3、读串口信息

read(size=-1):size – Number of bytes to read.

readline():按顺序读取串口数据,当不指定timeout时,会一直等待读新的一行。

readlines():需要有timeout和EOF(end of file)

*不太理解:

Python file的flush()方法:用来刷新缓冲区。将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要被动等待输出缓冲区写入。一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。

(缺点也很明显,读写磁盘都属于IO操作,那么这样频繁的写磁盘,就会导致大量IO,对系统的性能有影响)

*进度条

4、其他

inWaiting(): Get the number of bytes in the input buffer获取输入缓冲区中的字节数。

在实际操作中遇到的棘手问题:

当串口数据传输速度较快,而处理速度跟不上的时候,就会出现实时性较差的情况。比如,在通过UWB室内定位,获取坐标的场景下,或者通过陀螺仪获取角度时,对实时性要求比较高,来计算小车旋转角度。如果实时性不强,会出现很大的偏差,导致小车行驶方向出现问题。

解决方法:目前是通过inWaiting()来进行处理(如下代码),在处理前先读取缓冲区所有数据,再读取想要的数据量。

count = ser.inWaiting() if count>100: ser.read(count)

5、关闭串口:ser.close()



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有