【问题标题】:Raspberry GPIO, time trigger树莓 GPIO,时间触发
【发布时间】:2020-06-08 01:10:23
【问题描述】:

我正在尝试按时间触发 GPIO。

第一部分只是一个测试,第二部分是一个WHILE是触发时间,我用了一个IF语句来匹配我想要的时间。那工作得很好。但是在 While python 里面给我一个错误说明

AttributeError: 'str' 对象没有属性 'sleep'

我试图唤起:

from time import sleep

但仍然给我错误。

代码如下:

import RPi.GPIO as GPIO
import datetime 
import time
from time import sleep

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)

GPIO.setup(26, GPIO.OUT)

GPIO.output(26, GPIO.LOW) #Turns On
time.sleep(3)
GPIO.output(26, GPIO.HIGH) #Turns off

print(datetime.datetime.now().strftime("%H:%M"))

while True :
    time = datetime.datetime.now().strftime("%H:%M")
    print(time)
    if time == "06:16":
        GPIO.output(26, GPIO.LOW)
        time.sleep(2)  # <===== This gives me error
        GPIO.output(26, GPIO.HIGH)
        time.sleep(1)
        print("YEah baby")
        break
        GPIO.cleanup()

【问题讨论】:

    标签: python-datetime raspberry-pi4


    【解决方案1】:
    import time
    from time import sleep
    
    # ...
    
    time.sleep(3)
    

    在这里,您从time 模块调用sleep 函数,因为当您编写import time 时,您创建了一个名为time 的变量,其中包含time 模块。

    # ...
    
    while True:
        time = datetime.datetime.now().strftime("%H:%M")
    

    在这里,您从上面覆盖名为 time 的变量(这称为 shadowing)。变量time 现在包含一个字符串,所以它的类型现在是str

        print(time)
        if time == "06:16":
            GPIO.output(26, GPIO.LOW)
            time.sleep(2)  # <===== This gives me error
    

    在这里,您尝试在上面的time 变量上调用sleep,它仍然是str。由于str 类型的值没有可以调用它们的函数sleep,因此会出现错误“AttributeError: 'str' object has no attribute 'sleep'”。

    由于您在上面使用from time import sleep 导入了sleep,因此您在作用域内拥有函数sleep,因此您可以在此处使用sleep(2) 而不是time.sleep(2)

    解决您的问题的另一种方法是通过使用不同的名称来防止 time 变量被隐藏。例如,如果您调用变量now 而不是time,那么time 仍将绑定到time 模块,并且您仍然可以调用sleep

    【讨论】:

      【解决方案2】:

      对于我的菜鸟问题,我感到非常抱歉! 我终于解决了问题。

          import RPi.GPIO as GPIO
      import datetime
      import time
      from time import sleep
      
      #SETUP THE GPIO
      GPIO.setmode(GPIO.BCM)
      GPIO.setwarnings(False)
      GPIO.setup(26, GPIO.OUT)
      
      #BLINK TEST
      GPIO.output(26, GPIO.LOW) #Turns On
      time.sleep(3)
      GPIO.output(26, GPIO.HIGH) #Turns off
      
      #TIME PRINT FOR TEST
      print(datetime.datetime.now().strftime("%H:%M"))
      
      #TRACK TIME AND TURN ON THE GPIO
      while True :
          time = datetime.datetime.now().strftime("%H:%M")
          print(time)
          if time == "11:41" :
              import RPi.GPIO as GPIO
              GPIO.setmode(GPIO.BCM)
              GPIO.setup(26, GPIO.OUT)
              GPIO.output(26, GPIO.LOW)
              sleep(2)
              GPIO.output(26, GPIO.HIGH)
              sleep(1)
              print("YEah baby")
      
          GPIO.cleanup()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-25
        • 2013-11-23
        • 1970-01-01
        相关资源
        最近更新 更多