Raspberry Pi Internet bildskärm (25 / 25 steg)
Steg 25: Hur Python programmen fungerar
Det finns två kund Python program används i detta instructable att skapa Raspberry Pi Internet bildskärm.
RPI-internet-monitor.py
Första programmet "rpi-internet-monitor.py" startas med kommandot:
efter upp python /home/pi/python_programs/rpi-internet-monitor.py
i system-filen "/ etc/nätverken/gräns flat". "Post upp" kommandot körs när nätverksgränssnitt är igång.
Listor 1 till 5 Visa källkoden för rpi-internet-monitor.py programmet:
Linje 3-17 (notering 1) import behövs bibliotek och definiera konstanter som används i programmet.
- Linje 3-6 importera bibliotek som är kräver att utfärda kommandon, får tid och låta programmet läsa och skriva GPIO stiften.
- Linje 8 definierar GPIO pin brukade berätta om knappen på växeln avstängning var intryckt.
- Linje 9 definiera GPIO PIN-koden används för att styra belysning av ljuset på växeln avstängning.
- 10-12 rader definierar GPIO stiften används för att styra belysning av lysdioderna i tornet lyktan.
- Linje 14 anger antalet sekunder att vänta mellan utfärda kommandot "ping".
- Linje 15 anger antalet sekunder att vänta mellan utfärdande test av hur väl Internetanslutningen fungerar.
- Linje 17 visar vilka platser som är pingade för att se hur väl Internetanslutningen fungerar. Google är alltid ett bra val. Jag valde Comcast eftersom de är min internet-leverantör. Dessa kan ändras till vad du vill och du kan ytterligare platser i listan.
Raderna 19-22 (notering 1) definierar funktionen "debug_message". Denna funktion används för att skriva ut meddelanden som hjälper till att felsöka "rpi-internet-monitor.py" Python programmet om det inte fungerar korrekt. Felsökning är aktiverat genom att köra programmet med - debug växeln enligt följande:
python-/home/pi/python_programs/rpi-internet-monitor.py-debug
- Linjerna 21-22 kontrollera för att se om input variabeln "debug_indicator" är satt till "True" och i så fall skriva meddelandet anges "output_message", annars inga meddelanden skrivs ut.
Linjerna 24-34 (notering 2) definierar funktionen "ping". Funktionen ping utfärdar kommandot "ping" system att avgöra om webbplatsen som anges av "webbplatsen" är nåbar. Funktionen returnerar en nolla om ping var misslyckad och en om ping var framgångsrik.
- Linje 26 konstruerar den Linux befalla till gör ping.
- Linje 28 utfärdar kommandot med funktionen "check_output" från "subprocess"-biblioteket.
- Lina 29 talar python program för att köra linjer 30 och 31 om kommandot misslyckas (t.ex. på webbplatsen är inte kan nås).
- Linje 30 skriver ut en felsökning meddelande anger platsen inte kan nås.
- Linje 31 returnerar noll till funktionen som kallas "ping".
- Rad 32 är där utförande fortsätter om ping lyckades.
- Line 33 skriver ut en felsökning meddelande anger platsen kan nås.
- Linje 34 returnerar en till funktionen som kallas "ping".
Linjerna 36-46 (notering 2) definierar funktionen "ping_sites". "Ping_sites" funktion pingar varje av platserna som anges i "site_list" antalet gånger som angetts med "tider" med en fördröjning i sekunder mellan pingar anges av "väntetid".
- Linje 39 anger antalet framgångsrika pingar till noll.
- Linje 40 uppsättningar det totala antalet ping som kommer att provas genom att multiplicera antalet försök angivna av "tider" av numrera av platser som anges i "site_list".
- Linje 41 skapar en loop som kommer att utförs antalet gånger som angetts med "tider".
- Linje 42 skapar en annan slinga som kommer att utföras för varje webbplats i "site_list".
- Linje 43 kallar ping och lägger till värdet som returneras av "ping" (noll om misslyckade, en om framgångsrika) med antalet framgångsrika ping.
- Linje 44 anropar funktionen "time.sleep" systemet att vänta på antalet sekunder som anges av "väntetid".
- Linje 45 körs efter alla slingor är klara och utskrifter ett debug meddelande som anger vilken procentandel av ping försökte var framgångsrika.
- Linje 46 returnerar procentandelen av ping som var framgångsrika till funktionen som kallas "ping_sites".
Linjerna 48-53 (notering 3) definierar funktionen "lamp_amber_on". Denna funktion kallas för att aktivera den gula lampan för att indikera när internet-anslutningen fungerar men är inte optimalt.
- Linje 50 utskrifter en felsökning meddelande som anger att funktionen anropades.
- Linje 51 använder funktionen "utgång" i GPIO biblioteket för att se till att den röda lampan är avstängd.
- Linje 52 använder funktionen "utgång" i GPIO biblioteket för att vända den gula lampan slås på.
- Linje 53 använder funktionen "utgång" i GPIO biblioteket för att kontrollera att den gröna lampan är avstängd.
Linjerna 55-60 (notering 3) definierar funktionen "lamp_green_on". Denna funktion kallas för att aktivera den gröna lampan för att indikera när internet-anslutningen fungerar.
- Linje 57 skriver ut en felsökning meddelande som anger att funktionen anropades.
- Linje 58 använder funktionen "utgång" i GPIO biblioteket för att se till att den röda lampan är avstängd.
- Linje 59 använder funktionen "utgång" i GPIO biblioteket för att se till att den gula lampan är avstängd.
- Linje 60 använder funktionen "utgång" i GPIO biblioteket till vända den gröna lampan på.
Linjerna 62-67 (notering 3) definierar funktionen "lamp_red_on". Denna funktion kallas för att aktivera röda lampan för att indikera när internet-anslutningen inte fungerar.
- Linje 64 skriver ut en felsökning meddelande som anger att funktionen anropades.
- Linje 65 använder funktionen "utgång" i GPIO biblioteket för att slå den röda lampan på.
- Linje 66 använder funktionen "utgång" i GPIO biblioteket för att se till att den gula lampan är avstängd.
- Linje 67 använder funktionen "utgång" i GPIO biblioteket för att kontrollera att den gröna lampan är avstängd.
Linjerna 69-74 (notering 4) definierar funktionen "lamp_all_off". Denna funktion kallas för att stänga av alla lampor.
- Linje 71 skriver ut en felsökning meddelande som anger att funktionen anropades.
- Linje 72 använder funktionen "utgång" i GPIO biblioteket för att se till att den röda lampan är avstängd.
- Linje 73 använder funktionen "utgång" i GPIO biblioteket för att se till att den gula lampan är avstängd.
- Linje 74 använder funktionen "utgång" i GPIO biblioteket för att kontrollera att den gröna lampan är avstängd.
Linje 76-88 definierar funktionen "lamp_test". Denna funktion används under start av programmet för att testa lamporna. Funktionen blinkar alla lampor i sekvens fem gånger med en tiondel av en sekunds fördröjning mellan blinkar.
- Linje 78 utskrifter en felsökning meddelande anger lampa provningen börjar.
- Raden 79 anger fördröjningen mellan blinkar en tiondels sekund.
- Linje 80 skapar en loop att vilja springa utföra linjer 81-86 fem gånger.
- Linje 81 använder systemfunktionen "time.sleep" för att vänta på en tiondels sekund.
- Linje 82 samtal "lamp_red_on" för att slå bara röda lampan på.
- Linje 83 väntar på en tiondels sekund.
- Linje 84 samtal "lamp_amber_on" för att slå bara gula lampan på.
- Linje 85 väntar på en tiondels sekund.
- Linje 86 samtal "lamp_green_on" för att slå bara den gröna lampan på.
- Linje 87 körs när slingan är klar och kallar den "lamp_all_off" om du vill inaktivera alla lampor.
- Linje 88 utskrifter en felsökning meddelande anger lampa testet har slutförts.
Linjerna 90-127 (5) är huvudprogrammet.
Linjerna 92-99 kolla alternativen skickas till programmet för att avgöra om felsökning meddelanden ska skrivas ut.
- Linje 93 anger "debug" till falskt som anger om kommandot har alternativet anges att felsöka meddelanden inte ska skrivas ut.
- Linje 94 använder systemvariabeln "sys.argv" för att se om alla alternativ som har angetts på kommandoraden. Om de var, kommer linjer 95-99 att genomföras.
- Linje 95 kontrollerar om "-debug" har angetts.
- Linje 96 körs om "-debug" angavs och sätter värdet för "debug" till sant som visar debug-meddelanden ska skrivas ut.
- Linje 97 gör linjer 98 och 99 köra om något annat än "-debug" har angetts.
- Linje 98 skriver ut ett felmeddelande som anger att ett okänt alternativ angavs och vad det var.
- Linje 99 stannar programmet med en felkod 1 på grund av okänt alternativ.
Linjer 101-105 setup GPIO stiften används av programmet för att styra lampor.
- Linje 102 använder funktionen "setmode" från GPIO biblioteket för att ange numreringsschema används för GPIO stiften
- Linje 103 använder funktionen "setup" från GPIO biblioteket för att ange PIN-koden används för att styra den gröna lampan till ett utgångsstiftet.
- Linje 104 använder funktionen "setup" från GPIO biblioteket för att ange PIN-koden används för att styra en utgångsstiftet bärnsten lampans.
- Linje 105 använder funktionen "setup" från GPIO biblioteket för att ange PIN-koden används för att styra röda lampan till ett utgående stift.
107-111 flash lampor för att ange programmet börjar och lämna gula lampan på tills programmet startar tester internet anslutningsstatus.
- Linje 108 använder funktionen "turn_all_off" för att stänga av alla lampor.
- Linje 109 använder funktionen "lamp_test" för att blinka lyktorna i sekvens fem gånger.
- Linje 110 väntar på en halv sekund.
- Linje 111 använder funktionen "lamp_amber_on" för att slå gula lampan på.
Linjerna 113-126 är den viktigaste loop som ping platser, vänder lämpliga lampan baserat på ping, waits och upprepas tills avstängning brytaren trycks eller makt är avstängd.
- Linje 114 anger antalet tester kör till noll.
- Linje 115 skapar en loop som kommer att köras förrän växeln avstängning trycks eller makt är avstängd.
- Line 116 lägger en till antalet tester kör.
- Linje 117 utskrifter en felsökning meddelande som anger att en testet börjar.
- Linje 118 anropar funktionen "ping_sites" ange listan över platser att testa, fördröjningen mellan ping, och antalet ping att göra.
- Linje 119 och 120 kontrollera om andelen framgångsrika tester var noll och, om så är funktionen "lamp_red_on" för att slå den röda lampan på.
- Linje 121 och 122 kontroll för att se om andelen framgångsrika tester var mindre än eller lika med 50% och, om så är funktionen "lamp_amber_on" för att slå gula lampan på.
- Linje 123 och 124 utförs om andelen framgångsrika tester var mellan 51% och 100% och använda "lamp_green_on" för att slå den gröna lampan på.
- Rad 125 utskrifter en felsökning meddelande som anger att programmet kommer att vänta för det angivna antalet sekunder innan du kör nästa test.
- Linje 126 använder funktionen "time.sleep" systemet för att vänta på angivet antal sekunder. Efter förseningen avslutas, går programmet tillbaka till linje 116.
RPI-stopp-btn.py
Det andra programmet "rpi-stopp-btn.py" startas upp under uppstartsprocessen med kommandot
python /home/pi/python_programs/rpi-halt-btn.py &
i system-filen "/ etc/rc.local". Den "&" i slutet av kommandot gör programmet körs som en separat process som håller igång tills programmet avslutas.
Notering 6 visar källkoden för rpi-stopp-btn.py programmet:
Linje 2-13 initiera programmet.
- Linje 2-3 importera de bibliotek som krävs för att styra enheter anslutna till GPIO stiften, fråga systemkommandon, kan sova.
- Rader 6-7 ange PIN-koden som kommer att övervaka växeln avstängning och PIN-koden som kommer att kontrollera belysning av lysdioden i växeln.
- Linje 8 används funktionen "setmode" från GPIO biblioteket för att ange vad adressnumreringen programmet kommer att använda för GPIO stiften.
- Linje 9 används funktionen "setup" från GPIO biblioteket för att ange GPIO pin för att kontrollera lysdioden i växeln för att vara en utgångsstiftet.
- Linje 10 använder funktionen "setup" från GPIO biblioteket för att ställa GPIO PIN-koden för att övervaka växeln för pressar vara en ingångsstift.
- Linje 11 använder funktionen "utgång" från GPIO biblioteket att lysa upp lampan i växeln genom att ange värdet i PIN-koden till true.
- Linje 13 skriver ut ett meddelande som anger att växeln nu övervakas.
Linje 18 använder funktionen "wait_for_edge" från GPIO biblioteket till att vänta på växeln vara intryckt.
Raderna 19-21 används för felsökning. När programmet körs från kommandoraden och Ctrl/C trycks dessa rader kommer att genomföras.
- Linje 20 skriver ut ett meddelande som anger att användaren stoppade programmet.
- Linje 21 använder funktionen "rensning" från GPIO biblioteket för att stoppa övervakningen av GPIO stiften.
Linjerna 22-26 körs när växeln avstängning har tryckts.
- Linje 23-25 orsaken LED på växeln för att stänga av kort för att ge användarfeedback att växeln var tryckt.
- Rad 22 skriver ut ett meddelande som anger att växeln avstängning var tryckt.
- Lina 23 använder funktionen "utgång" från GPIO biblioteket inaktivera LED.
- Linje 24 innebär att sova i en halv sekund.
- Linje 25 tänds lampan tillbaka.
- Linje 26 använder funktionen "subprocess.call" för att köra kommandot "sudo stopp" som kommer att orsaka Raspberry Pi till stängningen.
När Raspberry Pi har kommer att avstängning LED på växeln avstängning stänga av som anger det är säkert att koppla bort kameran från eluttaget.