作为家庭自动化项目的一部分,我编写了一个每小时运行一次的 Python 脚本。每隔一小时脚本应该打开或关闭某些 GPIO 引脚。小时、动作和 pin 信息的组合存储在 mariadb 数据库中。我写了下面的代码来实现这一点:
schedules = getSchedules(cursor, queryGetSchedule, placeHolder)
for row in schedules:
print("Device schedule ID is ", row[0])
print("Schedule Operation is ", row[1])
print("Execution time is ", row[2])
print("GPIO PIN is ", row[3])
performAction(row[1], row[3])
def performAction(operation, gpioPIN):
#perform action = operation on GPIOPIN = gpioPIN
led = gpiozero.LED(gpioPIN)
led.value = operation
这里的问题是,一旦 performAction() 退出 GPIO 引脚重置,显然是由于变量范围!这让我意识到,由于会有 GPIO 引脚一旦启用,可能不需要禁用几个小时或脚本迭代。因此我得出结论,我需要以 ledx = LED(x) 的形式为数据库中找到的所有 GPIO 引脚声明全局变量 - 其中 x 是从数据库返回的引脚。这就是我卡住的地方!我找不到查询数据库的方法,获取要修改的所有 PINS 号码,为每个 PIN 号码创建全局变量,例如 ledx(其中 x 是数据库中的 PIN 号码),将其初始化为 LED(x) 和最后在脚本迭代中需要时引用它。我环顾四周,发现可以使用字典创建动态变量。
PS:我是Java2早期的编程学生,从未以编程为职业,所以请忽略我对python基础知识的缺乏了解