如何将传感器读数从 raspi 存储到我的数据库中?

Posted

技术标签:

【中文标题】如何将传感器读数从 raspi 存储到我的数据库中?【英文标题】:How can I store sensor readings from raspi to my database? 【发布时间】:2019-04-04 06:57:45 【问题描述】:

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

#!/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')""")) 

存储在我的数据库中。

【问题讨论】:

【参考方案1】:

除非我误解了,你可以简单地合并这两个脚本,比如

#!/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 表中添加某种时间戳列,顺便说一下,除非您已经有了。

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

编辑:根据 cmets 的要求,我添加了跟踪最后状态并仅记录更改。

【讨论】:

我只是想知道,如何限制传感器读数。例如,一旦传感器检测到“躺下”,它只会打印一个“躺下”,而不是每 1 秒(time.sleep(1))。如果它是不同的状态,比如“坐着/爬行”,它只会打印另一个?谢谢!! @GeraldManibale 编辑了。:) 非常感谢。

以上是关于如何将传感器读数从 raspi 存储到我的数据库中?的主要内容,如果未能解决你的问题,请参考以下文章

使用本体从原始数据中生成语义完整信息

Django中用户定义的派生数据

从 CSV 文件到 Python 的实时数据流

如果自上次事件以来传感器读数没有更改,则如何在未发送传感器读数时计算窗口上的聚合?

如何使用颤振传感器包中的加速度计和陀螺仪读数获得弧度?

2 个传感器读数融合(偏航、俯仰)