0

我遇到了一个非常令人沮丧的问题,而且我对 Python/Raspberry pi 还是很陌生

我有一个脚本,它将 gps 坐标与 SSID 过滤的 iwlist 扫描相匹配,然后只要有 wifi 连接,就会通过电子邮件将结果文件发送出去。

我的问题是,结果是连续缓冲的,因此 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 回答