Raspberry Pi 和 Django - 后台检查 GPIO 按钮

Raspberry Pi and Django - Background check GPIO Button

我在使这个东西工作时遇到了麻烦。 基本上我有我的树莓派,apache 和 django 运行ning 很好,在我看来我可以使用 gpiozero 打开和关闭 LED,我几乎可以做每一个 输出 我想要的 gpio 引脚。

但是我不能做这件事:如何从 gpio 引脚获取 输入

我尝试设置 Celery,但有 2 个问题,我不能让它按我想要的方式工作(经过 3 天的测试,查看了 10 个不同的指南,甚至是官方指南)并且它不完全符合我的要求想。只有在 django 视图中调用 Celery 才能执行后台进程。

我想要做的是有一个 运行 24/24 监视 pin 输入 activity 的后台进程。简单示例: 当按下 gpio 23 上连接的按钮时,更改 django 模型中的值或打开另一个 gpio 引脚。

有人有提示吗?谢谢大家!

您可以使用 GPIOZero Button Interface 检查按钮何时被单击。这里,每点击一个按钮,函数toggleLight就会被自动调用。现在,在这个函数中,您可以操作您的 Django 模型等。

from gpiozero import LED, Button  #IMPORTS FOR GPIOZERO

# ADD THIS CODE TO YOUR DJANGO APPLICATION OUTSIDE ANY FUNCTION

state = 0

led = LED(17) #LED TO GPIO17
button = Button(23) #BUTTON TO GPIO23

def toggleLight():

    # DO ANY DJANGO RELATED CHANGES HERE, CHANGE VARIABLES ETC.

    # TOGGLE THE LED CONNECTED TO GPIO17
    if (state == 0): #CURRENTLY OFF
        led.on()
        state = 1 
    else: #CURRENTLY ON
        led.off()
        state = 0

button.when_pressed = toggleLight  #EACH TIME THE BUTTON IS PRESSED, THE FUNCTION TOGGLELIGHT IS CALLED

#ENDS HERE

希望对您有所帮助!

我曾使用过 Django 和 Celery,但未使用过 Raspberry Pi,因此这可能不是理想的解决方案。由于您尚未提供代码,我将尝试概述您将如何创建此功能。

  1. 设置您的 Django 应用程序和 Celery 集成

  2. 创建 Celery 任务以在调用时修改您的 django 模型值

  3. 创建一个新脚本并从您的 Django 项目中导入 celery 任务

  4. 在您的脚本中实现一个触发 Celery 作业的函数

  5. 创建一个按钮对象并将对函数的调用添加到 on_pressed 方法(见下文)

  6. 运行 你的脚本

基于 this 文章中的代码。

from gpiozero import Button
from signal import pause

def trigger_celery_task():
    # Add the code to create a new task here

button = Button(2)

button.when_pressed = trigger_celery_task

# Wait for events
pause()

尝试使用 'GPIO.add_event_detect' 功能来定义输入更改时要调用的函数。参见 https://pypi.python.org/pypi/RPi.GPIO/0.5.1a

初始化 add_event_detect 功能时要小心,因为如果您不确保此功能仅在一个进程中初始化一次,您将多次调用该函数(每个进程一次) https://raspberrypi.stackexchange.com/questions/8584/multiple-gpio-add-event-detect-one-callback-function

问候,祝你好运!!