NMEA-0183 Is an electrical standard to connect GPS, SONAR, sensors, auto pilot units, etc. in ships and boats. In difference to the newer NMEA 2000 standard (based on CAN) the NMEA 0183 is based on EIA RS422 (some older and/or simple systems use RS-232, or a single wire).
I want to show you how to connect a Raspberry Pi 3B to any NMEA-0183 device with differential output. Although the standard calls for isolated inputs and outputs its useful to use our RS422 / RS485 HAT with isolated interface.
Connection to NMEA 0183In the picture below you can see a typical device with differential output. The terminals are NMEA OUT+ and NMEA OUT- or TX+ or TX-. The NMEA IN+ and NMEA IN- wires are optional.
If you have a single transmit wire from your device (most likely labeled TX or NMEA OUT or something like that), then your device uses the RS-232 protocol. In this case you will need a simple RS232 converter.
DIP Switch SettingsThe easiest way is to use the raspi-config tool to switch the UART to the GPIO14/15 pins.
- take a fresh Raspbian image
- sudo raspi-config
- goto '5 Interfacing Options'
- goto 'P6 Serial'
- 'Would you like a login shell to be accessible over serial?' --> NO
- 'Would you like the serial port hardware to be enabled?' --> YES
- Finish raspi-config
- reboot the Raspberry Pi
Now you can access the UART via /dev/serial0
FirmwareYou can find a lot of different NMEA-0183 software Python stacks for Raspberry Pi A very simple solution is the NMEA library by Nick Sweeting:
https://github.com/nsweeting/NMEA0183
please note: pyserial is required for serial connections:
https://github.com/pyserial/pyserial
Test Runthe program will decode incoming NMEA protocols. You can open the serial monitor to see the decoded protocols.
If you have no NMEA device at home, you can also use a Simulator on your PC and a simple USB to RS485 adaptor instead of a real device.
Comments
Please log in or sign up to comment.