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.

Se Steg
Relaterade Ämnen

Raspberry Pi Internet väderstation

Detta Instructable visar dig hur man bygger en riktigt cool Raspberry Pi Internet-baserade väderstation. Faktiskt, att kalla denna bygga en "väderstation" är lite av ett under uttalande. Detta bygga skulle lätt kunna utvidgas för att ge mycket m...

1979 bang & Olufsen Raspberry Pi Internet Radio

detta är en 1979 Bang & Olufsen Beocord 1500 kassettbandspelare som jag har konverterat in i en fristående Raspberry Pi internetradio. De analoga VU-mätarna drivs av Pi via en DAC (Digital till analog omvandlare) krets, med aktuell tid, station och s...

Setup Raspberry Pi utan bildskärm och tangentbord

NOOBS kräver en bildskärm, tangentbord och mus, som lägger till ~ $60 (USD) eller mer i kostnad. Men när Wi-Fi fungerar, behövs dessa enheter inte längre.Varje gång jag startar ett nytt projekt Raspberry Pi, jag släpa ut bildskärm, tangentbord och mu...

Roberts 747 - DIY Raspberry Pi internet radio/streamer

Roberts 747, stor radio från 1990. Arbetar helt i mycket gott skick. Hittade den på antika försäljning efter en lång jakt efter något liknande detta.Jag har en extra Raspberry Pi modell B V1 hemma som reserv och det var bara att fånga damm i några år...

Att lägga till lokala internet-proxyinställningar i Raspberry pi

I denna tutorial ska jag berätta hur du ansluta internet via proxy. Varför jag är intresserad av detta är eftersom de flesta högskolor har internet-anslutning via lokala ethernet och ethernet har det egna proxyinställning och användaren måste ange si...

Förvandla din Raspberry Pi i ett Retro Arcade

The Raspberry Pi är en fantastisk miniatyr-dator som är perfekt för att experimentera med personliga projekt, men ibland den största utmaningen är att välja ett projekt. Med detta lätt att följa guide jag kommer att visa dig hur man förvandlar denna...

Weather Display med hjälp av Arduino och Raspberry Pi

Detta projekt är weather displaysystem använder 16 * 2 lcd, arduino, raspberry pi, internetatt bygga detta projekt är mycket lätt behöver mycket mindre församlingDet var Visa vädret i någon ware i världen på 16 * 2, kan du justera vad du vill visa so...

Väggmonterad SqueezePlayer med Raspberry Pi

Bygga en vägg "SqueezePlayer"-baserat nätverksmusikspelare med hjälp av Squeezelite, Jivelite och en Raspberry Pi. Jag byggde detta projekt eftersom Logitech har slutat göra sin "Squeeze" linje av nätverksansluten musikspelare. Efterso...

Raspberry Pi micro SD kort

Riktmärke microSD-kort används i min Raspberry Pi projekt.Jag kör riktmärken på Pi-hallon, inte på en bärbar dator.Raspberry Pi Forum Moderator skrev: "det är värt att notera att användarmönster för en Pi är drastiskt annorlunda användarmönster i en...

Raspberry Pi B & B + boot SD kort för PROTA OS (HTML5 UI)

Följ detta instructable att få din PROTA OS igång på din Raspberry Pi utan att dra för mycket hår.Anmärkning för din förståelsePROTA OS är ett alternativ, headless-orienterade OS för Raspberry Pi för mig som söker I-just-want-to-plug-and-use. Bränt b...

Garage dörröppnare

Använd en Raspberry Pi och en smartphone (eller laptop) för att öppna, stänga och övervaka en garageport. Att öppna och stänga dörren säkert genom att använda självsignerade certifikat installerat på familjemedlemmarnas mobiltelefoner. Om dörren är ö...

Dryck apparat med webbgränssnitt

The dryck apparaten doserar en blandning av alla fyra vätskor.Dryck apparaten kontrolleras via webbgränssnitt.Registeransvarige är sammansatt av en Raspberry Pi, ett relä och en anpassad relay controller.Bilden av modifierade Raspberry Pi programvara...

Flight Simulator med Arduino och Python

kontrollera alternativet Flight Simulator i Google Earth med hjälp av en Arduino och Accelerometer.Nästan flyga runt i världen; luta accelerometern framåt, bakåt, vänster och höger att styra planets Pitching och bank.Mål:* Lär dig att skicka seriella...

OpenSprinkler

OpenSprinkler Pi (OSPi) är en öppen källkod sprinkler / bevattning förlängning styrelse för Raspberry Pi. Det är en enkel och billig lösning att omvandla en Raspberry Pi till en skicklig sprinkler controller med 8 zoner för gräsmatta och trädgård vat...

IoT: Raspberry Pi Robot med Video Streamer och Pan/Tilt kamera fjärrkontroll över internet

(Om du gillar detta Instructable, glöm inte att rösta på den - ovan: högra hörnet flaggan. Det tävlar om SAKERNAS INTERNET och AUTOMATION tävlingar. Tack så mycket! ;-)Detta är en andra del av min föregående Intructable: IoT - kontrollera en Raspberr...

IoT - kontrollera en Raspberry Pi Robot över internet med HTML och shell skript endast

(Om du gillar detta Instructables, glöm inte att rösta på det (ovan: högra hörnet flaggan). det konkurrerar om SAKERNAS INTERNET och AUTOMATION tävlingar. Tack så mycket! ;-)I detta instructable, vi lära dig att skapa en helt kontrollerad IoT Raspber...

Sakernas Internet med Raspberry Pi-2

Detta är en uppföljning till mitt tidigare instructable Sakernas Internet med Raspberry Pi - 1.(Om inte du är bekant med webbservrar, PHP kodning och grundläggande begrepp för Sakernas Internet, bör du nog gå igenom del 1 första.)I den tidigare instr...

Raspberry Pi OLED Internet bandbredd Display

Detta är en bandbredd bildskärm med en Raspberry Pi och en OLED-display för att grafiskt Visa internet bandbredd till och från vårt hus.En video som visar den arbetande är över.Ibland om internet är långsam eller inte arbetande kan mycket väl det var...

Fireside Internet Radio Player för äldre användare - byggd med Raspberry Pi

Inledning:Idag har vi fantastiska tillgång till bra strömmande innehåll: musik, nyheter, väder, berättelser, etc. Men är denna åtkomst begränsad till dem som kan navigera dagens elektroniska apparater. Detta projekt bygger på en tro som äldre vill oc...