Connecting Legacy NMEA Instruments to a Raspberry Pi: A Complete Beginner's Guide
- Alex Montanari
- Jun 15
- 11 min read
Introduction: Your Old Chart Plotter Still Has a Lot to Say
If your boat is equipped with navigation instruments built more than 15 years ago — a GPS receiver, a depth sounder, a wind instrument — there is a good chance they are still perfectly functional. The data they produce is accurate, reliable, and valuable. The problem is getting that data into a modern system, such as a Raspberry Pi running OpenPlotter or a similar marine software stack.

This guide explains exactly how to do it, step by step, with no prior electronics experience required. By the end, you will understand the signal standard those old instruments use, what hardware you need to buy, how to wire a connector, and how to configure the software side. Total cost: under €15.
Section 1: Understanding the Signal Standards (NMEA, RS232, RS485)
Before touching any hardware, it helps to understand what is actually happening when your instruments communicate.
What is NMEA?
NMEA stands for National Marine Electronics Association. It is the organization that defined the data format used by marine instruments to share information — things like GPS position, boat speed, heading, and depth. The sentences look like this:
$GPGLL,5300.97914,N,00259.98174,W,125133.00,A,A*73
That single line contains latitude, longitude, time, and validity status — all packed into a standardized text string.
NMEA 0183 up to version 2.1: RS232
Older NMEA instruments (anything produced roughly before the mid-2000s) use a physical transmission standard called RS232 to carry those data sentences. RS232 is a single-ended standard, meaning:
There is one signal wire and one ground wire.
Only one talker (transmitter) can be connected to one listener (receiver) at a time.
Either end can be the talker or the listener — the connection is bidirectional.
RS232 was also the standard used by the serial ports on personal computers for decades, which is why compatible adapters are cheap and widely available today.
NMEA 0183 version 2.0 and later: RS485
More modern marine equipment uses RS485, a differential standard. RS485 uses a pair of wires, and the signal is encoded as the voltage difference between them. This makes it much more resistant to electrical interference (very important on a boat), and it allows one talker and multiple listeners simultaneously.
This guide covers only RS232 (legacy) instruments. If your equipment uses RS485, the wiring and adapter are different.
How to tell which one you have: If your instrument's manual mentions "NMEA 0183" and the unit is more than 15 years old, it almost certainly uses RS232. Look for a DB9 connector or bare wires labelled TX, RX, and GND.
Section 2: What You Need to Buy
The Raspberry Pi does not have a native RS232 port. To connect an RS232 instrument, you need two inexpensive components:
Component 1: A USB-to-RS232 Adapter
This is a small cable with a USB plug on one end and a DB9 male RS232 connector on the other. It contains a chip (typically a CH340, CP2102, or FT232) that converts between USB and RS232 signal levels.
What to search for: DB9 male RS232 to USB adapter
Critical rule: Reject any listing that mentions "TTL". TTL adapters operate at 3.3 V or 5 V logic levels — they are not RS232. RS232 uses voltages between ±3 V and ±15 V. Connecting a TTL adapter to an RS232 instrument can damage both devices.
The RS232 connector on the adapter must be male (pins sticking out), not female. This is the standard for legacy PC serial ports, and your instrument cable will have the corresponding female plug.
Budget: €4–€12 on eBay depending on delivery time.
Driver note: If the Raspberry Pi runs Raspberry Pi OS or any Debian-based distribution, the RS232 driver is already included. You do not need to install anything.
Component 2: A Female DB9 Connector (with hood shell)
Your NMEA instrument will have a cable with individual wires — TX (transmit), RX (receive), and GND (ground). You need to terminate those wires onto a female DB9 connector so they can plug into the male DB9 of the USB adapter.

What to search for: DB9 female socket connector with hood shell
Two variants exist:
Type | Description | Skill required |
Solder type | Individual pins that you solder wires onto | Basic soldering |
Solderless (screw terminal) type | Screw clamps for each wire | Screwdriver only |
If you have never soldered before, the solderless version is perfectly adequate and produces a reliable connection.
Budget: €1–€4 on eBay.
Total project budget: approximately €3 if you order from China (allow 4–6 weeks delivery) or €12 if you buy locally or from a fast-shipping EU seller.
Section 3: Understanding the DB9 Connector Pin Numbering

A DB9 connector has 9 pins arranged in two rows: 5 on the top row and 4 on the bottom row. The numbering is standardized and does not change between manufacturers.
Viewing the Male Connector (the USB adapter end)
When you look into the face of the male plug (the side with the pins):
[ 1 ][ 2 ][ 3 ][ 4 ][ 5 ]
[ 6 ][ 7 ][ 8 ][ 9 ]
Pins 1–5 run left to right along the top row. Pins 6–9 run left to right along the bottom row.
Viewing the Female Connector (the one you will wire)
When you look into the face of the female socket (the side with the holes):
[ 5 ][ 4 ][ 3 ][ 2 ][ 1 ]
[ 9 ][ 8 ][ 7 ][ 6 ]
The numbering is mirrored — because you are looking from the opposite direction. This is important: always refer to a pin numbering diagram specific to the view direction you are working with, and double-check before soldering.
Section 4: Wiring the Female DB9 Connector
Now comes the practical work. You will connect your NMEA instrument's wires to the correct pins on the female DB9 connector.
Tools Required (solder version)
Soldering iron and solder
Wire strippers
Small flat-head screwdriver (to tighten the shell screws)
A "third hand" clamp or helping-hand tool (highly recommended)
Pliers
Tools Required (solderless version)
Small flat-head screwdriver only

The Three Signal Connections
These are the wires from your NMEA instrument:
Signal | DB9 Pin | Description |
NMEA OUT (TX from instrument) | Pin 2 | Data flowing from instrument to the Raspberry Pi |
NMEA IN (RX to instrument) | Pin 3 | Data flowing from Raspberry Pi to instrument — only needed if two-way communication is required |
NMEA Ground (GND) | Pin 5 | Common ground reference — always required |
Important: Pin 3 is only necessary if you intend to send commands back to the instrument (for example, to configure a chart plotter). For simple data reading — GPS position, depth, wind — you only need pins 2 and 5.
The Control Pin Loopback Connections — Do Not Skip This Step
This is the step that most beginners miss, and it will prevent the connection from working entirely if omitted.
RS232 was originally designed for modems and included a set of "handshaking" or "flow control" signals. These tell each end whether the other is ready to communicate. The signals use the remaining pins on the DB9:
Pin | Signal name | Abbreviation |
1 | Data Carrier Detect | DCD |
4 | Data Terminal Ready | DTR |
6 | Data Set Ready | DSR |
7 | Request to Send | RTS |
8 | Clear to Send | CTS |
Your NMEA instrument does not use these signals — it just sends data continuously. But the Raspberry Pi's RS232 driver does check them before it will open the port. If the handshaking signals are not present, the driver concludes that nothing is connected and refuses to receive data.
The solution is to loop the control pins back to themselves, which tricks the driver into seeing all handshaking signals as active. Make the following connections directly on the female DB9 connector:
Loop 1: Connect pins 1, 4, and 6 together (one short piece of wire joining all three).
Loop 2: Connect pins 7 and 8 together (one short piece of wire joining both).
These loopbacks do not carry any data — they simply satisfy the handshaking requirements of the driver so that communication can proceed.
Summary of All Connections on the Female DB9
DB9 Pin | Connection |
1 | Loop to 4 and 6 |
2 | NMEA OUT wire from instrument (TX) |
3 | NMEA IN wire from instrument (RX) — if needed |
4 | Loop to 1 and 6 |
5 | NMEA GND wire from instrument |
6 | Loop to 1 and 4 |
7 | Loop to 8 |
8 | Loop to 7 |
9 | Not connected |
Finishing the Connector
Once all pins are wired (soldered or screwed in), slide the metal hood shell over the connector body and tighten the screws. If the cable or wire bundle is loose inside the collar of the shell, wrap several turns of adhesive tape around the wires at the point where they enter the shell. Painter's masking tape works well for this — build up enough layers to give the collar a firm grip on the cable. This strain relief will significantly extend the life of your connector.
Section 5: Configuring the Software
With the hardware complete, the configuration on the Raspberry Pi side is straightforward.

Step 1: Connect Everything and Power On
Start the NMEA instrument so it is transmitting data.
Plug the female DB9 connector into the male DB9 of the USB adapter.
Plug the USB adapter into a powered USB hub connected to the Raspberry Pi.
Using a powered USB hub is recommended. Raspberry Pi USB ports can struggle to provide enough current for multiple peripherals simultaneously.
Step 2: Identify the USB Serial Device
Open a terminal on the Raspberry Pi and run:
ls /dev/ttyUSB*
You should see a device such as /dev/ttyUSB0. If you plug and unplug the adapter while running dmesg | tail, you will also see the kernel recognizing the adapter and identifying its chip.
Step 3: Add the Connection in OpenPlotter (OP)
If you are using OpenPlotter, the configuration is done through the graphical interface:
In the USB tab:
Click "Add".
Select the new device from the list (it may appear with the chip name, for example "QuiHeng HL 340" for a CH340-based adapter).
Give it a descriptive name, for example: devTTY_nmea_gps.
In the NMEA 0183 tab:
Click "Add".
In the port list, select the device you just named (e.g., TTY_nmea_gps).
Give it a logical name, for example: gps_input.
Set the following parameters:
Type: Serial
Baud rate: 4800 (this is the standard for NMEA 0183; some instruments use 38400 — check your manual)
Direction: In
Filters: None
Click "OK".
Apply the settings: Click the "Apply" button in the lower right corner. This is mandatory — without it, the configuration is not saved to the running system.
Step 4: Verify the Connection
Select the connection you just created and open the Diagnostic window. You should see a live stream of NMEA sentences scrolling past — GPS coordinates, depth readings, or whatever your instrument produces.
If the diagnostic window is empty, check:
That the instrument is powered on and outputting data.
That the baud rate matches the instrument's specification.
That pin 2 and pin 5 are correctly wired (swap them if nothing else works — some instrument cables are wired inversely).
That the loopback connections on pins 1/4/6 and 7/8 are present.
Section 6: Configuring Signal K (Standalone or with OpenPlotter)
What is Signal K and How Does It Relate to OpenPlotter?
Signal K is an open-source data server for marine instruments. It acts as a central hub: it reads NMEA sentences from one or more sources, converts them into a unified JSON data model, and makes that data available over a local network to any connected device — a phone, a tablet, a laptop running a chart plotter, or a custom dashboard.
OpenPlotter is a complete marine software environment built on top of Raspberry Pi OS. Internally, it uses Signal K as its data backbone. When you configure a serial connection in the OpenPlotter NMEA 0183 tab, you are in fact configuring the Signal K server that runs underneath it.
This means:
Your setup | Use this approach |
OpenPlotter installed | Use the OpenPlotter graphical interface (Section 5) — it configures Signal K for you automatically |
Raspberry Pi OS without OpenPlotter, Signal K installed manually | Follow the Signal K instructions below |
Both installed | You can use either interface; they point to the same server |
Installing Signal K on a Bare Raspberry Pi
If you are running plain Raspberry Pi OS (or any Debian-based system) without OpenPlotter, you can install the Signal K server directly.
Prerequisites: Node.js must be installed. Signal K requires Node.js version 12 or later.
# Update your package list
sudo apt update
# Install Node.js (if not already present)
sudo apt install nodejs npm
# Check the version — must be 12 or higher
node --version
# Install Signal K server globally
sudo npm install -g @signalk/server
Once installed, start the server for the first time to generate its configuration directory:
signalk-server --sample-nmea0183-data
This starts Signal K with sample data so you can verify the web interface works before connecting your real instrument. Open a browser on the same network and navigate to:
http://<raspberry-pi-ip-address>:3000
You should see the Signal K dashboard. Stop the server with Ctrl+C when done.
Configuring Signal K to Read Your NMEA Instrument
Signal K is configured through its web-based administration interface. With the USB adapter
plugged in and the instrument running:
Step 1 — Start the Signal K server in normal mode:
signalk-server
Or, if you want it to run as a background service (recommended for permanent installations):
sudo systemctl enable signalk
sudo systemctl start signalk
Step 2 — Open the admin interface:
Navigate to http://<raspberry-pi-ip-address>:3000/admin in a browser. Log in with the admin credentials you created during first setup (default username: admin).
Step 3 — Add a data connection:
In the left menu, go to Server → Connections.
Click Add Connection.
Fill in the fields as follows:
Field | Value |
ID | Any unique name, e.g. nmea-gps |
Data Type | NMEA 0183 |
Input Type | Serial |
Serial Port | /dev/ttyUSB0 (or whichever device appeared in Step 2 of Section 5) |
Baud Rate | 4800 (or 38400 — check your instrument manual) |
Data Timeout | 5 (seconds) |
Click Apply.
Signal K will immediately attempt to open the serial port and begin reading. If data is flowing, you will see activity in the connection status indicator.
Step 4 — Verify data is arriving:
Go to Data Browser in the left menu. You will see a live tree of all data keys Signal K has received. A GPS receiver will populate keys under navigation.position, navigation.speedOverGround, navigation.courseOverGroundTrue, and others. A depth sounder will populate environment.depth.belowTransducer.
If the Data Browser is empty, return to the troubleshooting checklist at the end of Section 5.
Making Signal K Data Available on Your Network
One of the main advantages of Signal K over a direct serial connection is that it makes your instrument data available to every device on your boat's Wi-Fi network simultaneously.
To enable network access, go to Server → Interfaces in the admin panel and verify that the following are enabled:
Signal K over WebSocket — used by modern web-based chart plotters and dashboards.
Signal K over TCP — used by some dedicated apps.
NMEA 0183 over TCP (port 10110) — re-broadcasts raw NMEA sentences over the network, which allows legacy software that does not understand Signal K to still receive the data.
With NMEA 0183 over TCP enabled, any chart plotter app on a tablet (such as iNavX, iSailor, or Navionics) can connect to <raspberry-pi-ip>:10110 and receive the same GPS and instrument data that your physical instrument is producing.
Running Signal K as a Persistent Service
For a permanent installation where the Raspberry Pi boots automatically and starts serving data without any manual intervention, enable the systemd service:
# Enable Signal K to start at boot
sudo systemctl enable signalk.service
# Start it now without rebooting
sudo systemctl start signalk.service
# Check its status
sudo systemctl status signalk.service
You should see Active: active (running). The server will now start automatically every time the Raspberry Pi powers on.
Signal K Plugins Worth Installing
Signal K's functionality can be extended with plugins installed directly from the admin interface under Appstore. For a basic instrument setup, these are particularly useful:
Plugin | Purpose |
@signalk/signalk-to-nmea0183 | Converts Signal K data back to NMEA 0183 for re-broadcasting |
signalk-derived-data | Calculates derived values such as true wind from apparent wind and boat speed |
signalk-anchoralarm | Anchor drag alarm using GPS position |
signalk-vessel-information | Stores static vessel data (MMSI, name, dimensions) |
Install any plugin by clicking Install next to its name. The server restarts automatically after installation.

Connecting a legacy RS232 NMEA instrument to a Raspberry Pi requires three things: the right USB adapter (RS232, not TTL), a correctly wired female DB9 connector, and a small but essential set of loopback connections on the control pins. Once those are in place, the software configuration — whether through OpenPlotter's graphical interface or directly in Signal K — takes only a few minutes.
The total cost is minimal, the driver is pre-installed in Debian, and the result is a fully integrated instrument feed. With Signal K running as a persistent service, your Raspberry Pi becomes a networked data hub: every device on your boat's Wi-Fi — phones, tablets, laptops — can access live GPS, depth, and wind data simultaneously, from instruments that might otherwise have been considered too old to integrate.
Need help with your boat's electrical system? E-Boats Systems designs and installs custom marine electrical solutions. Contact us to discuss your project.






Comments