0

私は非常にイライラする問題を抱えており、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")
4

1 に答える 1

2

私は同様の問題を抱えていました。入力と出力をフラッシュして修正しました。

port.flushInput()
port.flushOutput()
于 2016-04-21T19:19:01.883 に答える