Trådlös jul Light Timer med Raspberry Pi och Python (7 / 11 steg)
Steg 7: Python Code
En annan disclaimer: Jag är inte heller en datavetare eller programmerare, än mindre en Python expert. Om koden nedan ser hemskt, ineffektiva eller bara får du krypa, gärna skicka en länk till bättre kod, för att människor läser detta i framtiden.Uppdatering 12/13/2013: se mmoon's kommentar nedan en länk till lite nättare kod.
Nu när du har kretsen byggt, är det dags att börja använda Raspberry Pi! Detta är en annan del som förvirrande för första gången Raspberry Pi användaren - det inte var direkt uppenbart hur man faktiskt styra GPIO stiften, eftersom det tydligen är mer än ett sätt att göra det. En Google-sökning på "raspberry pi gpio python" avslöjar flera olika tutorials och Python-paket som du kan hämta. Du kan också Kontrollera stiften direkt från en terminal utan att använda Python alls. Så, det tog mig ett tag att lista ut att den standard Raspbian distribution redan kommer med en Pythonmodul för kontrollerande GPIO stift. Phew!
Kom ihåg att jag antar att du redan har en Raspberry Pi och kör denna punkt, med Raspbian, som kommer med både Python 2.x och 3.x (från och med December 2013). Jag skrev koden i Python 3.2.3 med IDLE 3 (integrerad utvecklingsbibliotek) - det är en genväg för det på Raspbian standardskrivbordet.
För att köra koden:
1. öppna en terminal ("LXTerminal" ikonen på skrivbordet), skriva sudo idle3, och slå till gå in. Detta går IDLE "som root", som krävs för GPIO tillgång med Python.
2. Ladda ner christmas_timer.py (nedan) och sedan öppna den i IDLE 3, eller skapa en ny Python fil och kopiera och klistra in koden nedan.
3. ta en minut att titta på koden och kommentarer. Det enda du behöver redigera är avsnittet mot i början med alla de "på" och "off" gånger (MonOn MonOff, TueOn, etc).
4. du är nu nästan redo att köra koden! Men först... (gå till nästa steg)
# Raspberry Pi anpassade Christmas light timer
# import GPIO modul
importera RPi.GPIO som GPIO# Ställ in GPIO pins som resultat
# Denna konvention är för "P1" header pin konventionen
# där stiften börjar med P1 i övre vänstra
# och gå till P26 i nedre högra, med odds i den
# vänstra kolumnen och jämnar i den högra kolumnen.
# Så, pins P1-11 och P1-12 motsvarar GPIO17 och
# GPIO18 respektive.
GPIO.setmode (GPIO. STYRELSEN)
GPIO.setup (11, GPIO. OUT)
GPIO.setup (12, GPIO. OUT)# import datum och tid moduler
importera datetime
Importera tid# Ange de tider du vill ha lamporna att slå på och av för
# varje dag i veckan. Standard är för ljus för att slå på på
# 5:30 pm och iväg kl 10:30 på vardagar, på kl 5:00 och av
# kl 11:30 på helger. Observera att detta använder 24-timmarsformat.MonOn = datetime.time(hour=17,minute=30,second=0)
MonOff = datetime.time(hour=22,minute=30,second=0)
TueOn = datetime.time(hour=17,minute=30,second=0)
TueOff = datetime.time(hour=22,minute=30,second=0)
WedOn = datetime.time(hour=17,minute=30,second=0)
WedOff = datetime.time(hour=22,minute=30,second=0)
ThuOn = datetime.time(hour=17,minute=30,second=0)
ThuOff = datetime.time(hour=22,minute=30,second=0)
FriOn = datetime.time(hour=17,minute=30,second=0)
FriOff = datetime.time(hour=22,minute=30,second=0)
SatOn = datetime.time(hour=17,minute=0,second=0)
SatOff = datetime.time(hour=23,minute=30,second=0)
SunOn = datetime.time(hour=17,minute=0,second=0)
SunOff = datetime.time(hour=23,minute=30,second=0)
# Lagra dessa tider i en matris för enkel åtkomst senare.
OnTime = [MonOn, TueOn, WedOn, ThuOn, FriOn, SatOn, SunOn]
OffTime = [MonOff, TueOff, WedOff, ThuOff, FriOff, SatOff, SunOff]
# Ställ in en "väntetid" i sekunder. Detta säkerställer att programmet pausar
# kort efter det slår ljuset på eller av. Annars, sedan den
# loop kommer att utföra mer än en gång per sekund, det kommer att försöka hålla
# att när de redan är på (eller inaktivera när de är
# redan borta.
waitTime = 3
# Starta loopen som kommer att köra tills du avbryter programmet eller vända
# av din Raspberry Pi.
samtidigt sant:
# få den aktuella tiden i timmar, minuter och sekunder
currTime = datetime.datetime.now()
# få den aktuella dagen i veckan (0 = måndag, 1 = tisdag, 2 = onsdag...)
currDay = datetime.datetime.now().weekday()
#Check att se om det är dags att sätta lamporna på
om (currTime.hour - OnTime [currDay] .hour == 0 och
currTime.minute - OnTime [currDay] .minute == 0 och
currTime.second - OnTime [currDay] .second == 0):
# Ange GPIO PIN-koden till hög, motsvarighet till
# att trycka på knappen på fjärrkontrollen
GPIO.output (11, GPIO. HÖG)
# vänta under en mycket kort tid sedan ställa
# värdet till låg, motsvarande släpper den
# ON knappen
Time.Sleep(.5)
GPIO.output (11, GPIO. LÅG)
# vänta några sekunder så att slingan inte kommer
# tillbaka genom och tryck på knappen "on" igen
# medan lampor ae redan på
Time.Sleep(waitTime)
#check att se om det är dags att stänga av belysningen
Elif (currTime.hour - OffTime [currDay] .hour == 0 och
currTime.minute - OffTime [currDay] .minute == 0 och
currTime.second - OffTime [currDay] .second == 0):
# Ange GPIO PIN-koden till hög, motsvarighet till
# att trycka på OFF knappen på fjärrkontrollen
GPIO.output (12, GPIO. HÖG)
# vänta under en mycket kort tid sedan ställa
# värdet till låg, motsvarande släpper den
# AV-knapp
Time.Sleep(.5)
GPIO.output (12, GPIO. LÅG)
# vänta några sekunder så att slingan inte kommer
# tillbaka genom och tryck på "off" knappen igen
# medan lampor ae redan borta
Time.Sleep(waitTime)