- Wymagane komponenty:
- Moduł GPS i jego działanie:
- Przygotowanie Raspberry Pi do komunikacji z GPS:
- Połączenia dla modułu GPS Raspberry Pi Interfejs:
- Testowanie przed skryptem Python:
Jedna z najfajniejszych platform wbudowanych, taka jak Arduino, dała twórcom i majsterkowiczom możliwość łatwego uzyskiwania danych o lokalizacji za pomocą modułu GPS, a tym samym tworzenia rzeczy, które opierają się na lokalizacji. Przy ilości mocy dostarczanej przez Raspberry Pi, z pewnością będzie całkiem niesamowite budowanie projektów opartych na GPS z tymi samymi tanimi modułami GPS i na tym skupia się ten post. Dzisiaj w tym projekcie połączymy moduł GPS z Raspberry Pi 3.
Celem tego projektu jest zbieranie danych o lokalizacji (długość i szerokość geograficzna) przez UART z modułu GPS i wyświetlanie ich na wyświetlaczu LCD 16x2, więc jeśli nie jesteś zaznajomiony ze sposobem współpracy 16x2 LCD z Raspberry Pi, to kolejna świetna okazja do nauki.
Wymagane komponenty:
- Raspberry Pi 3
- Moduł GPS Neo 6m v2
- Wyświetlacz LCD 16 x 2
- Źródło zasilania dla Raspberry Pi
- Kabel LAN do podłączenia pi do komputera w trybie bezgłowym
- Kable prototypowe i Jumper
- Rezystor / potencjometr do wyświetlacza LCD
- Karta pamięci 8 lub 16 Gb z systemem Raspbian Jessie
Poza tym musimy zainstalować bibliotekę GPS Daemon (GPSD), bibliotekę 16x2 LCD Adafruit, którą instalujemy w dalszej części tego samouczka.
Tutaj używamy Raspberry Pi 3 z systemem Raspbian Jessie. Wszystkie podstawowe wymagania sprzętowe i programowe zostały wcześniej omówione, możesz je sprawdzić we wprowadzeniu do Raspberry Pi.
Moduł GPS i jego działanie:
GPS oznacza Global Positioning System i służy do wykrywania szerokości i długości geograficznej dowolnego miejsca na Ziemi z dokładnym czasem UTC (Universal Time Coordinated). Moduł GPS jest głównym elementem naszego projektu systemu śledzenia pojazdów. To urządzenie odbiera współrzędne z satelity co każdą sekundę, wraz z godziną i datą.
Moduł GPS wysyła dane związane ze śledzeniem pozycji w czasie rzeczywistym, a tak wiele danych w formacie NMEA (patrz zrzut ekranu poniżej). Format NMEA składa się z kilku zdań, w których potrzebujemy tylko jednego zdania. To zdanie zaczyna się od $ GPGGA i zawiera współrzędne, czas i inne przydatne informacje. Ten GPGGA jest nazywany danymi poprawek globalnego systemu pozycjonowania. Dowiedz się więcej o odczytywaniu danych GPS i ich ciągów tutaj.
Możemy wyodrębnić współrzędne z ciągu $ GPGGA, licząc przecinki w ciągu. Załóżmy, że znajdujesz ciąg $ GPGGA i zapisujesz go w tablicy, wtedy szerokość geograficzną można znaleźć po dwóch przecinkach, a długość geograficzną po czterech przecinkach. Teraz te szerokości i długości geograficzne można umieścić w innych tablicach.
Poniżej znajduje się ciąg $ GPGGA wraz z opisem:
$ GPGGA, 104534.000, 7791.0381, N, 06727.4434, E, 1,08,0,9,510,4, M, 43,9, M,, * 47
$ GPGGA, HHMMSS.SSS, szerokość, N, długość geograficzna, E, FQ, NOS, HDP, wysokość, M, wysokość, M,, dane sumy kontrolnej
Identyfikator |
Opis |
$ GPGGA |
Dane poprawki systemu Global Positioning |
HHMMSS.SSS |
Czas w formacie godzina minuta sekundy i milisekundy. |
Szerokość |
Szerokość geograficzna (współrzędna) |
N |
Kierunek N = północ, S = południe |
Długość geograficzna |
Długość geograficzna (współrzędna) |
mi |
Kierunek E = wschód, W = zachód |
FQ |
Popraw dane dotyczące jakości |
NOS |
Liczba używanych satelitów |
HPD |
Poziome osłabienie precyzji |
Wysokość |
Wysokość nad poziomem morza |
M |
Metr |
Wysokość |
Wysokość |
Suma kontrolna |
Dane sumy kontrolnej |
Możesz sprawdzić nasze inne projekty GPS:
- Lokalizator pojazdów oparty na Arduino wykorzystujący GPS i GSM
- Oparty na Arduino system ostrzegania o wypadkach samochodowych wykorzystujący GPS, GSM i akcelerometr
- Jak używać GPS z Arduino
- Śledź pojazd w Mapach Google za pomocą Arduino, ESP8266 i GPS
Przygotowanie Raspberry Pi do komunikacji z GPS:
Dobra, więc wskoczę, więc to się nie znudzi, zakładam, że wiesz już dużo o Raspberry Pi, wystarczy, aby zainstalować system operacyjny, uzyskać adres IP, połączyć się z oprogramowaniem terminala, takim jak kit i inne rzeczy dotyczące LICZBA PI. Jeśli masz jakiś problem z wykonaniem którejkolwiek z powyższych rzeczy, zadzwoń do mnie w sekcji komentarzy, a chętnie pomogę.
Pierwszą rzeczą, którą musimy zrobić, aby rozpocząć ten projekt, jest przygotowanie naszego Raspberry Pi 3, aby móc komunikować się z modułem GPS przez UART, uwierz mi, jest to dość trudne i wymagało sporo wysiłku, aby to zrobić dobrze, ale jeśli podążasz mój przewodnik uważnie, dostaniesz to za jednym zamachem, to jest najtrudniejsza część projektu. Tutaj użyliśmy modułu GPS Neo 6m v2.
Aby zanurkować, oto krótkie wyjaśnienie, jak działa UART Raspberry Pi 3.
Raspberry Pi ma dwa wbudowane UART, PL011 i mini UART. Są zaimplementowane przy użyciu różnych bloków sprzętowych, więc mają nieco inne właściwości. Jednak w Raspberry Pi 3 moduł bezprzewodowy / bluetooth jest podłączony do PLO11 UART, podczas gdy mini UART jest używany do ouptut konsoli linux. W zależności od tego, jak to widzisz, zdefiniuję PLO11 jako najlepszy z dwóch UART ze względu na poziom implementacji. Więc dla tego projektu będziemy dezaktywować moduł Bluetooth z UART PLO11 za pomocą nakładki dostępnej w zaktualizowanej aktualnej wersji Raspbian Jessie.
Krok 1: Aktualizacja Raspberry Pi:
Pierwszą rzeczą, którą lubię robić przed rozpoczęciem każdego projektu, jest aktualizacja raspberry pi. Zróbmy więc zwykłe i uruchom poniższe polecenia;
sudo apt-get update sudo apt-get upgrade
następnie uruchom ponownie system za pomocą;
sudo reboot
Krok 2: Konfiguracja UART w Raspberry Pi:
Pierwszą rzeczą, którą zrobimy w ramach tego, jest edycja pliku /boot/config.txt . Aby to zrobić, uruchom poniższe polecenia:
sudo nano /boot/config.txt
u dołu pliku config.txt dodaj następujące wiersze
dtparam = spi = on dtoverlay = pi3-disable-bt core_freq = 250 enable_uart = 1 force_turbo = 1
ctrl + x, aby wyjść i naciśnij y i enter, aby zapisać.
Upewnij się, że nie ma żadnych literówek ani błędów, sprawdzając dwukrotnie, ponieważ błąd może uniemożliwić uruchomienie pi.
Jakie są przyczyny tych poleceń, force_turbo umożliwia UART użycie maksymalnej częstotliwości rdzenia, którą ustawiamy w tym przypadku na 250. Powodem jest zapewnienie spójności i integralności otrzymywanych danych szeregowych. W tym miejscu ważne jest, aby zauważyć, że użycie force_turbo = 1 spowoduje utratę gwarancji na twoją raspberry pi, ale poza tym jest całkiem bezpieczny.
Dtoverlay = pi3-wyłącz-BT rozłącza bluetooth z ttyAMA0 , jest to, aby umożliwić nam dostęp do korzystania z pełnej mocy UART dostępne poprzez ttyAMAO zamiast mini UART ttyS0.
Drugim krokiem w tej sekcji konfiguracji UART jest edycja pliku boot / cmdline.txt
Zasugeruję wykonanie kopii cmdline.txt i zapisanie go przed edycją, aby w razie potrzeby można było wrócić do niego później. Można to zrobić za pomocą;
sudo cp boot / cmdline.txt boot / cmdline_backup.txt sudo nano /boot.cmdline.txt
Zastąp zawartość;
dwc_otg.lpm_enable = 0 console = tty1 root = / dev / mmcblk0p2 rootfstype = ext4 elevator = deadline fsck.repair = yes rootwait cichy splash plymouth.ignore-serial-consoles
Zapisz i wyjdź.
Po wykonaniu tej czynności będziemy musieli ponownie uruchomić system, aby wprowadzić zmiany ( ponowne uruchomienie sudo ).
Krok 3: Wyłączanie usługi Raspberry Pi Serial Getty
Następnym krokiem jest wyłączenie usługi getty seryjnej Pi, polecenie uniemożliwi ponowne uruchomienie przy ponownym uruchomieniu:
sudo systemctl stop [email protected] sudo systemctl wyłącz [email protected]
W razie potrzeby można użyć następujących poleceń, aby ponownie go włączyć
sudo systemctl enable [email protected] sudo systemctl start [email protected]
Uruchom ponownie system.
Krok 4: Aktywacja ttyAMAO:
Wyłączyliśmy ttyS0, następną rzeczą jest włączenie ttyAMAO .
sudo systemctl włącz [email protected]
Krok 5: Zainstaluj Minicom i pynmea2:
Będziemy minicomem, aby połączyć się z modułem GPS i nadać sens danym. Jest to również jedno z narzędzi, których użyjemy do przetestowania, czy nasz moduł GPS działa poprawnie. Alternatywą dla minicom jest oprogramowanie daemon GPSD.
sudo apt-get install minicom
Aby łatwo przeanalizować otrzymane dane, skorzystamy z biblioteki pynmea2 . Można go zainstalować za pomocą;
sudo pip zainstaluj pynmea2
Dokumentację biblioteki można znaleźć tutaj
Krok 6: Instalacja biblioteki LCD:
W tym samouczku będziemy używać biblioteki AdaFruit. Biblioteka została stworzona dla ekranów AdaFruit, ale działa również dla tablic wyświetlających wykorzystujących HD44780. Jeśli twój wyświetlacz jest oparty na tym, powinien działać bez problemów.
Czuję, że lepiej sklonować bibliotekę i zainstalować bezpośrednio. Klonować bieg;
klon git
przejdź do sklonowanego katalogu i zainstaluj go
cd./Adafruit_Python_CharLCD sudo python setup.py install
Na tym etapie zasugeruję ponowne uruchomienie, abyśmy byli gotowi do podłączenia komponentów.
Połączenia dla modułu GPS Raspberry Pi Interfejs:
Podłącz moduł GPS i wyświetlacz LCD do Raspberry Pi, jak pokazano na schemacie połączeń poniżej.
Testowanie przed skryptem Python:
Uważam, że ważne jest przetestowanie połączenia modułu GPS przed przejściem do skryptu w Pythonie. Wykorzystamy do tego minicom. Uruchom polecenie:
sudo minicom -D / dev / ttyAMA0 -b9600
gdzie 9600 oznacza prędkość transmisji, z jaką komunikuje się moduł GPS. Może to być wykorzystane, gdy jesteśmy pewni komunikacji danych między GPS a RPI, nadszedł czas, aby napisać nasz skrypt w Pythonie.
Test można również wykonać za pomocą cat
sudo cat / dev / ttyAMA0
W oknie możesz zobaczyć zdania NMEA, które omówiliśmy wcześniej.
Skrypt Pythona dla tego samouczka GPS Raspberry Pi jest podany poniżej w sekcji Kod.
Po wszystkim, co zostało powiedziane i zrobione, czas przetestować cały system. Ważne jest, aby upewnić się, że GPS jest dobrze ustalony, wyjmując go, większość GPS wymaga od trzech do 4 satelitów, aby uzyskać połączenie, chociaż mój działał w pomieszczeniach.
Działa dobrze? Tak…
Masz pytania lub uwagi? Upuść je w sekcji komentarzy.
Wideo demonstracyjne jest podane poniżej, gdzie pokazaliśmy lokalizację w szerokości i długości geograficznej na wyświetlaczu LCD za pomocą GPS i Raspberry Pi.