Go Down

Topic: NMEA 2000 Shield (Read 81549 times) previous topic - next topic


NMEA 2000 is a closed CAN-BUS standard for marine electronics. It would be awesome to have a shield that can accept the standard NMEA 2000 or that has a screw down terminal to accept bare wires.

NMEA 2000 supplies both power and data in it's cable. Not sure if it's adequate to power the ardunio.

If someone out there can handle the hardware and board side of things, I could help do the research.




Building a CAN shield for the Arduino is quite simple. You just need a SPI-based CAN controller (ex: MCP2515) and a CAN interface (ex: MCP2551). The N2K bus typically provides 12VDC so you will need a regulator in order to power the arduino and the shield, and some kind of optical isolation between CAN interface and CAN controller if you want to stay clean. This is just for the physical side of the engine. Then you'll need to implement all the N2K protocol into the Arduino, but remember the following:

1. NMEA 2000 is a proprietary protocol. You'll surely need to purchase the specification from the NMEA association (several $1000's if I remember well).
2. If you want to certify the product, you'll need to pay for a N2K ID to the NMEA association and later you'll need to pay for the certification process.

I've worked with NMEA 2000 in the past so feel free to drop more questions if you need.



Thanks for the tips!

I hear you on the NMEA 2000 proprietary thing, but many are reverse engineering it... so I'm guessing it's not too difficult.



Depending on the amount of N2K nodes available on the bus and their outgoing traffic load (some N2K devices are programmed to drop CAN messages every 100 ms), you could find that your Arduino-based node is not capable to accept all the traffic load without loosing packets so If you're thinking in using the Arduino as a kind of PC gateway this could be an issue. For end-device applications the AVR should be fine.



Did you ever get anywhere with NMEA 2k -> Arduino? I'm considering the CAN shield to start playing with it.. don't want to recreate the wheel if you've made progress.



I've not heard anything more about anyone working on this...


I just saw several NMEA2000 installations yesterday at the Genoa, Italy Boat Show. Immense. Many 100 foot yachts.  All NMEA2000 setups were on carpeted booths and high-end graphics.

The only DIY that crowd seemed to do was mixing drinks  :smiley-mr-green:

If anyone gets into NMEA-Anything start a thread on the forum... I've done a little.
Regards, Terry King terry@yourduino.com  - Check great prices, devices and Arduino-related boards at http://YourDuino.com
HOW-TO: http://ArduinoInfo.Info


Hi all,

I want to send data over NMEA 2000 bus using Arduino UNO + Sparkfun Can-Bus (http://www.sparkfun.com/products/10039).

I have some questions on NMEA 2000:

1) Is correct to use that Can-Bus board to send data??? The structure of can bus message is the same of NMEA2000 message???
2) Is there any library that I can use???

Any suggestion on NMEA 2000 would be appreciated.

Thanks a lot!



1) Is correct to use that Can-Bus board to send data??? The structure of can bus message is the same of NMEA2000 message???

Yes, you should be able to connect an Arduino to a CAN bus through this board. However, bear in mind the actual traffic load in the bus and the limited computing power of an Arduino. If you just want to develop a "sender" application it's should be OK.


2) Is there any library that I can use???

No free or open source library if I remember well. Working with NMEA2000 typically requires you to buy their specs.

Hope this helps,



Thanks a lot Daniel.

I just want to develop a Sender application on Arduino.

I have another question:
is the structure of CanBus messages (2.0b) the same of Nmea2000 messages???



Yes, NMEA2000 sits on top of CAN (extended address schema).


Thanks a lot Daniel.

Is the message format for NMEA2000 this http://www.can-cia.org/index.php?id=496 ???
But it is bit different from CAN (2.0B) message format http://it.wikipedia.org/wiki/Controller_Area_Network#Formato_dell.27Extended_frame .

I'm wrong???



ID A + ID B makes 29 bits. Yes, NMEA2000 is somehow a subclass of J1939 and inherits some PGN's from it in fact.


Hi Daniel,

I found this forum http://www.mikrocontroller.net/topic/143234 and on this forum I found this library http://www.mikrocontroller.net/attachment/53861/NMEA2000ToNMEA183.rar .

I think it is what I need...

Can you help me with it?

Thanks a lot.



What do you need help with exactly?  My boat has a Volvo engine that sends their variant of this -- would be nice to interface to it. 

Dr. David Harris
OpenLCB Dev Team

Go Up

Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

via Egeo 16
Torino, 10131