背景
- 每隔1s读取信号状态
- 中途串口丢失,不会程序报错
- log信息保存txt文档
import serial
import serial.tools.list_ports
import time
from datetime import datetime
#程序初始化
time_start = datetime.now()
time_step = 1
f = open('rm500_qeng.txt','w')
CMD1 = 'AT+QENG="servingcell"\r\n'
#读取串口信息
Port_at = ["AT","DM","NMEA"]
plist = list(serial.tools.list_ports.comports())
if len(plist) == 0:
print("无可用的串口")
else:
for i in range(0,len(plist)):
#print(plist[i].name,":",plist[i])
if "Quectel USB AT Port" in str(plist[i]):
Port_at[0] = str(plist[i].name)
print("找到AT串口 = ", plist[i].name)
if "Quectel USB DM Port" in str(plist[i]):
Port_at[1] = str(plist[i].name)
print("找到DM串口 = ", plist[i].name)
if "Quectel USB NMEA Port" in str(plist[i]):
Port_at[2] = str(plist[i].name)
print("找到NMEA串口 = ", plist[i].name)
#串口初始化
ser_at = serial.Serial(str(Port_at[0]),115200,timeout=0.1)
ser_at.write("AT+CFUN = 0 \r\n".encode())
time.sleep(1)
ser_at.write("AT+CFUN = 1 \r\n".encode())
time.sleep(1)
#循环写命令和读数据
while True:
time_interval = datetime.now() - time_start
try:
tmp_str = ser_at.readline().decode('utf-8').rstrip()
# 写命令:
if time_interval >= time_step:
ser_at.write(CMD1.encode())
#print("成功发送命令: ",CMD1.replace("\r\n",""))
time_start = datetime.now()
# 读数据
if len(tmp_str) > 4 and "+QENG: " in tmp_str :
print(tmp_str)
f = open('rm500_qeng.txt','a')
f.write(tmp_str + "\n")
f.close()
except serial.serialutil.SerialException:
print("serial.serialutil.SerialException, 检查USB线是否松动!")
time.sleep(1)
time_interval.total_seconds() 将时间差转化为s。