你好,我一直试图独自完成这个工作超过一个星期,但我认为是时候提问了。
这是我的第一个使用python的程序,我打算用各种功能控制我的水族箱。
我正在编程的第一个功能是照明时间表(这篇文章稍微缩短了代码)
代码执行正常,但GPIO引脚2没有正确打开和关闭。我也得到了“运行警告这个频道已经在使用”
我可以请一些指导,我确定它的简单和noob:)
这是我的代码
#Lighting Program
import RPi.GPIO as GPIO
import datetime
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
#Declare Lighting On/Off Times
on_time_Monday = 600
off_time_Monday = 2330
其余的日子
#Find out what day of the week it is
day = datetime.datetime.now()
day_of_week = day.isoweekday()
#find out what time it is
Current_time = datetime.datetime.strftime(datetime.datetime.now(),'%H%M')
#convert the time to an int so it can be compared
Current_time_INT = int(Current_time)
#Schedule on / off
if (day_of_week == 1) and (Current_time_INT > on_time_Monday and Current_time_INT < off_time_Monday) :
Light_on_off = 'on'
使用'elif'作为星期二等等
else :
Light_on_off = 'off'
现在启用输出
#CALL OUTPUTS ON / OFF
GPIO.setup(2, GPIO.OUT)
if Light_on_off == 'on':
GPIO.output(2, GPIO.HIGH)
else:
GPIO.output(2, GPIO.LOW)
GPIO.cleanup()
答案 0 :(得分:0)
根据我的经验“运行警告这个频道已经在使用”,当您之前设置了GPIO引脚但未调用时 GPIO.cleanup()。 我在你的代码中看到了这一点,但我怀疑由于某种原因它实际上并没有运行。
有时通过运行python解释器测试终端中的GPIO引脚是有帮助的。测试是否正确连接了电路特别有用。
>>>import RPi.GPIO as GPIO
>>>GPIO.setmode(GPIO.BCM)
>>>GPIO.setwarnings(False)
>>>GPIO.setup(2, GPIO.OUT)
>>>GPIO.output(2, GPIO.HIGH)
>>>GPIO.input(2)
True
>>>GPIO.output(2, GPIO.LOW)
>>>GPIO.input(2)
False
>>>GPIO.cleanup()
如果您的电路接线正确,您应该可以通过这种方式打开和关闭灯。当您调用GPIO.input(2)时,解释器会响应引脚的当前状态。这使您无需使用外部电路即可确保引脚正常工作。一旦你知道它正在工作,你就可以继续前进。
打开和关闭灯开关的一种简单方法是使用cron作业。我过去成功使用过这种方法。
你可以编写两个简短的脚本,一个打开灯,一个关闭它。
示例:lightOn.py(对于lightOff.py,将'HIGH'替换为'LOW')
#!/usr/bin/env python
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(2, GPIO.OUT)
GPIO.output(2, GPIO.HIGH)
GPIO.cleanup()
现在您可以create a crontab在您想要的时间自动运行脚本。 例如:
0 6 * * * /home/pi/lightOn.py
0 18 * * * /home/pi/lightOff.py
每天早上6点开灯,晚上6点开灯