Levande ISS tracker med Raspberry Pi med en SenseHat (uppdaterad) (1 / 2 steg)
Steg 1: Skriptet
Du kan hitta fullständiga skriptet på: Bitbucket
Först av alla bibliotek behövs:
- SenseHat bibliotek. (Jag ersatte den standard installerade RTIMUlib av RTIMUlib2)
- OS och sys kommandot parsning som slutar skriptkörning
- json för att hämta data API samtal i en Python ordbok
- urllib2 för åtkomst till URL via webben
- datum/tid och tid av uppenbara skäl
- pygame för tolkning av händelserna joystick
- IssFlags en andra Python-skript som innehåller alla sprite definitioner av flaggor
Huvudavsnittet innehåller uttalanden för att hämta händelser (joystick rörelser) pygame kön. Denna del ska alltid vara i det viktigaste kretsar av skriptet. Joysticken är en 5-vägs knapp (uppåt, nedåt, vänster, höger, tryck) som producerar 10 olika evenemang (5 gånger KEYUP, 5 gånger KEYDOWN). När trycka joysticken, producerar en 2 händelser (KEYUP och KEYDOWN) med samma tangentkoden (upp, ner, vänster, höger). Jag städade först i kön efter att ha läst en enda händelse, men när jag till funktionen trackISS() i de viktigaste loop, på något märkligt sätt, pygame hanteras både händelser innan du rensar kön. För det börjar därför funktionen handle.event() med filter på händelsetypen. Resten talar för sig själv.
trackISS() lades till huvudloop göra skriptet lite mer livliga: när inga nycklar som är platsen för ISS visas. Funktionen hålls enkel: få en json post från API, berika de uppgifter som mottagits via ett anrop till en andra API och visa resultatet.
En beskrivning av Apis och några exempel på hur man använder dem, kan hittas på: ISS API
Datastrukturen för json posterna kan också hämtas enkelt genom att kopiera url i en webbläsare. (Efter alla ett API är bara en "inte-så-bra-ser-url".) A 'försöka – utom' uttalande hanterar tillgång till API-url. Detta görs för att förhindra att skriptet brakande när URL: en inte är tillgänglig (orsakad av t.ex. förlust av wifi, en glitch från din leverantör eller underhåll på API-servern, etc.).
Den första API returnerar en mängd data som solar koordinater, hastighet, synlighet och jorden koordinater. För att berika informationen med landkoden och den aktuella tidszonen, måste latitud och longitud returneras av den första API läggas till den andra URL av enkla strängkombination.
Den andra API returnerar endast data när ISS är ovan mark. Ovanför havet returnerar API den ökända "404 sida inte grunda misstag". Så, efter att ha kontrollerat tillgängligheten av URL-adressen, kontrollerar skriptet för en HTTPError också. När möter en HTTPError, visas läget vid havet. Om data har returnerats, används landskoden att söka fram den flaggan.
Funktion showLevels() behandlar data om pitch och rulle. Den innehåller en loop kontroll RPi orientering och timing hallon idle position. Varje gång RPi flyttas inom den maximala inaktiva tid, antalet rader och collumns beräknas och visas. Storleken på LCD-matrisen (8 x 8) bestämmer upplösningen på nivån (180 degr / 8). Eftersom det finns inget centrum/mitten av matrisen, har den rad/kolumnen till att börja med skall fastställas varje gång, beroende på rörelsen (näsa eller svans, vänster eller höger). Det är ingen sofistikerade kodning, bara hantera varje krav/begränsa i taget.
Funktionen environmentals() synar bara för varje sensor i taget. Kodning för varje sensor tas direkt ur de SenseHat exempel (mappen ingår i installationen). Tänk på att kräver magnetometer inaktiverar gyroskopet och accelerometern. Måste du slå dem på varje gång med hjälp av den 'set_imu_config (bool, bool, bool) " uttalande.
Hittills för vad jag kunde få ur SenseHat. Förhoppningsvis hjälper människor med de första stegen med hjälp av styrelsen. Jag är nyfiken på andra/nya idéer för apllications. Och naturligtvis gärna driva fler flaggor i skriptet IssFlag.py.