wyciągnięcie danych i praca na nich

0

Cześć,

chciałbym za pomocą Flask'a stworzyć domowy server i za jego pomocą sterować diodami rgb podpiętymi do maliny.

sam server mam już stworzony.

template:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>{{ title }} - Wizytowka</title>
</head>
<body>
    <h1>Wizytowka</h1>
    <p>
        {{ content }} 
    </p>
	<form method="POST">
    <div class="checkbox">
    <label>
		<input type="checkbox" name="RedCheck" value="1" /> RED  <br/>
	</div>
	<div class="range">
		<input type="range" name="RedValue" /><br/>
	</div>
	<div class="checkbox">
		<input type="checkbox" name="BlueCheck" value="1" /> Blue  <br/>
	</div>
	<div class="range">
		<input type="range" name="BlueValue" /><br/>
	</div>
	<div class="checkbox">
		<input type="checkbox" name="GreenCheck" value="1" /> Green  <br/>
	</div>
	<div class="range">
		<input type="range" name="GreenValue" /><br/>
    </label>
    </div>
	<input type="submit" />
	</form>
</body>
</html>

kod pythona:

from flask import Flask
from flask import request
from flask import render_template
import RPi.GPIO as GPIO
app = Flask(__name__)



@app.route("/")

def home():


    return render_template('szablon.html', title="Home")

@app.route("/", methods = ["GET", "POST"])
def process_form():

    formData = request.values if request.method == "POST" else request.values
#    response = "Form Contents <pre>%s</pre>" % "<br/>\n".join(["%s:%s" % item for item in formData.items()] )
    RedCheck = request.form.get('RedCheck')
    RedValue = request.form.get('RedValue')
    barwa_led(power=int(RedCheck), value=int(RedValue), channel=36)

    BlueCheck = request.form.get('BlueCheck')
    BlueValue = request.form.get('BlueValue')
 #   sterowanie_LED.barwa_led(power=int(BlueCheck), value=int(BlueValue), channel=38)
    GreenCheck = request.form.get('GreenCheck')
    GreenValue = request.form.get('GreenValue')
  #  sterowanie_LED.barwa_led(power=int(GreenCheck), value=int(GreenValue), channel=40)
    print "RedCheck = " + str(RedCheck)
    print "RedValue = " + str(RedValue)

    print "BlueCheck = " + str(BlueCheck)
    print "BlueValue = " + str(BlueValue)

    print "GreenCheck = " + str(GreenCheck)
    print "GreenValue = " + str(GreenValue)

    return render_template('szablon.html', title="Home")

def barwa_led(power, value, channel):
    try:
        if power == 1:
            GPIO.setwarnings(False)
            GPIO.setmode(GPIO.BOARD)
            GPIO.setup(channel, GPIO.OUT)
            led = GPIO.PWM(channel, 75)
            led.ChangeDutyCycle(value)
            led.start(value)
        elif power is None:
            GPIO.setmode(GPIO.BOARD)
            GPIO.setup(channel, GPIO.OUT)
            led = GPIO.PWM(channel, 75)
            led = stop()
            GPIO.cleanup()
    except:
        print("we have problem")



if __name__ == "__main__":
    app.run(host="192.168.0.16", port=8080)

Problem polega na tym, że dioda błyśnie i nic więcej, nie chce świecić z zadanymi parametrami.

0

Najpierw błąd - masz podwójnie zdefiniowany routing dla ("/"). Ten pierwszy w ogóle powinieneś wyrzucić, a w drugim zrobić warunek, żeby przetwarzało dane tylko wtedy kiedy metoda jest post (if request.method == 'POST':).

A co do samego Twojego problemu - próbowałeś umieścić

 def barwa_led(power, value, channel):

w samym routingu (pod def process_form(): ) zamiast umieszczać go poza routingiem?

0
  1. sprawdź czy sekcja "elif" w barwa_led() na pewno się nie wywołuje (z obojętnie jakich przyczyn) - dodaj print czy inne logowanie
  2. w sekcji "if" zrób krótką pętlę z opóźnieniem czasowym - np. 10 gaśnięć i zapaleń, jeśli zadziała to zapalanie jest OK i gdzieś indziej Ci coś gasi tego leda

Znalezione przy okazji:
błyskanie w pętli: http://www.thirdeyevis.com/pi-page-2.php
opis teoretyczny: http://raspi.tv/2013/rpi-gpio-0-5-2a-now-has-software-pwm-how-to-use-it
najprostszy przykład: https://thepihut.com/blogs/raspberry-pi-tutorials/27968772-turning-on-an-led-with-your-raspberry-pis-gpio-pins

0

dzięki wielkie za zainteresowanie się tematem.

Problem rozwiązałem przez uruchomienie dwóch skryptów.

Jeden ze stroną domową i zapisem danych do pliku, drugi jako obsługa GPIO.
Aby nie obciążać karty pamięci, odczytuję co 2 sekundy, czy nie zmieniła się data zapisu pliku, jeśli tak, to odczytuję wartości i ustawiam odpowiednie sygnały na GPIO.

Może nie jest to najbardziej profesjonalne rozwiązanie, ale na początek działa.
Z czasem rozbuduję i dopracuję całość.

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1