- Nödvändiga komponenter:
- GPS-modul och dess funktion:
- Förbereder Raspberry Pi för att kommunicera med GPS:
- Anslutningar för Raspberry Pi GPS-modulgränssnitt:
- Testning före Python-skript:
En av de coolaste inbäddade plattformarna som Arduino har gett tillverkare och gör-det-själv-användare möjlighet att enkelt få platsdata med hjälp av GPS-modulen och därmed bygga saker som är beroende av plats. Med mängden kraft packad av Raspberry Pi kommer det verkligen att vara riktigt fantastiskt att bygga GPS-baserade projekt med samma billiga GPS-moduler och det är fokus för detta inlägg. Idag kommer vi i detta projekt att gränssnitt GPS-modul med Raspberry Pi 3.
Målet med detta projekt är att samla in platsdata (longitud och latitud) via UART från en GPS-modul och visa dem på en 16x2 LCD, så om du inte känner till hur 16x2 LCD fungerar med Raspberry Pi, är detta en annan bra möjlighet att lära sig.
Nödvändiga komponenter:
- Raspberry Pi 3
- Neo 6m v2 GPS-modul
- 16 x 2 LCD
- Strömkälla för Raspberry Pi
- LAN-kabel för att ansluta pi till din dator i headless-läge
- Brädbrädor och bygelkablar
- Motstånd / potentiometer till LCD-skärmen
- Minneskort 8 eller 16 GB med Raspbian Jessie
Förutom det behöver vi installera GPS Daemon (GPSD) -bibliotek, 16x2 LCD Adafruit-bibliotek, som vi installerar senare i denna handledning.
Här använder vi Raspberry Pi 3 med Raspbian Jessie OS. Alla grundläggande hårdvaru- och programvarukrav har tidigare diskuterats, du kan slå upp det i Raspberry Pi Introduktion.
GPS-modul och dess funktion:
GPS står för Global Positioning System och används för att upptäcka latitud och longitud för vilken plats som helst på jorden, med exakt UTC-tid (Universal Time Coordinated). GPS-modulen är huvudkomponenten i vårt fordonsspårningssystemprojekt. Enheten tar emot koordinaterna från satelliten för varje sekund, med tid och datum.
GPS-modulen skickar data relaterade till spårningsposition i realtid och skickar så många data i NMEA-format (se skärmdumpen nedan). NMEA-formatet består av flera meningar, där vi bara behöver en mening. Denna mening börjar från $ GPGGA och innehåller koordinater, tid och annan användbar information. Denna GPGGA hänvisas till fixeringsdata för globalt positioneringssystem. Lär dig mer om att läsa GPS-data och dess strängar här.
Vi kan extrahera koordinat från $ GPGGA-sträng genom att räkna komma i strängen. Antag att du hittar $ GPGGA-sträng och lagrar den i en matris, då kan Latitude hittas efter två komma och longitud kan hittas efter fyra komma. Nu kan dessa latitud och longitud placeras i andra matriser.
Nedan är $ GPGGA-strängen, tillsammans med dess beskrivning:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0,9,510,4, M, 43,9, M,, * 47
$ GPGGA, HHMMSS.SSS, latitud, N, longitud, E, FQ, NOS, HDP, höjd, M, höjd, M,, kontrollsumdata
Identifierare |
Beskrivning |
$ GPGGA |
Data för fixering av globalt positioneringssystem |
HHMMSS.SSS |
Tid i timme minut sekunder och millisekunder format. |
Latitud |
Latitud (Koordinat) |
N |
Riktning N = Nord, S = Syd |
Longitud |
Longitud (koordinat) |
E |
Riktning E = öst, W = väst |
FQ |
Fixa kvalitetsdata |
NOS |
Antal satelliter som används |
HPD |
Horisontell utspädning av precision |
Höjd över havet |
Höjd från havsnivå |
M |
Meter |
Höjd |
Höjd |
Kontrollsumma |
Data för kontrollsumman |
Du kan kolla in våra andra GPS-projekt:
- Arduino-baserad fordonsspårare med GPS och GSM
- Arduino-baserat varningssystem för bilolyckor med GPS, GSM och accelerometer
- Hur man använder GPS med Arduino
- Spåra ett fordon på Google Maps med Arduino, ESP8266 & GPS
Förbereder Raspberry Pi för att kommunicera med GPS:
Okej så att hoppa in, så det här blir inte tråkigt, jag antar att du redan vet mycket om Raspberry Pi, tillräckligt för att få ditt operativsystem installerat, få IP-adressen, ansluta till terminalprogramvara som kitt och andra saker om PI. Om du har problem med att göra något av ovan nämnda, slå mig upp under kommentarsektionen så hjälper jag gärna.
Det första vi måste göra för att få igång det här projektet är att förbereda vår Raspberry Pi 3 för att kunna kommunicera med GPS-modulen via UART, tro mig, det är ganska knepigt och gjorde ett försök att få rätt men om du följer min guide noggrant kommer du att få det på en gång, detta är ganska den svåraste delen av projektet. Här har vi använt Neo 6m v2 GPS-modul.
För att dyka in, här är en liten förklaring av hur Raspberry Pi 3 UART fungerar.
Raspberry Pi har två inbyggda UARTs, en PL011 och en mini UART. De implementeras med olika hårdvarublock så att de har lite olika egenskaper. På hallon pi 3 är dock den trådlösa / bluetooth-modulen ansluten till PLO11 UART, medan mini UART används för linux-konsolutgången. Beroende på hur du ser det kommer jag att definiera PLO11 som den bästa av de två UART på grund av dess implementeringsnivå. Så för det här projektet kommer vi att inaktivera Bluetooth-modulen från PLO11 UART med hjälp av ett overlay tillgängligt i den uppdaterade aktuella versionen av Raspbian Jessie.
Steg 1: Uppdatera Raspberry Pi:
Det första jag gillar att göra innan jag startar varje projekt är att uppdatera hallon pi. Så kan vi göra det vanliga och köra kommandona nedan;
sudo apt-get uppdatering sudo apt-get upgrade
starta sedan om systemet med;
omstart av sudo
Steg 2: Ställa in UART i Raspberry Pi:
Det första vi ska göra under detta är att redigera filen /boot/config.txt . För att göra detta, kör kommandona nedan:
sudo nano /boot/config.txt
längst ner i filen config.txt, lägg till följande rader
dtparam = spi = på dtoverlay = pi3-inaktivera-bt core_freq = 250 enable_uart = 1 force_turbo = 1
ctrl + x för att avsluta och tryck på y och enter för att spara.
Se till att det inte finns några stavfel eller fel genom att dubbelkontrollera eftersom ett fel med detta kan hindra din pi från att starta.
Vilka är anledningarna till dessa kommandon, force_turbo gör det möjligt för UART att använda den maximala kärnfrekvensen som vi i detta fall ställer in till 250. Anledningen till detta är att säkerställa konsekvens och integritet för den seriella data som mottagits. Det är viktigt att notera vid denna tidpunkt att användning av force_turbo = 1 kommer att upphäva garantin för ditt hallon pi, men förutom det är det ganska säkert.
Den dtoverlay = PI3-disable-BT kopplar bluetooth från ttyAMA0 , detta för att låta oss tillgång att använda den fulla UART effekt som är tillgänglig via ttyAMAO i stället för mini UART ttyS0.
Andra steget under denna UART-installationssektion är att redigera boot / cmdline.txt
Jag kommer att föreslå att du gör en kopia av cmdline.txt och sparar först innan du redigerar så att du kan återgå till den senare om det behövs. Detta kan göras med hjälp av;
sudo cp boot / cmdline.txt boot / cmdline_backup.txt sudo nano /boot.cmdline.txt
Ersätt innehållet med;
dwc_otg.lpm_enable = 0 konsol = tty1 root = / dev / mmcblk0p2 rootfstype = ext4 hiss = deadline fsck.repair = ja rootwait tyst stänk plymouth.ignore-seriell-konsoler
Spara och avsluta.
När detta är gjort måste vi starta om systemet igen för att genomföra ändringar ( sudo-omstart ).
Steg 3: Inaktivera Raspberry Pi Serial Getty Service
Nästa steg är att inaktivera Pi-seriens getty-tjänst , kommandot kommer att förhindra att den startar igen vid omstart:
sudo systemctl stoppa [email protected] sudo systemctl inaktivera [email protected]
Följande kommandon kan användas för att aktivera det igen om det behövs
sudo systemctl aktivera [email protected] sudo systemctl starta [email protected]
Starta om systemet.
Steg 4: Aktivera ttyAMAO:
Vi har inaktiverat ttyS0, nästa sak är för oss att aktivera ttyAMAO .
sudo systemctl aktiverar [email protected]
Steg 5: Installera Minicom och pynmea2:
Vi kommer att vara minicom att ansluta till GPS-modulen och förstå informationen. Det är också ett av verktygen som vi kommer att använda för att testa är att vår GPS-modul fungerar bra. Ett alternativ till minicom är daemon-programvaran GPSD.
sudo apt-get install minicom
För att enkelt analysera de mottagna uppgifterna kommer vi att använda pynmea2-biblioteket . Den kan installeras med hjälp av;
sudo pip installera pynmea2
Biblioteksdokumentation finns här
Steg 6: Installera LCD-biblioteket:
För den här handledningen använder vi AdaFruit-biblioteket. Biblioteket gjordes för AdaFruit-skärmar men fungerar också för skärmkort med HD44780. Om din skärm är baserad på detta ska den fungera utan problem.
Jag känner att det är bättre att klona biblioteket och bara installera direkt. Att klona körning;
git-klon
ändra till den klonade katalogen och installera den
cd./Adafruit_Python_CharLCD sudo python setup.py installation
I det här skedet kommer jag att föreslå en ny omstart så att vi är redo att ansluta komponenterna.
Anslutningar för Raspberry Pi GPS-modulgränssnitt:
Anslut GPS-modulen och LCD-skärmen till Raspberry Pi som visas i kretsschemat nedan.
Testning före Python-skript:
Jag känner att det är viktigt att testa GPS-modulanslutningen innan du går vidare till python-skriptet. Vi kommer att använda minicom för detta. Kör kommandot:
sudo minicom -D / dev / ttyAMA0 -b9600
där 9600 representerar baudhastigheten med vilken GPS-modulen kommunicerar. Detta kan användas en gång när vi är säkra på datakommunikation mellan GPS och RPI, det är dags att skriva vårt python-skript.
Testet kan också göras med hjälp av katt
sudo cat / dev / ttyAMA0
I Window kan du se NMEA-meningar som vi har diskuterat tidigare.
Python-skript för denna Raspberry Pi GPS-handledning ges nedan i kodavsnittet.
Med allt sagt och gjort är det dags att testa hela systemet. Det är viktigt att du ser till att din GPS får en bra fix, genom att ta ut den, kräver de flesta GPS mellan tre och fyra satelliter för att få en fix, även om min fungerade inomhus.
Fungerar rätt? Ja…
Har du frågor eller kommentarer? Släpp dem i kommentarsektionen.
Demonstrationsvideo ges nedan, där vi har visat platsen i latitud och longitud på LCD med GPS och Raspberry Pi.