Stap 2: Wanneer zal ISS vliegen hier?
Deze functie kwam in een andere blog. Tijdens het werken op een antwoord, ik dacht dat het zou een leuke feature voor de ISS-tracker sinds het hoofdmenu nog een beetje leeg was. Het script maakt geen gebruik van nieuwe functionaliteit van de SenseHat. In feite het alleen de uitvoer wordt weergegeven op het lcd-matrix. Ik opgeslagen het script als een nieuwe release, dus de eerste versie ook nog steeds beschikbaar is. U vindt hier het nieuwe script: versie 1.0
Voor een antwoord op de vraag 'Wanneer is de volgende keer dat ISS over de locatie van de RPi vliegen zal?', we moeten krijgen van de huidige locatie van de RPi ('Waar ben ik?') en een projectie van die locatie op het ISS vlucht regeling ('Wanneer ISS zullen hier?').
De Google Maps Geocoding API (voor dynamische Geocoding) kunnen produceren locatiegegevens op allerlei verschillende verzoeken. Ik gebruikte het mac-adres van de Wifi-ontvangst te plaatsen voor de coördinaten van de locatie. Python biedt de 'uuid-bibliotheek' te krijgen dat mac-adres, dus we moeten importeren het eerste ('van uuid importeren getnode als get_mac'). De bibliotheek resulteert in het adres als een geheel getal van 48 bits. Google verwacht een indeling met:'s en hoofdletters hexadecimale cijfers. De conversie kan worden gemaakt op een enkele regel:
"MAC = ':'.join (("% 012 X"% mac) [i:i + 2] voor ik in bereik (0, 12, 2))'
Deze blog was niet verondersteld worden over string handling in Python, dus ik het hier laat. De aanroep van de api van Google moet een specifiek formaat, zodat de volgende lijnen de json-object en de kop zijn gemaakt.
Voor het gebruik van Google api is, moet een specifieke API_Key. Dat zijn persoonlijke sleutels; dus ik uit de sleutels in het script gewist, maar u kunt een persoonlijke sleutel op krijgen: GeoCoding voor persoonlijk gebruik de toetsen zijn gratis en zijn beperkt tot 2.500 roept een dag. (Dus niet gebruiken in een lus.)
Als er een probleem (zoals te veel gesprekken) zal een HTTPErrorterugkeren in de api's. Aangezien die fout een subklasse van URLError is en ik niet meer informatie hoefde gebruikte ik alleen de URLError uitzondering.
Het antwoord is een json-record bestaat uit een aaneenschakeling van gelaagde woordenboeken. Je moet ze afschilferen om de coördinaten we moeten.
Dus, om antwoord op de vraag 'waar ben ik?', het script haalt het mac-adres en stuurt dit in een post naar een Google-api. Dit is voldoende gegevens op te bouwen de volgende vraag, maar ik vond het leuk, om één of andere leesbare info van de locatie weer te geven. Daarvoor gebruikte ik de geretourneerde coördinaten voor een post naar een tweede Google api voor Geocoding omgekeerd. Voor deze api moet u een tweede API_KEY en het zal een enorme json record terugkeren. Dus schillen het script van die structuur te verkrijgen van een 'formatted_address'. Let wel: de inhoud van de 'formatted_address' verschilt per situatie! In mijn geval retourneert het gewoon stad en land, dat alles wat ik wilde was, maar als je in de VS, zult u waarschijnlijk ontvangen straatnaam, huisnummer en postcode evenals (die is een maar te veel voor de weergave op de lcd-matrix).
Omdat ik niet ingaan wilde op verschillende nesten 'proberen-met uitzondering van' verklaringen, ik de oproepen onderverdeeld in verschillende Python functies en bijhouden van de stroom door verschillende Booleans (URLn_FOUND). Niet precies een bijdrage aan de leesbaarheid van het script, maar ik probeerde om het te houden zo eenvoudig en transparant mogelijk. Pro programmeurs zal zeker komen met betere manier, gebruik van klassen, etc.
Dus de volgende vraag ('Wanneer zal ISS vliegen over'), met een eenvoudige aanroep van de api op "open-notify.org" kan worden beantwoord. Deze api retourneert een matrix van datum, tijd en duur. De duur is gebaseerd op de momenten dat ISS bij ongeveer 20 graden boven de horizon zullen. Ik heb alleen gebruikt voor het eerste item (de volgende degenen zal verschillen ongeveer 90 minuten elke tijdig - rondetijd van ISS - en natuurlijk in duur).
Nou, maakt dit Sense(hat)? Ik weet het niet. Naar mijn mening de SenseHat is in wezen over milieugegevens en gemakkelijk worden getoond op een lcd-matrix. Mijn hobby is het opbouwen van (bijna) autonome robots. De SenseHat kan produceren (sommige) IMU gegevens te gebruiken bijvoorbeeld met een balancing robot. Omdat de GPIO pinnen niet langer toegankelijk, moet communiceren met servo's, dc/stappenmotoren, lidar/ir/ons-sensoren, etc. gebeuren via een andere microprocessor board. (Serieel) Communicatie tussen planken brengt in geen onnodige latency. Dus voorlopig blijf ik bij mijn huidige architectuur: met behulp van microprocessoren zoals Arduino aan te pakken met het 'firmware' deel (sensoren, actuatoren/motoren, met inbegrip van balancing/odometry) en hebben de RPi deal met meer zware logica en -verwerking, zoals computer-visie.
Niettemin was het leuk spelen met de SenseHat en ik ben echt dol op de Astro Pi-project.
Het verlaten van het hoofdmenu in het script met één vacature... Dus, ik ben echt geïnteresseerd in ideeën!
Misschien... Een functie zou werken een zaklamp, 'Groeten ISS bemanning' in Morse knippert telkens wanneer het ISS voorbij aan uw huis gaat?