# Расшифровка данных GPS - Виртуальное IoT-устройство и Raspberry Pi В этой части урока вы расшифруете сообщения NMEA, полученные от GPS-датчика с помощью Raspberry Pi или виртуального IoT-устройства, и извлечете широту и долготу. ## Расшифровка данных GPS После того как необработанные данные NMEA были считаны с последовательного порта, их можно расшифровать с помощью библиотеки NMEA с открытым исходным кодом. ### Задача - расшифровать данные GPS Программируйте устройство для расшифровки данных GPS. 1. Откройте проект приложения `gps-sensor`, если он еще не открыт. 1. Установите пакет `pynmea2` через Pip. Этот пакет содержит код для расшифровки сообщений 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-датчиком и расшифровки данных успешно выполнено! --- **Отказ от ответственности**: Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.