top of page
background
Search

Connecting Legacy NMEA Instruments to a Raspberry Pi: A Complete Beginner's Guide

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

  1. Start the NMEA instrument so it is transmitting data.

  2. Plug the female DB9 connector into the male DB9 of the USB adapter.

  3. 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:

  1. Click "Add".

  2. Select the new device from the list (it may appear with the chip name, for example "QuiHeng HL 340" for a CH340-based adapter).

  3. Give it a descriptive name, for example: devTTY_nmea_gps.

In the NMEA 0183 tab:

  1. Click "Add".

  2. In the port list, select the device you just named (e.g., TTY_nmea_gps).

  3. Give it a logical name, for example: gps_input.

  4. 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

  5. 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:

  1. In the left menu, go to Server → Connections.

  2. Click Add Connection.

  3. 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)

  1. 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


bottom of page