When working with marine electronics, one of the recurring problems is not necessarily obtaining data. The real challenge is bringing data from different systems together.
A modern boat may contain NMEA 2000 devices, older NMEA 0183 instruments, GPS receivers, AIS equipment, environmental sensors, engine monitoring systems, and navigation software. Each may provide useful information, but not necessarily in a form that can easily be shared with everything else.
This is where OpenPlotter becomes interesting.
OpenPlotter is an open-source marine computing environment built around Linux. Although it is particularly well suited to the Raspberry Pi, its architecture is based on standard Linux technologies rather than a proprietary marine operating system.
Combined with a Raspberry Pi and a PiCAN-M, OpenPlotter can turn a small Linux computer into a central marine data hub capable of communicating with both NMEA 2000 and NMEA 0183 equipment.
More importantly, it provides an excellent example of how Linux can be used to bridge traditional embedded communication technologies such as CAN Bus with modern IP-based applications.
What Is OpenPlotter?
It is tempting to describe OpenPlotter simply as navigation software, but that does not really explain what it does.
OpenPlotter is better understood as an integration platform for marine electronics.
It brings together a collection of open-source applications and Linux services that can acquire, translate, distribute, display, and store information coming from a boat’s electronic systems.
Among other things, OpenPlotter supports:
NMEA 0183
NMEA 2000
Signal K
GPS
AIS
OpenCPN
I2C sensors
environmental monitoring
dashboards
alarms and notifications
network distribution through Ethernet and Wi-Fi
automation and remote monitoring
The important point is that OpenPlotter does not replace all of these technologies with another proprietary protocol. Instead, it provides the infrastructure that allows them to work together.
At the center of that infrastructure is Signal K.
Signal K as the Common Data Layer
NMEA 0183 and NMEA 2000 were designed primarily for communication between marine electronic devices.
Signal K approaches the problem differently.
It provides an open data model designed to make marine information accessible to modern computers, web applications, tablets, phones, dashboards, databases, and network services.
OpenPlotter’s Signal K server therefore acts as a central data processing and distribution point.
Conceptually, the system looks like this:
Marine Devices → NMEA 0183 / NMEA 2000 → Signal K → Applications
Once information has entered Signal K, applications no longer need to know whether a particular value originally arrived through CAN Bus, a serial connection, TCP/IP, or another sensor interface.
For example, position information may originate from an NMEA 2000 GPS receiver while environmental information comes from an I2C sensor connected directly to the Raspberry Pi. Signal K can present both through a common data model.
The Signal K server can then make this information available through standard technologies including HTTP, WebSockets, and TCP/IP.
That separation between the physical network and the application layer is one of the most useful aspects of the OpenPlotter architecture.
Where PiCAN-M Fits Into the System
A Raspberry Pi does not include a native NMEA 2000 or NMEA 0183 interface.
The PiCAN-M provides those physical interfaces.
The board combines two particularly useful marine interfaces:
NMEA 2000
The NMEA 2000 interface is based on CAN Bus. Under Linux, the PiCAN-M CAN controller uses the standard SocketCAN subsystem and appears to applications as a Linux CAN network interface, typically:
can0
This is an important detail.
From the Linux operating system’s perspective, CAN is treated much like another network interface. Applications do not need proprietary CAN drivers or a manufacturer-specific API. They can communicate through the standard Linux SocketCAN infrastructure.
NMEA 0183
The PiCAN-M also provides an RS-422 interface for NMEA 0183 communication.
This appears under Linux as a serial interface and can be assigned to OpenPlotter’s serial management system.
Consequently, a single Raspberry Pi/PiCAN-M combination can communicate with both generations of commonly encountered marine electronics.
The Linux Architecture
Looking at the system from an embedded developer’s perspective makes the architecture particularly clear.
The basic NMEA 2000 data path is:
NMEA 2000 Network
↓
PiCAN-M CAN Interface
↓
Linux SocketCAN
↓
can0
↓
OpenPlotter CAN Bus
↓
Signal K Server
↓
OpenCPN / Dashboards / Logging / Network Applications
This architecture is worth emphasizing because OpenPlotter itself does not need to implement a proprietary PiCAN-M communication protocol.
Linux already knows how to communicate with the CAN controller.
OpenPlotter builds on that Linux infrastructure.
This is precisely the kind of layered architecture I prefer in embedded systems: let the hardware handle the electrical interface, let the operating system provide the standardized driver layer, and let applications concentrate on interpreting and using the data.
Configuring PiCAN-M Under OpenPlotter
Current OpenPlotter versions include a dedicated CAN Bus application.
PiCAN-M uses an MCP2515 CAN controller, which OpenPlotter can configure directly.
After physically installing the PiCAN-M on the Raspberry Pi, the MCP2515 interface can be added from the OpenPlotter CAN Bus application.
The configuration requires the parameters associated with the HAT, including the SPI interface, oscillator frequency, and interrupt GPIO.
For the PiCAN-M, these values should always be taken from the documentation for the specific board revision rather than copied blindly from an unrelated MCP2515 board.
After the configuration has been applied and the Raspberry Pi rebooted, Linux creates the CAN network interface.
The result can be verified from a terminal with:
ip link
The CAN interface should appear as can0.
For developers familiar with Linux CAN development, the usual can-utils tools can also be used.
For example:
candump can0
provides a simple way of confirming that CAN frames are actually arriving from the NMEA 2000 network.
This is also a useful troubleshooting technique because it separates two potential problems.
If candump can0 shows CAN traffic, then the PiCAN-M, Linux driver, and CAN network are functioning. If data still does not appear in Signal K, the problem is farther up the software stack.
That is considerably easier to diagnose than treating the entire system as one black box.
From SocketCAN to Signal K
Receiving CAN frames is only the first step.
Raw CAN frames are not particularly useful to navigation applications. NMEA 2000 organizes information into Parameter Group Numbers, or PGNs, containing information such as position, heading, engine parameters, wind data, depth, battery status, and many other vessel parameters.
OpenPlotter connects the CAN interface to the Signal K server, where the incoming NMEA 2000 information can be interpreted and converted into Signal K data.
In OpenPlotter 4, this connection can be created directly from the CAN Bus application using Add Connection.
Once connected, Signal K becomes the central point from which the information can be distributed to other applications.
For example, OpenCPN can receive navigation information from Signal K without needing direct access to the PiCAN-M hardware.
The same data can simultaneously be available to dashboards, logging applications, browser-based instruments, or other computers connected to the vessel’s network.
NMEA 0183 Works Differently
The NMEA 0183 side of PiCAN-M follows a similar concept but uses the Linux serial subsystem rather than SocketCAN.
The PiCAN-M RS-422 interface appears as a serial device.
OpenPlotter’s Serial application can identify the interface, assign it an alias, identify its data as NMEA 0183, and create a connection to the Signal K server.
The appropriate baud rate depends on the attached NMEA 0183 device. Traditional NMEA 0183 equipment commonly operates at 4800 baud, while higher-speed devices such as AIS equipment frequently use 38400 baud.
Signal K can do considerably more than simply receive these sentences.
It can act as an NMEA 0183 multiplexer, combining data from multiple sources, filtering sentences, redistributing them, and converting the information into Signal K format.
This means that an older NMEA 0183 instrument does not necessarily remain isolated from a newer NMEA 2000 or IP-based system.
OpenPlotter can become the bridge between them.
A Practical Example
Consider a boat equipped with:
an NMEA 2000 engine
an NMEA 2000 depth sounder
an older NMEA 0183 GPS
an AIS receiver
a Raspberry Pi running OpenPlotter
a PiCAN-M
a tablet connected through Wi-Fi
The engine and depth information enter the Raspberry Pi through the PiCAN-M CAN interface.
The GPS information enters through NMEA 0183.
AIS may arrive through another serial or USB interface.
Signal K receives and normalizes these different sources.
OpenCPN can then use the navigation information, while a dashboard displays engine parameters and depth. At the same time, a tablet connected to the Raspberry Pi’s network can access selected information through a browser.
The applications do not necessarily need to know how each value entered the system.
That is the real advantage of the architecture.
OpenPlotter Is More Than a Chart Plotter
The inclusion of OpenCPN sometimes creates the impression that OpenPlotter is simply a Raspberry Pi chart plotter.
That understates its capabilities.
OpenCPN is one application within the system.
OpenPlotter itself is the infrastructure around it.
It manages interfaces, communication paths, sensors, Signal K, networking, dashboards, notifications, and other services.
A Raspberry Pi running OpenPlotter can therefore operate without being used primarily as a navigation display at all.
It could instead serve as a headless marine data server installed somewhere aboard the vessel, collecting NMEA 2000 and NMEA 0183 information and distributing it over Ethernet or Wi-Fi.
That makes the Raspberry Pi/PiCAN-M combination interesting not only for recreational navigation but also for marine monitoring, data acquisition, development, experimentation, and diagnostics.
Sending Data Back to NMEA 2000
The architecture is not necessarily limited to listening to the network.
OpenPlotter and Signal K can also convert selected Signal K data into NMEA 2000 PGNs and transmit those messages through a compatible CAN interface.
With an MCP2515-based interface such as PiCAN-M, transmission occurs through the same SocketCAN interface used to receive data.
This opens interesting possibilities.
A sensor attached directly to the Raspberry Pi, for example, could generate data that is converted to Signal K and subsequently transmitted onto the NMEA 2000 network.
Of course, transmitting information onto an operational marine network requires considerably more care than passive monitoring. The correct PGNs, source addressing, update rates, units, and network behavior must all be considered.
For experimentation, I would therefore recommend beginning with passive monitoring before allowing a Raspberry Pi application to transmit onto an existing vessel network.
Why Linux Makes This Particularly Interesting
From my perspective, one of the strongest aspects of this system is not specifically OpenPlotter or even Signal K.
It is the use of standard Linux interfaces underneath them.
SocketCAN is a mature part of Linux. Serial communication is equally well established. TCP/IP, WebSockets, HTTP, databases, scripting languages, and development tools are already available.
OpenPlotter takes advantage of this existing ecosystem rather than attempting to reinvent it.
The result is a system where you can operate at whatever level your project requires.
A boat owner may never open a terminal window and simply use the OpenPlotter graphical tools.
A developer can open a terminal and run:
candump can0
A programmer can create an application that reads SocketCAN directly.
Another application can ignore CAN entirely and obtain normalized vessel information from Signal K through a WebSocket or REST interface.
All of these approaches can coexist on the same Raspberry Pi.
PiCAN-M as the Hardware Bridge
This also explains why I consider the PiCAN-M particularly useful for OpenPlotter installations.
It is not trying to become another computer between the Raspberry Pi and the marine network.
It provides the interfaces Linux needs:
NMEA 2000 → CAN → SocketCAN
and
NMEA 0183 → RS-422 → Linux Serial
From there, standard Linux and OpenPlotter software take over.
The PiCAN-M version with an onboard SMPS can additionally simplify installations where the Raspberry Pi is powered from the vessel’s electrical system. Power requirements need to be considered carefully, however, particularly when using a Raspberry Pi 5, whose power requirements exceed what some earlier PiCAN-M SMPS implementations were designed to provide.
The Bigger Picture
OpenPlotter demonstrates something that goes beyond marine electronics.
Embedded networks do not have to remain isolated systems.
CAN Bus is excellent at reliable, deterministic communication between embedded devices. NMEA 2000 builds a standardized marine protocol on top of CAN. Linux provides a powerful computing and networking environment. Signal K converts vessel information into an open data model suitable for modern applications.
Each technology performs the job for which it is well suited.
The PiCAN-M simply provides the bridge between the physical marine networks and Linux.
Put together, the architecture becomes:
Sensors and Marine Electronics
↓
NMEA 0183 / NMEA 2000
↓
PiCAN-M
↓
Linux Serial / SocketCAN
↓
OpenPlotter
↓
Signal K
↓
OpenCPN, Dashboards, Logging, Wi-Fi, Ethernet and Custom Applications
That is what makes OpenPlotter interesting to me from an embedded systems perspective.
It is not merely another marine application.
It is an example of how established embedded networking technologies such as CAN Bus can be integrated with Linux and modern network applications without abandoning the technologies that already work extremely well at the device level.




