# Декодиране на GPS данни - Виртуален IoT хардуер и Raspberry Pi В тази част от урока ще декодирате NMEA съобщенията, прочетени от GPS сензора чрез Raspberry Pi или Виртуално IoT устройство, и ще извлечете ширина и дължина. ## Декодиране на GPS данни След като суровите NMEA данни бъдат прочетени от серийния порт, те могат да бъдат декодирани с помощта на библиотека с отворен код за NMEA. ### Задача - декодиране на GPS данни Програмирайте устройството да декодира GPS данните. 1. Отворете проекта на приложението `gps-sensor`, ако вече не е отворен. 1. Инсталирайте Pip пакета `pynmea2`. Този пакет съдържа код за декодиране на NMEA съобщения. ```sh pip3 install pynmea2 ``` 1. Добавете следния код към импортирането в файла `app.py`, за да импортирате модула `pynmea2`: ```python import pynmea2 ``` 1. Заменете съдържанието на функцията `print_gps_data` със следното: ```python msg = pynmea2.parse(line) if msg.sentence_type == 'GGA': lat = pynmea2.dm_to_sd(msg.lat) lon = pynmea2.dm_to_sd(msg.lon) if msg.lat_dir == 'S': lat = lat * -1 if msg.lon_dir == 'W': lon = lon * -1 print(f'{lat},{lon} - from {msg.num_sats} satellites') ``` Този код използва библиотеката `pynmea2`, за да анализира реда, прочетен от серийния порт UART. Ако типът на съобщението е `GGA`, това е съобщение за фиксиране на позиция и се обработва. Стойностите за ширина и дължина се извличат от съобщението и се конвертират в десетични градуси от NMEA формата `(d)ddmm.mmmm`. Функцията `dm_to_sd` извършва тази конверсия. След това се проверява посоката на ширината, и ако тя е южна, стойността се преобразува в отрицателно число. Същото се прави и с дължината – ако тя е западна, се преобразува в отрицателно число. Накрая координатите се отпечатват на конзолата, заедно с броя на сателитите, използвани за определяне на местоположението. 1. Стартирайте кода. Ако използвате виртуално IoT устройство, уверете се, че приложението CounterFit работи и GPS данните се изпращат. ```output pi@raspberrypi:~/gps-sensor $ python3 app.py 47.6423109,-122.1390293 - from 3 satellites ``` > 💁 Можете да намерите този код в папката [code-gps-decode/virtual-device](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/virtual-device) или в папката [code-gps-decode/pi](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/pi). 😀 Вашата програма за GPS сензор с декодиране на данни беше успешна! --- **Отказ от отговорност**: Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод.