2016-11-13 11 views
1

私はこの問題を解決するのに苦労しています。 基本的に私は私のラズベリーを持っています。私の意見では、私の意見では、私はいつでもオンとオフを使用してledをオフにすることができます。ラズベリーパイとジャンゴ - バックグラウンドチェックGPIOボタン

しかし、私はできないことがあります:どのように入力 gpioピンから取得するには?

セロリをセッティングしようとしましたが、2つの問題があります。私は(私は10の異なるガイド、さらには正式なものを見て3日間のテストの後に)どのように動作させることができません。 。セロリはdjangoビューで呼び出されたときにのみ、バックグラウンド処理を実行できます。

私がしたいことは、ピン入力アクティビティを監視する24/24を実行するバックグラウンドプロセスを持つことです。簡単な例: gpio 23に接続されたボタンを押すと、ジャンゴモデルの値を変更するか、別のgpioピンをオンにします。

ヒントをお持ちの方は、皆さんありがとう!

答えて

1

私はDjangoとCeleryでは動作しますが、Raspberry Piでは動作しませんでした。これは理想的な解決策ではありません。コードを提供していないので、この機能をどのように作成するかを概説します。

  • あなたのDjangoアプリケーションとセロリの統合を設定

    1. それは

    2. と呼ばれていたときに新しいスクリプトを作成し、あなたのジャンゴからセロリのタスクをインポートし、あなたのDjangoのモデルの値を変更するためにセロリのタスクを作成します。プロジェクト

    3. スクリプト内でセロリジョブをトリガーする関数を実装します。

    4. ボタンオブジェクトを作成し、on_pressed方法にあなたの関数への呼び出しを追加します(下記参照)

    5. 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() 
    
  • +0

    このスクリプトは停止せずにバックグラウンドで実行されますか?これは良い解決策と思われ、セロリの仕事をしなければならないでしょう。現時点で私は本当にそれを動作させることはできません –

    +0

    正しい。バックグラウンドで実行するにはこのスクリプトが必要で、バックグラウンドで実行されるセロリのワーカーも必要になります。 – Maurice

    0

    ボタンをクリックすると、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 
    

    これは役に立ちます。

    0

    GPIO.add_event_detect機能を使用して、入力が変更されたときに呼び出される関数を定義してください。 https://raspberrypi.stackexchange.com/questions/8584/multiple-gpio-add-event-detect-one-callback-function

    に(各プロセスごとに1)あなたはadd_event_detect機能を初期化するときに、この機能は一度だけと一つのプロセスで初期化されていることを確認していない場合、あなたは機能には、いくつかの呼び出しを持つことになりますので https://pypi.python.org/pypi/RPi.GPIO/0.5.1a

    は気をつけてください

    よろしくお願いします。

    関連する問題