2

皆さん、

私の友人と私は現在、実現したい小さなプロジェクトに取り組んでいます。これまで、ガレージ内の車の存在を認識する小さなセンサーを構築し、Arduino Nano と一緒に超音波センサーを実行しました。次に、センサーは整数 (1 = 車、0 = 車なし) を Xbee 経由で、リビング ルームで 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 に答える