首页 > 解决方案 > 如何将传感器读数从 raspi 存储到我的数据库中?

问题描述

这是我的光束传感器代码:

#!/usr/bin/python

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)

GPIO.setup(12, GPIO.IN) #Right level-1

GPIO.setup(16, GPIO.IN) #Right level-2

GPIO.setup(18, GPIO.IN) #Right level-3

while True:

    if (GPIO.input(12) == 1 or GPIO.input(16) == 1 and GPIO.input(18) == 0):  
        print("lying down")
        time.sleep(1)
    elif (GPIO.input(12) == 1 or GPIO.input(16) == 1 and GPIO.input(18) == 1):
        print("Sitting/Crawling")
        time.sleep(1)
    elif (GPIO.input(12) == 0 or GPIO.input(16) == 0 and GPIO.input(18) == 1):
        print("Almost out")
        time.sleep(1)
    else:
        print("Out of the crib")
        time.sleep(1)

这是我的数据库代码:

#!/usr/bin/env python

import MySQLdb


db = MySQLdb.connect("localhost", "root", "raspberry", "cribdb")
curs=db.cursor()

curs.execute ("""INSERT INTO tbstatus values(NOT NULL, 'STATUSHERE')""")

db.commit()

number_of_rows= curs.execute("SELECT * FROM tbstatus")

if (number_of_rows <= 5):
   print(number_of_rows)

else:

    curs.execute("""DELETE FROM tbstatus order by id LIMIT 1""")
    db.commit()
    print("\n Record Deleted successfully ")

如何获取传感器打印的状态(躺下、坐下/爬行、站立等)并将其放在这里

(curs.execute ("""INSERT INTO tbstatus values(NOT NULL, 'STATUSHERE')""")) 

存储在我的数据库中。

标签: pythonmysql-pythongpio

解决方案


除非我误解了事情,否则您可以简单地合并这两个脚本,例如

#!/usr/bin/python

import RPi.GPIO as GPIO
import time
import MySQLdb

db = MySQLdb.connect("localhost", "root", "raspberry", "cribdb")

GPIO.setmode(GPIO.BOARD)

GPIO.setup(12, GPIO.IN)  # Right level-1
GPIO.setup(16, GPIO.IN)  # Right level-2
GPIO.setup(18, GPIO.IN)  # Right level-3

last_status = None

while True:
    input_12 = GPIO.input(12)
    input_16 = GPIO.input(16)
    input_18 = GPIO.input(18)
    if input_12 == 1 or input_16 == 1 and input_18 == 0:
        status = "lying down"
    elif input_12 == 1 or input_16 == 1 and input_18 == 1:
        status = "Sitting/Crawling"
    elif input_12 == 0 or input_16 == 0 and input_18 == 1:
        status = "Almost out"
    else:
        status = "Out of the crib"
    time.sleep(1)
    if status != last_status:
        print(status)
        last_status = status
        curs = db.cursor()
        curs.execute(
            """INSERT INTO tbstatus values(NULL, %s)""", (status,)
        )
        db.commit()

顺便说一句,我建议在您的表中添加某种时间戳列,tbstatus顺便说一下,除非您已经有一个。

另一个改进可能是仅在状态更改时记录状态。

编辑:按照评论中的要求,我添加了跟踪最后状态并仅记录更改。


推荐阅读