Raspberry Pi和Django背景检查GPIO按钮

2024-04-25 23:11:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难让这东西工作起来。 基本上,我有我的覆盆子,在apache和django运行良好的情况下,在我看来,我可以使用gpiozero来打开和关闭一个led,我几乎可以用gpio引脚完成几乎所有的输出。在

但有一件事我做不到:如何从gpio引脚获得输入?在

我试着设置芹菜,但是有两个问题,我不能让它按照我想要的方式工作(经过3天的测试,找了10个不同的向导,甚至是官方的),而且它不能完全满足我的需要。Celery只有在django视图中被调用时才能执行后台处理。在

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

有人有暗示吗?谢谢大家!在


Tags: django视图led覆盆子gpio官方进程apache
3条回答

试试GPIO.add_event_检测'函数定义输入更改时要调用的函数。见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

谨致问候,祝你好运!!在

您可以使用^{} 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和芹菜,但没有用覆盆子皮,所以这可能不是一个理想的解决方案。由于您还没有提供代码,我将尝试概述您将如何创建此功能。在

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

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

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

  4. 在脚本中实现触发芹菜作业的函数

  5. 创建一个button对象,并将对函数的调用添加到on\u 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()

相关问题 更多 >