我想将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
1条答案
按热度按时间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发送信号时都会触发回调函数。我不确定正确的方法是这样的: