2

嘿伙计们,

我和我的一个朋友目前正在做一个我们想要实现的小项目。到目前为止,我们已经构建了一个小型传感器,可以识别车库中是否存在汽车,同时运行超声波传感器和 Arduino Nano。然后,传感器通过 Xbee 将整数(1 = 汽车,0 = 没有汽车)传输到客厅中运行 Python 的 RaspberryPi。

我们还可以使用以下代码在屏幕上看到数据,给出我们的行或 0 或 1:

import serial

while True:
    ser = serial.Serial(“/dev/ttyAMA0”, 9600, timeout=1)
    response = ser.read()
    print response

在研究了一些 Python 和 SQLite3 代码之后,我们认为如果我们能够看到一辆车何时到达我们的车库并离开,那就太酷了。所以我做了一些研究,发现这可以通过 MySQL 或 SQLite 数据库来实现。

我们尝试了一下,看了很多教程,我们现在能够创建表并将数据插入其中。不幸的是,到目前为止,这些数据是由我们手动写入的,并没有通过函数动态插入到表中。

我们关于数据库的代码如下所示:

import sqlite3
import time
import datetime
import serial

def Main():

    try:

        con = sqlite3.connect(‘test.db’)
        cur = con.curson()
        cur.execute(‘CREATE TABLE Cars(Id INT, Time TEXT, Status INT)’)
        cur.execute(“INSERT INTO Cars VALUES(1, datettime(), 1)”)
        cur.execute(“INSERT INTO Cars VALUES(2, datettime(), Reading())”)

        con.commit()

        cur.execute(“SELECT * FROM Cars”)

        data = cur.fetchall()

        for row in data
            print row

    except sqlite3.Error, e:
        if con:
            con.rollback()
            print “There’s a problem with your SQLite”

    finally:
        if con:
            con.close()


def Reading():

    ser = serial.Serial(“/dev/ttyAMA0”, 9600, timeout=1)
    response = ser.read()
    return response

if __name__ == ‘__main__’:
    Main()

简而言之:我们表格的每一行都应该显示一个单独的 ID、当前时间以及 1 或 0,这取决于车库中传感器前面是否有汽车。当我们尝试运行此代码时,我们总是收到“您的 SQL 有问题”作为消息。

也许你们中的一个人知道到目前为止我们做错了什么,或者我们如何能够将函数 Reading() 的值实现到表中。即使没有,也许您对如何可视化数据有另一种想法。

4

1 回答 1

1

您希望将函数的结果值插入到数据库中。SQLite 不会理解函数本身。你应该这样做:

    cur.execute('INSERT INTO Cars VALUES(1, ?, 1)',
                (datetime.now().strftime('%Y%m%d%H%M%S'),))
    cur.execute('INSERT INTO Cars VALUES(2, ?, ?)',
                (datetime.now().strftime('%Y%m%d%H%M%S'),Reading()))

如果您想要存储 Python 日期时间而不是文本值,则可以查看使用适配器,如下所述:https ://docs.python.org/2/library/sqlite3.html#default-adapters-and-转换器

于 2016-02-16T16:30:45.337 回答