Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当使用django作为服务器时,持续监听传感器_Python_Django_Raspberry Pi_Django Views - Fatal编程技术网

Python 当使用django作为服务器时,持续监听传感器

Python 当使用django作为服务器时,持续监听传感器,python,django,raspberry-pi,django-views,Python,Django,Raspberry Pi,Django Views,我开发了一种智能灯泡,当我拍手时,它使用继电器来打开和关闭灯泡。这适用于一个简单的python脚本,但我想将django用作处理此用例的服务器。我无法处理以下情况 1) 当我拍手时,灯泡应该打开,如果我拍手,灯泡应该关闭 对于第二种情况,我如何持续监听传感器数据,以便我的灯泡能够相应地进行操作 下面是一个简单的脚本 #!/usr/bin/python import RPi.GPIO as GPIO import time # telling pi we are not using the pi

我开发了一种智能灯泡,当我拍手时,它使用继电器来打开和关闭灯泡。这适用于一个简单的python脚本,但我想将django用作处理此用例的服务器。我无法处理以下情况

1) 当我拍手时,灯泡应该打开,如果我拍手,灯泡应该关闭

对于第二种情况,我如何持续监听传感器数据,以便我的灯泡能够相应地进行操作

下面是一个简单的脚本

#!/usr/bin/python
import RPi.GPIO as GPIO
import time

# telling pi we are not using the pin but BCM standard GPIO names for the pins
GPIO.setmode(GPIO.BCM)

BULB_OUTPUT_PIN = 4
SOUND_INPUT_PIN = 17

# as I am refering to the BCM mode instead of BOARD mode so the output pin is
# GPIO4 which is 7th pin in the pi when starting the first pin from left.
GPIO.setup(BULB_OUTPUT_PIN, GPIO.OUT)
GPIO.output(BULB_OUTPUT_PIN, GPIO.HIGH)

# for sound sensor
GPIO.setup(SOUND_INPUT_PIN, GPIO.IN)

SleepTime = 6

# main loop

try:
    while 1:
        print('#######GPIO INPUT PIN##### ', GPIO.input(SOUND_INPUT_PIN))
        if GPIO.input(SOUND_INPUT_PIN) == GPIO.LOW:
            print("##########Sound is sensed############")
            time.sleep(SleepTime)
            GPIO.output(BULB_OUTPUT_PIN, GPIO.LOW)
            print("#Relay is triggered in the switch 1########")
            time.sleep(SleepTime)
            GPIO.cleanup()
            print("Good bye!")
# End program cleanly with keyboard
except KeyboardInterrupt:
    print("Quit")

    # Reset GPIO settings
    GPIO.cleanup()
使用django

import RPi.GPIO as GPIO
import time

SleepTime = 6

BULB_OUTPUT_PIN = 4
SOUND_INPUT_PIN = 17


def smart_bulb(request, action=None):
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(BULB_OUTPUT_PIN, GPIO.OUT)
    try:
        if action == "on":
            # telling pi we are not using the pin but BCM standard GPIO names for the pins
            # as I am refering to the BCM mode instead of BOARD mode so the output pin is
            # GPIO4 which is 7th pin in the pi when starting the first pin from left.
            print("bulb will glow now")
            time.sleep(SleepTime)
            GPIO.output(BULB_OUTPUT_PIN, GPIO.HIGH)
        else:
            print("bulb will fade out")
            time.sleep(SleepTime)
            GPIO.output(BULB_OUTPUT_PIN, GPIO.LOW)
    except KeyboardInterrupt:
        GPIO.cleanup()

这不是特定于raspberry pi的问题,而是特定于django的问题。

我建议使用一个单独的Python脚本,像第一个示例中那样连续运行,并在传感器触发器上调用自定义django管理命令(可能通过导入
manage.py
)改变Django方面的一些状态。现在这是一个简单的用例,但如果我必须增强,比如处理多个设备,我认为这将是不可扩展的。我也在考虑使用ws或mqtt协议来实现实时性。这就是我寻求可扩展解决方案的原因。