首页 > 编程语言 >python之pyserial模块

python之pyserial模块

时间:2023-01-15 23:45:16浏览次数:53  
标签:ser python 端口 模块 serial 数据 pyserial

pyserial 模块封装了对串口的访问,兼容各种平台(Windows、Linux、MACOS等)。

其支持的特性如下:

  1. 所有平台基于类的接口相同
  2. 端口可以通过python来设置
  3. 支持不同数据长度、停止位、奇偶校验位、流量控制、RTS/CTS 和 Xon/Xoff 特性
  4. 可以设置是否超时
  5. 读取/写数据很简单,调用read或write方法(同样支持readline、readlines等方法)
  6. 端口设置为二进制传输,没有空字节、CR-LF等处理,这使得这个模块比较好用
  7. 兼容io模块

1 模块安装

需要python2.7或python3.4以上的版本

pip install pyserial

2 模块使用

2.1 模块的初始化

import serial
import serial.tools.list_ports

# 打印所有com列表
li = serial.tools.list_ports.comports()
for ser in li:
    print(ser.name)

# 打开com13,波特率115200
# 以下是windows平台,linux平台是不同的port名,如/dev/ttyS0等
ser = serial.Serial(port="COM13",
                    baudrate=115200,
                    bytesize=serial.EIGHTBITS,
                    parity=serial.PARITY_NONE,
                    stopbits=serial.STOPBITS_ONE,
                    timeout=0.5)

# 判断是否打开成功
if ser.isOpen():
    print (f'{ser.port} is Opened')
else:
    print (f'{ser.port} is Closed')

# 不用串口时可以关闭 
# ser.close()                                                            

2.2 模块的读写

读取/写数据很简单,调用read或write方法(同样支持readline、readlines、writelines等方法),由于端口设置为二进制数据流传输,所以需要通过encode与decode方法将数据流加工为人们易于阅读的utf-8格式。

import serial

# 读串口
# read() - 默认一次读取一个字节,可以通过传入参数指定每次读取的字节数,返回值为bytes类型
# readall() - 读取串口接收的全部数据,返回值为bytes类型
# readlines() - 读取多行数据,返回值为list类型,列表元素类型为bytes类型
ser = serial.Serial("COM13", 115200, timeout=0.5)
for line in ser.readlines():
    print(line.decode('utf-8'))

# 写一个字符串“hello”
write_len = ser.write("hello".encode('utf-8'))
ser.flush() # 等待所有数据写出

ser.close()

2.3 其它方法

方法 说明
ser.isOpen() 查看端口是否被打开
ser.open() 打开端口
ser.close() 关闭端口
ser.read() 从端口读字节数据,默认1个字节
ser.readall() 从端口接收全部数据
ser.write("hello".encode('utf-8')) 向端口写数据
ser.readline() 读一行数据
ser.readlines() 读多行数据,列表元素类型为bytes类型
in_waiting() 返回接收缓存中的字节数
flush() 等待所有数据写出
flushInput() 丢弃接收缓存中的所有数据
flushOutput() 终止当前写操作,并丢弃发送缓存中的数据

参考:

1 pyserial官方文档

2 python学习:python serial

标签:ser,python,端口,模块,serial,数据,pyserial
From: https://www.cnblogs.com/sureZ-learning/p/17054481.html

相关文章

  • python创建6个随机数
    代码块red_balls=[xforxinrange(1,34)]selected_balls=sample(red_balls,6)selected_balls.sort()selected_balls.append(randint(1,16))......
  • python读取pcap流量
    fromscapy.allimport*packet0=rdpcap('G:/testcic/input/ubuntu_chrome_discord_7.pcap')importos#读取dir_path目录下的文件dir_path=r'G:/testcic/input/'fil......
  • Python爬虫-第四章-1-多线程多进程并发爬取Ⅰ
    多线程多进程用的方式#DemoDescribe:多线程写法fromthreadingimportThread#线程frommultiprocessingimportProcess#进程#start--------1,多线程调用的方式一......
  • Python爬虫-第四章-1-多线程多进程并发爬取Ⅱ
    线程池使用案例:一次性开辟一些线程,用户直接给线程池提交任务,线程任务的调度交给线程池#DemoDescribe:线程池和进程池fromconcurrent.futuresimportThreadPoolExecutor,......
  • Python爬虫-第四章-1-多线程多进程并发爬取Ⅲ-爬取某菜市场批发价数据
    #DemoDescribe:爬取北京新发菜地数据importrequestsimportcsvfromconcurrent.futuresimportThreadPoolExecutorfromfake_useragentimportUserAgent'''本章内容:......
  • #python 利用pandas 合并csv/xlsx文件
     上次我们分享了利用powerquery来合并文件进行数据分析,但是Pq有一部分局限性,在现实工作中,我们往往需要合并多个文件去处理数据,如果面对20个甚至更多的文件,pq中的每一步......
  • npm install error python2
    >[email protected]/Users/nyan/personal/workspace/react16.9/node_modules/watchpack-chokidar2/node_modules/fsevents>nodeinstall.jsERROR:root:codef......
  • 公路堵车概率模型Python(Nagel-Schreckenberg交通流模型)
    路面上有N辆车,以不同速度向前行驶,模拟堵车问题。有以下假设:假设某辆车的当前速度是v如果前方可见范围内没车,下一秒车速提高到v+1如果前方有车,前车的距离为d,......
  • 和菜鸟一起学OK6410之ADC模块
    android上跑起来时也比较灵敏了,GPIO模拟的SPI也可以工作了,看了会书,修正了会,回到宿舍也已经9点多了。想想,OK6410上还有个AD模块呢。网上找了找资料,发现还是可以去尝试下可不......
  • Python 计算HHI指数
    UntitledIn [1]:importpandasaspdInfo=pd.read_excel("BANK_Info.xlsx")Combas=pd.read_excel("Bank_Combas.xlsx")Comins=pd.read_excel("Bank......