Levande ISS tracker med Raspberry Pi med en SenseHat (uppdaterad) (2 / 2 steg)
Steg 2: När kommer ISS flyger över här?
Den här funktionen kom över i en annan blogg. Medan du arbetar på ett svar, trodde jag det skulle vara en trevlig funktion för ISS tracker eftersom huvudmenyn var fortfarande lite tomt. Skriptet använder inte nya funktionalitet i SenseHat. I själva verket visar det bara utgång på LCD-matrisen. Jag sparade skriptet som en ny release, så den första versionen är också fortfarande tillgänglig. Du kan hitta den nya skriften här: Release 1.0
För ett svar på frågan "När är nästa gång ISS kommer att flyga över platsen för RPi?", vi måste få den aktuella platsen för RPi ("Var är jag?") och en projektion av den platsen på ISS flight system ("När kommer ISS att här?").
Google Maps Geocoding API (för dynamisk Geocoding) kan producera lokaliseringsuppgifter vid många olika typer av begäran. Jag använde mac-adressen för Wifi värd för att lägga för platsens koordinater. Python ger "uuid-bibliotek" för att få den mac-adressen, så vi måste importera den första ("från uuid importera getnode som get_mac"). Biblioteket returnerar adressen som ett 48-bitars heltal. Google förväntar sig ett format med:'s och versaler hexadecimala siffror. Konvertering kan göras i en enda rad:
"MAC =": ".join (("% 012 X"% mac) [i:i + 2] för jag i intervall (0, 12, 2))"
Denna blogg var inte tänkt för att handla om sträng hantering i Python, så jag lämnar det här. Anropet till Google api behöver ett specifikt format, så i nästa raderna skapas json-objektet och i huvudet.
Om du vill använda Google api's, man behöver en särskild API_Key. De är personliga knappar; så jag raderas ut nycklarna i skriptet, men man kan få en personlig nyckel på: geokodning för personlig användning knapparna är gratis och är begränsade till 2.500 kallar en dag. (Så att inte använda den i en loop.)
Om det finns ett problem (som för många samtal) returneras api's ett HTTPError. Eftersom detta fel är en underklass till URLError och jag behövde inte veta mer använt jag bara URLError undantaget.
Svaret är json rekord som består av en sammansättning av flera lager ordböcker. Har du lossnar dem för att få koordinater vi behöver.
Så, för att svara på frågan 'var är jag?', skriptet erhåller mac-adressen och skickar den i ett inlägg till en Google api. Detta är tillräckligt med data för att bygga upp nästa fråga, men jag tyckte det var trevligt, att visa vissa läsbar information om läge. För detta använde jag returnerade koordinaterna för ett inlägg till ett andra Google api för Omvänd geokodning. För detta api du behöver en andra API_KEY och det kommer tillbaka en enorm json post. Så peeling skriptet av strukturen att få en "formatted_address". Märk: innehållet i "formatted_address" skiljer sig per situationen! I mitt fall bara returneras stad och land, vilket var allt jag ville ha, men om du är i USA, förmodligen får du Streetname, husnummer och postnummer också (vilket är en men för mycket för att visa på LCD-matrisen).
Eftersom jag inte ville gå in på häckar flera 'prova-utom"uttalanden, jag indelat samtal i flera Python funktioner och hålla reda på flödet av flera booleska värden (URL:n_FOUND). Inte precis ett bidrag till läsbarheten av manus, men jag försökte hålla det så enkelt och tydligt som möjligt. Pro programmerare kommer säkert komma med bättre sätt, använder klasser, etc.
Så, nästa fråga ("när kommer ISS flyger över") kan besvaras med ett enkelt samtal till api på "open-notify.org". Detta api returnerar en array av datum, tider och varaktigheter. Varaktigheten är baserat på de stunder ISS kommer att vara på ca 20 grader över horisonten. Jag använde bara den första posten (de nästa som kommer att skilja cirka 90 minuter varje i tid - Varvtid av ISS - och naturligtvis i längd).
Tja, innebär detta att Sense(hat)? Jag vet inte. Enligt min mening visar SenseHat i huvudsak om miljödata och lätt på en lcd-matris. Min hobby är att bygga (nästan) autonoma robotar. SenseHat kan producera (vissa) IMU data att använda till exempel med en balanserande robot. Eftersom GPIO stiften är inte längre tillgänglig, måste kommunicera med servo, dc/stegmotorer, lidar/ir/oss-sensorer, etc. göras genom en annan mikroprocessor ombord. (Seriell) Kommunikation mellan styrelser ger onödig fördröjning. Så nu ska jag sticka till min nuvarande arkitektur: med mikroprocessorer som Arduino att ta itu med den "firmware" delen (givare, ställdon/motorer, inklusive balansering/odometry) och har RPi affären med mer tunga logik och bearbetning, som datorseende.
Det var ändå kul att spela med SenseHat och jag är verkligen förtjust i Astro Pi projektet.
Lämnar huvudmenyn i skriptet med en ledig plats... Så är jag verkligen intresserad av idéer!
Kanske... En funktion för att driva en ficklampa, blinkande "Hälsningar ISS besättning" i Morse varje gång ISS passerar över ditt hus?