从Adruino到RPi的晴雨表数据。 readline()的Python错误

时间:2016-08-20 08:28:16

标签: python mysql readline

一直想解决这个问题。 Adruino的晴雨表数据如下:

1008.94 1008.95 1008.94

我很满意。这些得到"读"现在每10秒钟。

问题在于我的python脚本。我可以读取和写入mySQLdb的所有数据。但数据并不总是好的。它会像:

1008.94 108.95 108.94 1008.96

"失去了零"或其他价值总是出现在Adruino的串行监视器上。

如何让python脚本读取整个xxxx.xx行?甚至在低压xxx.xx的时候也想到了。

这是我的python代码:

import MySQLdb
import serial
import time

ser = serial.Serial('/dev/ttyACM0', 9600)
db = MySQLdb.connect("localhost", "root", "pword","weather")
cursor = db.cursor()

while 1:
#       print ("Waiting for data...")
#       print("")
        x = ser.readline()
        clock = (time.strftime("%H:%M:%S"))
        print x
#       print ("Collecting data...")
        x = x
#       print ("Inserting to database...")
#       print ("")
        sql = ("""INSERT INTO WeatherP (pres, Time) VALUES (%s, %s)""", (x, clock,))
        cursor.execute(*sql)
        db.commit()
#

谢谢。 Tinus

1 个答案:

答案 0 :(得分:0)

我找到了以下here

ser.read(ser.inWaiting())

根据pySerial documentation inWaiting()确实返回缓冲区中接收数据的大小。这可以解决您的问题,因为读取函数具有参数给出的数据大小(在您的情况下为1个字节,因为您未指定)如果接收的数据较大,则可能导致此类问题。