2016-04-20 5 views
0

私は2つのPythonスクリプトを持っています。基本的に、最初のスクリプトはPOSTリクエストを処理するサーバー用です。それはこのように見えます。もう一つ必要な2つのpythonスクリプトを実行

from bottle import Bottle, run, template, get, post, request 
app = Bottle() 

@app.route('/rotation', method='POST') 
def set_rotation(): 
    rotation = request.forms.get('count') 
    return rotation 

if __name__ == '__main__': 
    run(app, host='145.24.226.121', port=8080) 

第2のスクリプトは、ステッパモータを実行することです。これがスクリプトです。

# importeer de GPIO bibliotheek. 
import RPi.GPIO as GPIO 
# Importeer de time biblotheek voor tijdfuncties. 
from time import sleep 
# Zet de pinmode op Broadcom SOC. 
GPIO.setmode(GPIO.BCM) 
# Zet waarschuwingen uit. 
GPIO.setwarnings(False) 
# Stel de GPIO pinnen in voor de stappenmotor: 
StepPins = [4,17,27,22] 

# Set alle pinnen als uitgang. 
for pin in StepPins: 
    print "Setup pins" 
    GPIO.setup(pin,GPIO.OUT) 
    GPIO.output(pin, False) 

# Definieer variabelen. 
StepCounter = 0 

# Definieer simpele volgorde 
StepCount1 = 4 
Seq1 = [] 
Seq1 = range(0, StepCount1) 
Seq1[0] = [1,0,0,0] 
Seq1[1] = [0,1,0,0] 
Seq1[2] = [0,0,1,0] 
Seq1[3] = [0,0,0,1] 

# Definieer geadvanceerde volgorde (volgens de datasheet) 
StepCount2 = 8 
Seq2 = [] 
Seq2 = range(0, StepCount2) 
Seq2[0] = [1,0,0,0] 
Seq2[1] = [1,1,0,0] 
Seq2[2] = [0,1,0,0] 
Seq2[3] = [0,1,1,0] 
Seq2[4] = [0,0,1,0] 
Seq2[5] = [0,0,1,1] 
Seq2[6] = [0,0,0,1] 
Seq2[7] = [1,0,0,1] 

# Welke stappenvolgorde gaan we hanteren? 
Seq = Seq2 
StepCount = StepCount2 

try: 
    while True: 
    for pin in range(0, 4): 
     xpin = StepPins[pin] 
     if Seq[StepCounter][pin]!=0: 
     print "Stap: %i GPIO Actief: %i" %(StepCounter,xpin) 
     GPIO.output(xpin, True) 
     else: 
     GPIO.output(xpin, False) 

    StepCounter += 1 

    # Als we aan het einde van de stappenvolgorde zijn beland start dan opnieuw 
    if (StepCounter==StepCount): StepCounter = 0 
    if (StepCounter<0): StepCounter = StepCount 

    # Wacht voor de volgende stap (lager = snellere draaisnelheid) 
    sleep(.01) 

except KeyboardInterrupt: 
    # GPIO netjes afsluiten 
    GPIO.cleanup() 

2番目のスクリプトのsleep関数の最初のスクリプトからローテーション値が必要です。両方のスクリプトを実行して、最初のスクリプトがPOST要求を受け取るようにし、2番目のスクリプトがsteppermotorを動作させるようにする必要があります。 これを実行する最良の方法は何ですか?また、この方法でも可能ですか?

+2

なぜ彼らは別のスクリプトでなければならないのですか? steppermotorコードをWebサーバーに移動できますか? – fafl

+0

これが可能かどうかわかりません。私はPythonに全く新しいです。 – Jaimy

+0

サーバ部分から何かを取得したい場合は、 'rotation'値を返すGETルートを定義し、2番目のスクリプトでそれを取得してください。それはあなたがしようとしていることですか? –

答えて

0

多分あなたは、HTTPスクリプト から直接のpython関数を呼び出し、問題がある場合は(https://docs.python.org/2/library/subprocess.html)サブプロセスとtroughtシェルを呼び出すか、同様の

でき

または 、最初のスクリプトでモーターをcontrollスクリプトを呼び出すことができます私はよくあなたの質問

を理解しているか、ボトルの輸入ボットから

のような2つのスクリプトをマージすることを願って

# importeer de GPIO bibliotheek. 
import RPi.GPIO as GPIO 
# Importeer de time biblotheek voor tijdfuncties. 
from time import sleep 

app = Bottle() 


@app.route('/rotation', method='POST') 
def set_rotation(): 
    rotation = request.forms.get('count') 
    rotate(rotation_to_do=rotation) 
    return rotation 


StepPins = [4, 17, 27, 22] 


def inizialize_pin(): 
    # Zet de pinmode op Broadcom SOC. 
    GPIO.setmode(GPIO.BCM) 
    # Zet waarschuwingen uit. 
    GPIO.setwarnings(False) 
    # Stel de GPIO pinnen in voor de stappenmotor: 

    # Set alle pinnen als uitgang. 
    for pin in StepPins: 
     print "Setup pins" 
     GPIO.setup(pin, GPIO.OUT) 
     GPIO.output(pin, False) 

# Definieer variabelen. 
StepCounter = 0 

# Definieer simpele volgorde 
StepCount1 = 4 
Seq1 = [] 
Seq1 = range(0, StepCount1) 
Seq1[0] = [1, 0, 0, 0] 
Seq1[1] = [0, 1, 0, 0] 
Seq1[2] = [0, 0, 1, 0] 
Seq1[3] = [0, 0, 0, 1] 

# Definieer geadvanceerde volgorde (volgens de datasheet) 
StepCount2 = 8 
Seq2 = [] 
Seq2 = range(0, StepCount2) 
Seq2[0] = [1, 0, 0, 0] 
Seq2[1] = [1, 1, 0, 0] 
Seq2[2] = [0, 1, 0, 0] 
Seq2[3] = [0, 1, 1, 0] 
Seq2[4] = [0, 0, 1, 0] 
Seq2[5] = [0, 0, 1, 1] 
Seq2[6] = [0, 0, 0, 1] 
Seq2[7] = [1, 0, 0, 1] 

# Welke stappenvolgorde gaan we hanteren? 
Seq = Seq2 
StepCount = StepCount2 


# Definieer variabelen. 
StepCounter = 0 


def rotate(rotation_to_do=0): 
    try: 
     while rotation_to_do > 1: 
      for pin in range(0, 4): 
       xpin = StepPins[pin] 
       if Seq[StepCounter][pin] != 0: 
        print "Stap: %i GPIO Actief: %i" % (StepCounter, xpin) 
        GPIO.output(xpin, True) 
      else: 
       GPIO.output(xpin, False) 

      global StepCounter += 1 

      # Als we aan het einde van de stappenvolgorde zijn beland start dan opnieuw 
      if (StepCounter == StepCount): 
       StepCounter = 0 
       if (StepCounter < 0): 
        StepCounter = StepCount 

      # Wacht voor de volgende stap (lager = snellere draaisnelheid) 
      sleep(.01) 
      rotation_to_do -= 1 

    except KeyboardInterrupt: 
     # GPIO netjes afsluiten 
     GPIO.cleanup() 


if __name__ == '__main__': 
    inizialize_pin() 
    run(app, host='145.24.226.121', port=8080) 
関連する問題