python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python pyserial模块串口通信

使用python pyserial模块串口通信方式

作者:究理观心

这篇文章主要介绍了使用python pyserial模块串口通信方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python pyserial模块串口通信

最近调试通信模块时,需要用UART串口输入AT命令控制模块,手动输入不便于自动化,所以就学习了下使用python进行串口控制。 

serial模块安装

pip install pyserial  

常用的方法函数

导入串口模块import serial;

打开串口ser = serial.Serial(端口名称,...其他参数),ser.open()方法可以在close之后再次打开相应端口;

关闭串口ser.close();

通过串口写入ser.write(b''),参数需要使用字节bytes类型,如果是str类型,则可以使用encode('utf-8')的方式进行转换;

读取模块信息的方法如下,x = ser.read()读取一个字节,x=read(n)读取n个字节,readline()可以用来读取一行。 

查看COM口工具 

python -m serial.tools.list_ports -v

可以列出所有串口名称及属性。 

Serial参数说明 

STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO;

关于UART流控两线方式没有硬件流控,四线方式采用DSR、DTR进行流控,而RS232标准中可以有DSR、DTR的流控方式。

一个简单示例

#!usr/bin/python3.6
import serial
import sys
import os
import time
import re
global MAX_LOOP_NUM
global newCmd
MAX_LOOP_NUM = 10
def waitForCmdOKRsp():
    maxloopNum = 0
    while True:
        line = ser.readline()
        maxloopNum = maxloopNum + 1
        try:
            print("Rsponse : %s"%line.decode('utf-8'))
        except:
            pass
        if ( re.search(b'OK',line)):
            break
        elif(maxloopNum > MAX_LOOP_NUM):
            sys.exit(0)
def sendAT_Cmd(serInstance,atCmdStr,waitforOk):
    print("Command: %s"%atCmdStr)
    serInstance.write(atCmdStr.encode('utf-8'))
    #or define b'string',bytes should be used not str
    if(waitforOk == 1):
        waitForCmdOKRsp()
    else:
        waitForCmdRsp()
ser = serial.Serial("COM5",9600,timeout=30)
sendAT_Cmd(ser,'AT+CFUN=1\r',1)
ser.close()

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文