import serial
import serial.tools.list_ports
import time
from datetime import datetime
import subprocess #subprocess代替os操作
import threading
import sys
from pythonping import ping
import os
def portlist():
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)
return Port_at
#定义serial log()子程序,循环写命令和读数据
def serial_log():
time_start = datetime.now()
time_step = 1
CMD1 = 'AT+QENG="servingcell"\r\n'
Port_at = portlist()
if Port_at != "AT":
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)
print("初始化完成!")
while True:
try:
tmp_str = ser_at.readline().decode('utf-8').rstrip()
# 写命令:
time_interval = datetime.now() - time_start
tmp_str = ser_at.readline().decode('utf-8').rstrip()
if time_interval.total_seconds() >= time_step:
ser_at.write(CMD1.encode())
time_start = datetime.now()
# 读数据
if "+QENG: " in tmp_str :
print(tmp_str)
localtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
f = open('rm500_qeng.txt','a')
f.write(localtime + "," + tmp_str + "\n")
f.close()
except serial.SerialException:
print("serial.SerialException")
time.sleep(1)
#定义ping_log()子程序,读取ping数据
def ping_log():
IP_addr = "8.8.8.8"
ping_count = 4
while True:
localtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
process = ping(IP_addr, size=32, count=4, timeout=1)
ping_avg = str(process.rtt_avg_ms)
print("ping_avg = ",ping_avg)
f = open('rm500_qeng.txt', 'a')
f.write(localtime + ",ping_avg:" + ping_avg+'\n')
f.close()
time.sleep(1)
#程序初始化
f = open('rm500_qeng.txt','w') #定义log存放文件
localtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print(localtime)
#生成线程实例
threads = [] #定义启动的线程集合
t1 = threading.Thread(target=ping_log(), args=())
threads.append(t1)
t2 = threading.Thread(target=serial_log(), args=())
threads.append(t2)
if __name__ == '__main__':
for t in threads:
t.start()
print("线程启动:",t)
for t in threads:
t.join()
print("退出线程")
target后面带参数不用带括号