Stap 1: Het script
U vindt het volledige script op: Bitbucket
Eerste van alle bibliotheken nodig:
- SenseHat bibliotheek. (I vervangen de standaard geïnstalleerde RTIMUlib door RTIMUlib2)
- opdracht van het OS en sys als beëindiging van de uitvoering van het script parseren
- json voor het ophalen van de gegevens van de API roept in een Python woordenboek
- urllib2 voor toegang tot de URL's via het web
- DateTime en tijd voor de hand liggende redenen
- pygame voor interpretatie van de gebeurtenissen van de joystick
- IssFlags een tweede Python script met alle definities van de sprite van de vlaggen
De main-sectie bevat de instructies om op te halen van de gebeurtenissen (joystick bewegingen) van de wachtrij pygame. Dit deel moet altijd in de hoofdlus van het script. De joystick is een 5-weg knop (omhoog, omlaag, links, rechts, Press), die 10 verschillende evenementen (5 keer ToetsOmhoog (KeyUp), 5 keer KEYDOWN produceert). Wanneer de joystick te duwen, produceert een 2 evenementen (KEYUP en KEYDOWN) met de zelfde keycode (omhoog, omlaag, links, rechts). Ik eerst de wachtrij schoongemaakt na het lezen van een enkele gebeurtenis, maar wanneer ik de functie trackISS() toegevoegd aan de hoofdlus, in sommige eigenaardige manier, pygame beide evenementen afgehandeld voordat u de wachtrij. Voor die reden de handle.event() functie begint met een filter op Evenementtype. De rest spreekt voor zich.
trackISS() werd toegevoegd aan de hoofdlus te maken het script ietsje levendiger: wanneer er geen toetsen worden gebruikt, de locatie van het ISS wordt weergegeven. De functie is eenvoudig gehouden: een json-record van de API krijgen, de gegevens die worden ontvangen via een aanroep naar een tweede API verrijken en de resultaten weergeven.
Een beschrijving van de API's en voorbeelden over het gebruik van hen kan worden gevonden op: ISS API's
De gegevensstructuur van de json-records kan ook gemakkelijk worden opgehaald door de url te kopiëren in een browser. (Na alle een API is gewoon een 'niet-zo-goed-op zoek-url'.) A 'proberen-met uitzondering van' verklaring omgaat met toegang tot de API-url. Dit wordt gedaan om te voorkomen dat het script van het verpletteren wanneer de url is niet toegankelijk (veroorzaakt door bijvoorbeeld verlies van wifi, een glitch van uw provider of onderhoud gedaan op de API-server, enz.).
De eerste API geeft als resultaat een heleboel gegevens zoals zonne-coördinaten, de snelheid, de zichtbaarheid en de coördinaten van de aarde. Om te verrijken deze gegevens met een landcode en de huidige tijdzone, moeten de lengte- en breedtegraad geretourneerd door de eerste API aan de tweede URL worden toegevoegd door eenvoudige tekenreekskoppeling.
De tweede API retourneert alleen gegevens wanneer het ISS boven land is. Boven zee de API geeft als resultaat de beruchte "404 pagina niet gevonden fout". Dus, na het controleren van de beschikbaarheid van de url, het script controleert of er een HTTPError ook. Wanneer het ontmoeten van een HTTPError, wordt de ligging aan zee weergegeven. Als gegevens wordt geretourneerd, wordt de landcode wordt gebruikt om te zoeken naar de gegevens van de vlag.
De functie showLevels() behandelt de pitch en roll gegevens. Het bevat een lus controleren de richting van de RPi en timing van de niet-actieve positie van de framboos. Elke keer als de RPi wordt verplaatst binnen de maximale tijd, wordt het aantal rijen en collumns berekend en weergegeven. De grootte van de matrix lcd (8 x 8) bepaalt de resolutie van het niveau (180 degr / 8). Aangezien er geen centrum/midden van de matrix is, wordt de rij/kolom om mee te beginnen dient te worden bepaald elke keer, afhankelijk van het verkeer (neus of staart, links of rechts). Het is geen geavanceerde codering, enkel behandeling elke eis/beperken op een moment.
De environmentals() functie roept enkel voor elke sensor tegelijk. De codering voor elke sensor komt rechtstreeks uit de voorbeelden van de SenseHat (de map is onderdeel van de installatie). Wees ervan bewust dat de magnetometer aangedrongen de gyroscoop en de accelerometer schakelt. Hebt u om in te schakelen die elke keer met behulp van de 'set_imu_config (bool, bool, bool)' verklaring.
Tot nu toe voor wat ik uit de SenseHat krijgen kon. Hopelijk helpt het mensen met de eerste stappen met behulp van de Raad van bestuur. Ik ben benieuwd naar andere/nieuwe ideeën voor apllications. En natuurlijk voel je vrij om duwen meer vlaggen in het IssFlag.py-script.