För att köra GPS på raspberry pi så behöver man en GPS modul, jag har flera sådana. Sedan behöver man ta reda på vilken sladd eller pin som är Tx respektive Rx (transmit/receive). Egentligen så behöver man nog bara Tx, men jag kör med tvåvägskommunikation. Jord och strömförsörjning är också nödvändigt och då gäller det att se upp eftersom Raspberry Pi har 3.3V logik på ingångarna. Jag löser detta genom att mata GPS modulen med 3.3V för att vara säker, men många moduler har intern spänningsregulator för att hantera just 3.3V logik.
På GPIO stiften ansluter jag Rx från GPS till Tx, och Tx från GPS till Rx. Här finns även lite lägligt såväl jord som 3.3V ut.
På Pi’en behövs det sedan lite GPS program. Jag kör gpsd och gpsd-clients.
sudo apt install gpsd gpsd-clients
Innan något fungerar så måste man redigera filen /boot/cmdline.txt och ta bort hänvisningar till serial0 eller ttyAMA0. I mitt fall fick jag radera ”console=serial0,115200”
Då jag kör Raspbian Jessie och en Raspberry Pi 3 så skall jag sedan stänga av den seriella tjänsten:
sudo systemctl stop serial-getty@ttyS0.service sudo systemctl disable serial-getty@ttyS0.service
Eftersom gpsd installerar en tjänst också så skall den stängas av på motsvarande sätt:
sudo systemctl stop gpsd.service sudo systemctl disable gpsd.service
På grund av en sidoeffekt av blåtandskretsarna så måste man även ”låsa” CPU frekvensen för att inte ha en ”svajjande” serieport.
redigera /boot/config.txt och lägg till raden:
enable_uart=1
Sedan skall det bara vara att starta om Raspberry Pi’n.
Man kan testa om det ramlar in något med kommandot ”screen” (vilket kan behöva installeras).
screen /dev/ttyS0 9600
För att starta gpsd som ny tjänst på en socket så skriver man in följande:
sudo killall gpsd sudo gpsd /dev/ttyS0 -F /var/run/gpsd.sock -n
Nu kan jag se GPS information i cgps eller gpsmon.
För att gpsd skall startas automatiskt när Pi’en startar så kan man göra på flera sätt, det sätt som fungerade för mig var att lägga till gpsd kommandot ovan i filen /etc/rc.local.
I denna fil kan man även lägga in anrop till andra skript som man vill skall köras när datorn startar.
Kompass
GPS modulen har även en kompass som skickar information via ett I2C gränssnitt. För att läsa detta behöver jag lägga till lite verktyg.
sudo apt install i2c-tools sudo apt install python-smbus
För att testa att det fungerar så hämtar jag ett skript som jag senare kan använda som grund i mina egna skript så småningom. GPS modulens sladdar från kompassen ansluts sedan till SDA och SCL
https://github.com/ControlEverythingCommunity/HMC5883/blob/master/Python/HMC5883.py
När skriptet körs så får man flera svar, bland annat en kompassriktning.
Det lutar mer och mer åt att jag skall försöka bygga allt på Python skript. Det innebär även att jag troligen måste titta lite närmare på Django för att få till en interaktion med användaren via ett webbgränssnitt. Detta är dock väldigt omfattande så jag kommer att börja med att söka efter andra alternativ. Kanske Flask?