10Hz Bluetooth GPS na NodeMCU32-S
Lista części:
- Adafruit Ultimate GPS
- NodeMCU-32S
- kabelki jump-wire F-F
- obudowa z drukarki 3D (na bazie Ultimate Box maker)
- NodeMCU-32S, albo inna płytka z UART i Bluetooth kompatybilna z Arduino
- kabelki jump-wire F-F
- opcjonalna obudowa z drukarki 3D (na bazie Ultimate Box maker)
Montaż
Moduł GPS podłączamy do NodeMCU32-S:
VIN <-> 3.3V
GND <-> GND
RX <-> GPIO17
TX <-> GPIO16
Następnie podłączamy NodeMCU32-S do komputera kablem USB. Dioda na GPS powinna zacząć rzadko mrugać.
Arduino IDE
Do programowania użyjemy platformy Arduino IDE 2 z https://www.arduino.cc/en/software
Po zainstalowaniu trzeba dodać obsługę płytek ESP32:
Otwórz File > Preferences > Settings (Ctrl+Comma) (i w pole Additional boards manager URLs wpisz adres: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Teraz można dodać obsługę ESP32:
Otwórz Tools > Board > Board Manager (Ctrl+Alt+B) i zainstaluj pakiet esp32:
Programowanie
Kod programu to zmodyfikowany projekt ESP32 Serial Bridge: https://github.com/vovcia-clug/ESP32-VGPS
Ściągamy repozytorium i otwieramy ESP32-VGPS.ino w Arduino IDE
Wybieramy model płytki (NodeMCU-32S) w Tools > Board > esp32.
Wybieramy port w Tools > Port, na Linux to będzie /dev/ttyUSB0, na Windows jeden z COM
Wciskając przycisk FLASH/BOOT na płytce, wgrywamy program przez Sketch > Upload (Ctrl+U). Przycisk FLASH/BOOT można zwolnić po tym jak przejdzie Connecting…. Po udanym wgraniu programu GPS powinien pojawić się jako urządzenie Bluetooth VGPS i być od razu gotowy do użycia. Można się z nim sparować i użyć w ulubionym programie, np. RaceChrono, OpenCPN, Serial Bluetooth Terminal itp.
Obudowa
Do zrobienia obudowy użyłem OpenSCAD, program ściągamy z: https://openscad.org/downloads.html.
Model bazuje na Ultimate Box maker z małym dodatkiem (honeycomb przy antenach w celu poprawy odbioru, znaleziony na gist).
Jeżeli chcecie edytować model to ściagnijcie plik OpenSCAD, jeżeli nie to wystarczą gotowe pliki STL. Płytkę do obudowy przymocowałem klejem silikonowym, jeżeli macie otwory montażowe, w OpenSCAD można włączyć generowanie nóżek.
Montaż jest na śrubki M4, jest też opcja montażu snap-in – należy zmienić opcje w OpenSCAD.
Szczegóły konfiguracji modułu GPS
Żeby przełączyć moduł GPS w tryb 10Hz, najpierw należy zmienić prędkość konsoli szeregowej z 9600 na 115200, ponieważ 9600 nie wystarczy do takiego odświeżania. Należy wysłać komendę PMTK:
- 251,115200
W pełnej formie, z sumą kontrolną, wygląda ona tak:
- $PMTK251,115200*1F
Suma kontrolna jest taka sama jak w protokole NMEA, czyli XOR wszystkich bajtów między $ a * zapisany w hex.
Generator online: https://nmeachecksum.eqth.net/
Następnie ustawiamy które sentencje NMEA http://aprs.gids.nl/nmea/ chcemy dostawać. Służy do tego komenda PMTK 314. Poszczególne liczby w komendzie PMTK oznaczają, co ile fixów ma być raportowana dana sentencja.
- 0 NMEA_SEN_GLL, // GPGLL interval – Geographic Position – Latitude longitude
- 1 NMEA_SEN_RMC, // GPRMC interval – Recommended Minimum Specific GNSS Sentence
- 2 NMEA_SEN_VTG, // GPVTG interval – Course over Ground and Ground Speed
- 3 NMEA_SEN_GGA, // GPGGA interval – GPS Fix Data
- 4 NMEA_SEN_GSA, // GPGSA interval – GNSS DOPS and Active Satellites
- 5 NMEA_SEN_GSV, // GPGSV interval – GNSS Satellites in View
- 6 //Reserved
- 7 //Reserved
- 13 //Reserved
- 14 //Reserved
- 15 //Reserved
- 16 //Reserved
- 17 //Reserved
- 18 NMEA_SEN_MCHN, // PMTKCHN interval – GPS channel status
Przykładowo, ustawiamy raportowanie pierwszych pięciu sentencji przy każdym fixie, a GPGSV co 5 fixów:
- $PMTK314,1,1,1,1,1,5,0,0,0,0,0,0,0,0,0,0,0,0,0*2C
Na koniec ustawiamy odświeżanie 10Hz:
- $PMTK220,100*2F
Pełna dokumentacja komend PMTK: https://cdn-shop.adafruit.com/datasheets/PMTK_A11.pdf
TODO
- usypianie GPS przy braku klientów
- sprawdzić reviewed Ultimate Box https://www.thingiverse.com/thing:2938921
Jeżeli macie pytania lub uwagi do projektu, zapraszam do kontaktu na discordzie @vovcia, albo mail vovcia (at) clug.space.