私は非常にイライラする問題を抱えており、Python/Raspberry pi にはまったく慣れていません。
GPS 座標を SSID でフィルター処理された iwlist スキャンと照合し、Wi-Fi 接続があるときはいつでも結果のファイルを電子メールで送信するスクリプトがあります。
私の問題は、結果が継続的にバッファリングされるため、GPS 座標がスキャンされた SSID からかなり離れている可能性があることです。
while ループの先頭でシリアル ラインをフラッシュしていますが、動作していないようです。また、バッファリングされていないPythonを実行しています(-u、しかしそれはテキストファイル専用かもしれません..)Output.flush()を追加しましたが、まだテストできていません。最初に聞いてみようと思いました。
私の質問は、シリアル ライン バッファをオフにして、while ループの実行時にすべての反復で GPS 座標を取得する方法はありますか? すべてのテキスト ファイルには、書き込み後に file.flush() があります。ファイルが書き込まれる前にそれが必要ですか、それともシリアルバッファに影響しませんか? 私は何が欠けていますか?
どんな助けでもいただければ幸いです
#!/usr/bin/python -u
import os
import gps
import time
import serial
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders
username = 'gmail account'
password = 'account password'
port = serial.Serial("/dev/ttyAMA0", baudrate=9600)
#Setting GPS session, listen on port 2947 (gpsd) of localhost
session = gps.gps("localhost", "2947")
session.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE)
#Begin GPS and WiFi Scan loop..
while True:
try:
port.flushInput()
#port.flushOutput() commented out because I haven't tested with this yet.
time.sleep(.5)
report = session.next()
#Uncomment below for report data
#print report
if report['class'] == 'TPV':
if hasattr(report, 'lat' and 'lon'):
#setting GPS variables and strings
latitude = report.lat
latString = "%f" %(latitude)
longitude = report.lon
lonString = "%f" %(longitude)
#WiFi scan and parse script. I don't think it is necessary to post,
#but if it is, I will. All text files are flushed before being closed
#Email when connected
ping = os.system('sudo ping -c4 8.8.8.8')
try:
if ping == 0:
msg = MIMEMultipart()
msg['Subject'] = "GPS/WiFi data from GPS PILOT"
msg['From'] = username
msg['To'] = username
body = "GPS/WiFi data attached.."
msg.attach(MIMEText(body, 'plain'))
part = MIMEBase('application', "octet-stream")
part.set_payload(open("/home/pi/gpsMaster/dataLog.csv", "rb").read())
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="GPSWiFi_Scan.csv"')
msg.attach(part)
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.login(username, password)
server.sendmail(username, username, msg.as_string())
server.quit()
os.system("sudo rm /home/pi/gpsMaster/dataLog.csv")
else:
pass
except smtplib.SMTPException:
os.system('sudo reboot now')
#Adding loop delay
time.sleep(10)
#Loop ending exceptions
except KeyError:
pass
except IOError:
print ("ERROR")
#os.system('sudo reboot now')
except KeyboardInterrupt:
quit()
except StopIteration:
session = None
os.system("sudo reboot now")