python库 serial
serial为python提供的串口通信库。
pip install pyserial
注:如果需要持续接收数据,可设置一个定时器,反复调用接收串口数据
串口接口
打开串口,并得到串口对象
ser=serial.Serial(portx,bps,timeout=timex)
发送
result=ser.write(text.encode(“gbk”))
接收
rcv = ser.read_all()
编程实例
# TODO 串口读取数据
import serial # 导入串口包
import time # 导入时间包
ser = serial.Serial("COM1",115200,timeout = 0.5) # 开启com1口,波特率115200,超时0.5s
ser.flushInput() # 清空缓冲区
def main():
while True:
count = ser.inWaiting() # 获取串口缓冲区数据
if count !=0 :
recv = ser.read(ser.in_waiting).decode("gbk") # 读出串口数据,数据采用gbk编码
ser.write( recv.encode() ) #收到的数据发出去
print("[",time.time(),"]recv->", recv) # 打印一下子
time.sleep(0.2) # 延时0.2秒,免得CPU出问题(线程占满时间片)
if __name__ == '__main__':
print("waiting receive uart data...")
main()
工程实例
import serial #导入模块
import xlrd
import time
#import easygui
import tkinter
try:
#端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等
portx="COM6"
#波特率,标准值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
bps=115200
#超时设置,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
timex=5
# 打开串口,并得到串口对象
ser=serial.Serial(portx,bps,timeout=timex)
print("打开串口 ",portx)
#打开excel文件
data = xlrd.open_workbook("123.xls")
table = data.sheets()[0] # 打开第一张表
nrows = table.nrows # 获取表的行数
top = tkinter.Tk()
# 进入消息循环
top.mainloop()
#逐行打印并发送excel里面的内容
for i in range(nrows):
while(1):
print(table.row_values(i))
text = table.row_values(i)[0]
result=ser.write(text.encode("gbk"))
rcv = ser.read_all()
print(rcv)
cmpvlue = b'ok'
if(rcv == cmpvlue):
print("写入成功\n")
break
print(rcv == cmpvlue)
time.sleep(1)
print("全部写完\n")
ser.close()#关闭串口
except Exception as e:
print("---异常---:",e)