Styra Arduino med python based web API (ingen php) (3 / 6 steg)
Steg 3: Skapa webbservern med python
Jag är ingen expert i webbprogrammering eller särskilda nätverksprotokoll men jag lyckades styra min arduino över nätet så jag tror att ni alla kan också! Vi kommer att skapa en mycket grundläggande webbplats och har vår dator vara värd. För att göra detta vi kommer att använda webbramverk kolven för att skapa en webb baserad API för att styra våra arduino. Jag rekommenderar varmt att ni alla att läsa igenom några exempel på att använda kolven så att du förstår grunderna i hur det fungerar och eftersom jag inte kan vara den bästa läraren.
Vad vill vi göra?
- Skapa en webbsida med 2 knappar
- Stänga av LED-knappen
- Slå på LED-knappen
- När vi slår på/av LED vill vi läsa värdet på våra fotomotstånd och Visa den
- Skapa en specifik URL för att förvandla våra LED på/av - nödvändigt för web API
Om du vill skapa en dynamisk webbsida som uppdaterar med våra fotomotstånd värde när vi ladda sidan måste vi skapa en mallsida i kolven. Kolven kommer att använda det värde som vi får från våra fotomotstånd och skicka den till vår mall ska visas. Kolven följer automatiskt en viss katalog format när du söker efter vår mall så att medborgargarden om där du placera vissa filer. I katalogen du arbetar i kommer du vill skapa en katalog som heter mallar. Vi kommer att lägga vår mallsida där. Vår mallen HTML-sidan kommer att se mycket lik en vanlig HTML-sida bara med en extra möjlighet att placera en variabel någonstans. Kopiera kodsträng html på denna länk: http://codepen.io/theown1/pen/RNeYMg i en ny fil heter index.html och plats som filen i katalogen mallar.
Kopiera koden nedan till en fil som heter hello_flask_world.py lappa av koden nedan är vår grundläggande kolven webbsida. Dess ganska enkelt att förstå, vi har bara en webbsida på adressen '/' som är startsidan. URL för denna webbsida kommer att vara din IP-adress i nätverket eller 127.0.01:5000. När någon ansluter till vår hemsida göra vi bara vår mall som vi hade tidigare med vissa värde som vi ska ändra till våra fotomotstånd utgång senare. Om vår hemsida blir en POST-begäran aka någon trycker på en knapp på vår sida då vår server utför den specifika uppgiften att skriva ut vad som hände och skickar dig tillbaka till huvudsidan. Som du skulle en normal python program kan du köra denna del av koden nedan. ($ python hello_world.py)
från kolven importera kolv, render_template, begäran, redirect, url_for
app = Flask(__name__)
# Vi kan göra 2 olika förfrågningar på vår webbsida
# FÅ = vi bara skriva in URL:
# INLÄGGET = någon form av överföringen som en knapp
metoder = ["POST", "Få"])
def hello_world():
# variabler för mallsida (templates/index.html)
författare = "Kyle"
readval = 10
# om vi gör en post-begäran på webbsidan aka tryck knappen sedan göra saker
om request.method == "POST":
# om vi trycker på turn på knappen
om request.form['submit "] =="Vända på":
skriva ut "TURN ON"
# om vi trycker på Stäng av knappen
Elif request.form['submit'] == "Stänga av":
skriva ut "TURN OFF"
annat:
passera
# standardsidan för att Visa kommer att vara vår mall med vår mallvariabler
återgå render_template ("index.html", författare = författare, value=100*(readval/1023.))
om __name__ == "__main__":
# kan lansera vår hemsida!
# gör 0.0.0.0 så att vi kan logga in på denna hemsida
# med en annan dator i samma nätverk senare
app.Run(Host='0.0.0.0')
När du kör programmet bör du få en effekt som liknar bilden ovan. Se till att du ansluter till webbsidan i webbläsaren på http://127.0.0.1:5000 / när du kör python skript (och hålla den igång!) Sedan spela med knapparna och kontrollera att du får dem att skriva ut något i terminalen.
Den mapp du arbetar i bör nu ha alla filer nedan i motsvarande kataloger.
ARBITRARY_WORK_FOLDER /
|--pyduino.py # pyduino fil
|--analog_read_test.py # pyduino kod för att kontrollera krets
|--hello_flask_world.py # din första kolven webbsida
|--mallar / # katalog att lagra kolven mallar
|--index.html # vår HTML-mall
Därefter är det dags att integrera våra Arduino kontroller i webbservern!