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
这是接收部分的代码。
网友评论