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,因此这可能不是理想的解决方案。由于您尚未提供代码,我将尝试概述您将如何创建此功能。
设置您的 Django 应用程序和 Celery 集成
创建 Celery 任务以在调用时修改您的 django 模型值
创建一个新脚本并从您的 Django 项目中导入 celery 任务
在您的脚本中实现一个触发 Celery 作业的函数
创建一个按钮对象并将对函数的调用添加到 on_pressed 方法(见下文)
运行 你的脚本
基于 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
问候,祝你好运!!
我在使这个东西工作时遇到了麻烦。 基本上我有我的树莓派,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,因此这可能不是理想的解决方案。由于您尚未提供代码,我将尝试概述您将如何创建此功能。
设置您的 Django 应用程序和 Celery 集成
创建 Celery 任务以在调用时修改您的 django 模型值
创建一个新脚本并从您的 Django 项目中导入 celery 任务
在您的脚本中实现一个触发 Celery 作业的函数
创建一个按钮对象并将对函数的调用添加到 on_pressed 方法(见下文)
运行 你的脚本
基于 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
问候,祝你好运!!