如何将raspberer pi 3 flame sensor fire detect的数据插入mysql数据库

mwyxok5s  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(321)

我想将raspberry pi 3中的数据插入mysql数据库:

import RPi.GPIO as GPIO import time import MySQLdb db =MySQLdb.connect(host="localhost", user="root", passwd="123456", db="raspbd") cur = db.cursor()

GPIO SETUP

channel = 3 GPIO.setmode(GPIO.BCM)GPIO.setup(channel, GPIO.IN)def callback(channel):print("flamedetected")GPIO.add_event_detect(channel,GPIO.BOTH, bouncetime=300) # let us know when the pin goes HIGH or LOW GPIO.add_event_callback(channel, callback) # assign function to GPIO PIN,Run function on change

infinite loop

while True:cur.execute("INSERT INTO flame (ID,flame,) VALUES (%s, %s)", [ID,flame])db.commit() db.rollback()time.sleep (1)cur.close()db.close()

错误消息:

ERROR: Traceback (most recent call last): 
  File "flame.py", line 24, in cur.execute("INSERT INTO flame (ID,flame,) VALUES (%s, %s)", [ID,flame])
NameError: name 'ID' is not defined
6tdlim6h

6tdlim6h1#

在我看来,你应该避免使用无限循环,这是你应该避免的。
错误消息表示名为id的变量尚未定义,这意味着它不存在,因此也没有值。我假设这应该是mysql db表中的id,最好将其设置为自动递增,这样就不用担心了。
如果这就是你共享的全部代码,你很可能会有更多的错误消息。您需要首先从gpio读取数据才能将其发送到db。
直接回答如何从传感器获取数据到数据库。我完全没有gpio的经验。它是rpi的一个有很好记录的领域。
首先,您需要从相关的pin/通道读取数据,然后通过sql查询将其发送到db。
gpio wiki(https://sourceforge.net/p/raspberry-gpio-python/wiki/inputs/)有一个非常透彻的描述如何阅读可以做。我假设您试图通过在pin上附加回调函数来实现线程化解决方案,每次传感器向pin发送信号时都会触发回调函数。我不确定正确的方法是这样的:


# ...after setting up the GPIO and the DB connection

flame = ""
def my_callback(channel):
    # ...do something here...
    flame = GPIO.input(channel)
    # or perhaps you want just a string when it happened
    # flame = "detected"

channel = 3        
GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback)

# then you should be able to write the value to the DB

cur.execute("INSERT INTO flame (ID,flame) VALUES (%s,%s)",[ID,flame])

# ...and continue with the DB job.

# please note that this piece of code is not complete

# and will not solve the error with the ID

相关问题