NMEA 2000 Shield


Want to read NEMA2000 stream from a Garmin Depth founder with a Arduino Due.

Just this device on NEMA network.

Did someone have code reference ?



I'm about to buy a "triducer", the Airmar DST800. It's going to send depth/temp/speed via NMEA2000. As a java programmer with zero experience with Arduinos (but lot of time to spend on it), do you think I have a chance, using existing resources, to decode these informations and display it on a e-ink display shield ? I don't absolutely need a ready-to-use solution, and a simple "yes you can" would be much appreciated to preserve my motivation ^^ Of course, I'll be back later with more accurate questions ;)

Yes you can.
Only challenge is parsing the NMEA data stream to pick out the pertinent info.
And then sorting out the e-ink interface. Probably just another serial data stream?

Thank you CrossRoads, I have an idea about the parsing challenge, and I guess I can use some existing code that parse GPS datas and adapt it. The e-ink display does not scares me that much, because if I don't succeed, I still have other display options. I'll put my code somewhere on this forum if I reach my goal =) See you !

Hi All,

I have been trying to find NMEA2000 shield without success, so I wrote my own. It can act as listener only and forward data to PC in Actisense or clear text format. Or it can act as Termperature sensor node with automatic address claiming. Or as I am making it as a NMEA0183 combiner/ NMEA200 converter and sensor node.

Library works with Mega board with MCP2551 chip or with Due board with its internal CAN controller.

Anybody interested?

Great timing, I just signed up to this forum and started looking for a library today !

Please count me in.

I am building a LiFePo4 alternator regulator and an active charge/monitor BMS and would love to have a full NMEA2k interface to connect my Maretron/Raymarine network.




Here is the sketch I have written to display the battery voltage on my boat.
It sends the PGN 127508 thru the NMEA 2000 network.
The voltage (Only one battery, Battery number 1= instance 0) can be read on:

  • Raymarine A78 MFD
  • B&G Triton

The Arduino+Shield (Seeedunio) pack is directly powered by the 12v supply

The voltage is read by the A0 pin through a voltage divider made with 2 resistors

It works well and seems to be reliable, but sometime the INT red led turns on solid. However it keeps on running, the network does’nt hang up.


Voltmetre_N2K_V2S.ino (7.29 KB)

Voltmetre NMEA2000 Arduino sur A78 s .jpg

Voltmetre NMEA2000 Arduino sur Triton T41 s.jpg


You can find NMEA2000 library and samples on https://github.com/ttlappalainen. The best would be to use Arduino Due, since it needs only MCP2562 tranceiver for connecting to the bus. It also has 8 byte double for better calculations.

My own setup is running and it has also 3 NMEA0183 inputs for combiner and tranfer data to N2kBus. So with Arduino Due and 4 extra chips this replaces 4 devices: NMEA0183 combiner (e.g. Brookhouse), NME0183->N2k (Actisense), N2k->PC (Actisense), MOB device.


Good job Timo.

I have not understood everything but it is very interesting.

Amicalement. François


Can you provide any pictures or other details of your hardware setup? How you hooked everything together. VERY interested!


timolappalainen: Hi All,

I have been trying to find NMEA2000 shield without success, so I wrote my own. It can act as listener only and forward data to PC in Actisense or clear text format. Or it can act as Termperature sensor node with automatic address claiming. Or as I am making it as a NMEA0183 combiner/ NMEA200 converter and sensor node.

Library works with Mega board with MCP2551 chip or with Due board with its internal CAN controller.

Anybody interested?


Hello. Wanted to let you know I have just posted up a very rough cut of a NMEA-2000 / Alternator regulator bridge based on your lib. I made some extensions to include some additional PGNs - and once proofed out a bit will submit a pull back to your get-hub lib.

This bridge is intended to run on a Due, and takes the ASCII status strings from my Arduino based Alternator Regulator and send them out to the NMEA-2000 bus. At this point is is rather unproven as I lack some additional hardware (specifically, the NEMA-2000 display side), am not settled on which PGNs should be broadcasted, and I am not totally sure I have extended your libs correctly :o

Source, extended libs (draft form), as well as a bit more details here: http://arduinoalternatorregulator.blogspot.com/2015/09/very-rough-nmea-2000-bridge-source.html

Looking forward to perhaps getting this a bit more settled.

Hi PogCarr and thomasow,

I'll try to upgrade GitHub with pictures and extension as soon as possible. I have been a bit busy with othe project.


Hi all,

Now there is upgraded version of NMEA2000 library and some drawings under Documents in https://github.com/ttlappalainen/NMEA2000

I have to laugh when I see some of your posts describing yourselves as ‘beginners’. To me a lot of this is like a foreign language and you are experts compared to me!

Perhaps someone can help me if I describe where I am at and where I am trying to go

I have managed to set up an Arduino to create NMEA0183 sentences from analogue data, combine with NMEA0183 sentences from other instruments and transmit in NMEA0183 format.

I need to now translate that to NMEA2000 to feed a different network

From this thread I have managed to understand that I will need to buy or make a Canbus shield, to attach to the Arduino. Also that I will need to download and include various Libraries.

What i do not understand, nor can I find any obvious reference, is what I then have to do to convert the data obtained via N0183 to N2000?

Where is this step? Is it proprietary? Is everyone having to do their own reverse engineering, or is this staring me in the face somewhere that I have missed?

Unfortunately my knowledge of electronics is zero. I can connect one terminal to another, I can solder, I can construct but I have no understanding at all of what is happening inside the device! I struggle with simple concepts like transmission speed, capacitors, diodes, transistors etc.

I’ just want an idiots guide to try and get this working. It sounds like many of you have managed but I cannot make the jump from the sample sketches to the real thing.

For example if I have a simple wind sentence from NMEA0183


How do I get that data or part of that data, broadcast to N2000?

Thanks if anyone can help


Well I am beginner with Arduino, but did my first digital telecope control system on 1980 with 2 A4 sized boards full of logic chips.

I prefer you buy a Arduino Due and MCP2562 chip for NMEA2000 tranceiver. Due is better for your task, since it has more power.

If you like to convert data from NMEA0183 to NMEA2000 you also need e.g. MAX3483 for NMEA0183 bus tranceiver. On Arduino Due you can have max. 3 MAX3483 and so 3 channels for NMEA0183.

I can then send you ready drawing for converter. If you get data to Arduino as in analog format, then you do not need MAX3483 tranceivers.

So now actually there are almost everything ready. I have to update NMEA2000 library, which now also have functions fo sending wind data. I have not done that yet, since other guy has developed wind data handling and I have not yet proved it ok.

On my library there is sample TemperatureMonitor, which does your task but with temperature. Post your contact to me, so I can guide you how to continue.

thanks for that, its a good start; I am contactable at gc9876 (at) hotmail dot com

I should explain that I need some data in NMEA0183 format also (to feed to chart plotter) so it needs to be done in two steps, even if actually it would be possible to go straight from analogue to N2000.

My set up will require the combining (multiplexing) of N183 GPS, Wind and Depth sentences which is then both transmitted to N183 chart plotter and also converted to N2000 for autopilot.

Thanks again GC

You setup is rather same I have. So I'll contact directly to you.

I used to work for Simrad/Navico and worked on some of the earliest versions of NMEA2000, I even had a bit of a hand in some of the original PGNs !! Simrad/Navico adopted CAN@250kbps on thier Corus instrument system well before NMEA2k was published. We mainly used Philips devices (one of the earliest companies to embed CAN into their microcontrollers), then moved to Renesas devices.

Its come a long way

A tiny bit off-topic, but this is a very interesting venture : https://www.kickstarter.com/projects/1689846268/ikommunicate-gateway-enabling-the-internet-of-thin


I also know signal-K, but there is no MFD with support for that - at least I have not heard any. And with MFD I mean waterproof and sunlight readable display, which can be installed on steering pole. So the point for NMEA library is the way to provide tools to add e.g. temperature or tank sensors to existing bus. It also provides way to read data to PC.

Check also NMEA-Simulator (http://www.kave.fi/Apps/), which next version (coming withing few days) also offers way to simulate devices on N2k bus.

hi, Timolappalainen. it is a great project ! I am trying to make my own wind sensor . the hardware is working fine. It send nmea 0183 mwv message to com port. now I am trying to connect it to pc-to n2k converter. I use arduino due with internal can and max 232cpe. I have sucsess to read depth data from n2k . and I see some data in actisense listener but cannot read it . I also see pcton2k in list of devises on my lowrance and garmin , but when I try to send some data from comport or nmea 0183 out of garmin Isee nothing ! I tyied different baud rate of ports , connected to native and programming ports of arduino ,used max 232cpe and arduino serial port but fail ! I see led blinking when data comes from n2k and from nmea simulator but nohing in n2k . what is wrong in my setup ? is it possible to read actissence format ? thanks !