美文网首页
python的串口连接

python的串口连接

作者: 乔大叶_803e | 来源:发表于2020-03-26 11:20 被阅读0次

python真的是强大。
还能处理串口的数据。

今天主要解释下串口如何进行通信的。

首先进行串口通信用的是

import serial

也就是这个包起的作用。

首先我们可以先测试哪个端口是可以使用的。

# coding:utf-8
 
import serial.tools.list_ports
 
plist = list(serial.tools.list_ports.comports())
 
if len(plist) <= 0:
    print("没有发现端口!")
else:
    plist_0 = list(plist[0])
    serialName = plist_0[0]
    serialFd = serial.Serial(serialName, 9600, timeout=60)
    print("可用端口名>>>", serialFd.name)

查看现在可以用的端口数

我的电脑输出的是com3

serialport = serial.Serial(serialName, 115200, timeout=1,parity=serial.PARITY_EVEN, rtscts=1)

serialName 就是端口名称,也就是上边自动检测到的com3
其余的参数是 波特率

bytesize为每个字节的比特数,设置值为FIVEBITS, SIXBITS,SEVENBITS, EIGHTBITS 5-8比特;

parity设置校验位PARITY_NONE, PARITY_EVEN,PARITY_ODD PARITY_MARK,

PARITY_SPACE,用来设置校验位;stopbits停止位,用来指示字节完成,可以选择的设置STOPBITS_ONE,

timeout (float)读出超时设置;xonxoff (bool)软件流控开关;

        if x.isOpen():
            print("open success")
        else:
            print("open failed")

检查串口是否正常打开,只有打开了才能进行通信

现在基本的准备工作做完了,下来是进行发送和接收信息。


处理串口的发送代码
def fasong():
    f = 0
    while f <1:
        print("zai fa song ")
        time.sleep(3)
        myinput=bytes([0x3f,0x0D,0x0A])  # 需要发送的十六进制数据的 ?  回车键  以及换行符
        x.write(myinput)
        time.sleep(3)
        f = f + 1

没有直接写成死循环是因为希望进行顺序通信的,我在网上看到有的是写了个死循环,然后开启了线程进行通信的,这里没用这个方法。

开始的时候我只发送了一个 但是返回的数据都是空,一直寻找不到原因,最后通过示波器,把发送代码的波形进行对比发现发送的波形除了?还有一个回车以及换行的信号。

补足了代码也就返回了信息。

def jieshou():
    j = 0
    while j < 1:
        print("zai  jie shou")
        # print(x.inWaiting)
        while x.inWaiting() > 0:
            # global lastval
            myout=x.read(8) # 提取接收缓冲区中的前8个字节数
            rainval = myout.decode('gbk')
            # val = rainval - lastval
            print(rainval)

        # lastval = rainval
        j = j + 1

这是接收部分的代码。

相关文章

网友评论

      本文标题:python的串口连接

      本文链接:https://www.haomeiwen.com/subject/udmquhtx.html