# NMEA 2000 Shield

**URL:** <https://forum.arduino.cc/t/nmea-2000-shield/51012>\
**Category:** Hardware Development\
**Created:** [February 2, 2011, 11:05pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012 "2011-02-02T23:05:05Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![svDeepPlaya](https://avatars.discourse-cdn.com/v4/letter/s/cc9497/32.png) [@svDeepPlaya](https://forum.arduino.cc/u/svDeepPlaya)\
**Post date:** [February 2, 2011, 11:05pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/1 "2011-02-02T23:05:05Z")

</div>

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.

> **[NMEA 2000](https://en.wikipedia.org/wiki/NMEA_2000)**
>
> NMEA 2000, abbreviated to NMEA2k or N2K and standardized as IEC 61162-3, is a plug-and-play communications standard used for connecting marine sensors and display units within ships and boats. Communication runs at 250 kilobits-per-second and allows any sensor to talk to any display unit or other device compatible with NMEA 2000 protocols.  
> Electrically, NMEA 2000 is compatible with the Controller Area Network ("CAN Bus") used on road vehicles and fuel engines. The higher-level protocol format...

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

Thanks,  
-p

---

<div class="post-metadata">

**Author:** ![estratos](https://avatars.discourse-cdn.com/v4/letter/e/22d042/32.png) [@estratos](https://forum.arduino.cc/u/estratos)\
**Post date:** [February 3, 2011, 10:17am UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/2 "2011-02-03T10:17:08Z")

</div>

Hi,

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.

Daniel.

---

<div class="post-metadata">

**Author:** ![svDeepPlaya](https://avatars.discourse-cdn.com/v4/letter/s/cc9497/32.png) [@svDeepPlaya](https://forum.arduino.cc/u/svDeepPlaya)\
**Post date:** [February 7, 2011, 7:01am UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/3 "2011-02-07T07:01:48Z")

</div>

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.

-p

---

<div class="post-metadata">

**Author:** ![estratos](https://avatars.discourse-cdn.com/v4/letter/e/22d042/32.png) [@estratos](https://forum.arduino.cc/u/estratos)\
**Post date:** [February 17, 2011, 3:34pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/4 "2011-02-17T15:34:23Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [October 4, 2011, 2:13pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/5 "2011-10-04T14:13:14Z")

</div>

Hello,

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.

Thanks,  
Jason

---

<div class="post-metadata">

**Author:** ![svDeepPlaya](https://avatars.discourse-cdn.com/v4/letter/s/cc9497/32.png) [@svDeepPlaya](https://forum.arduino.cc/u/svDeepPlaya)\
**Post date:** [October 4, 2011, 5:54pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/6 "2011-10-04T17:54:08Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![terryking228](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/terryking228/32/214478_2.png) [@terryking228](https://forum.arduino.cc/u/terryking228)\
**Post date:** [October 7, 2011, 1:24pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/7 "2011-10-07T13:24:50Z")

</div>

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 😁

If anyone gets into NMEA-Anything start a thread on the forum... I've done a little.

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [July 23, 2012, 12:03pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/8 "2012-07-23T12:03:33Z")

</div>

Hi all,

I want to send data over NMEA 2000 bus using Arduino UNO + Sparkfun Can-Bus ([CAN-BUS Shield - DEV-13262 - SparkFun Electronics](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!

😃

---

<div class="post-metadata">

**Author:** ![estratos](https://avatars.discourse-cdn.com/v4/letter/e/22d042/32.png) [@estratos](https://forum.arduino.cc/u/estratos)\
**Post date:** [July 23, 2012, 2:23pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/9 "2012-07-23T14:23:32Z")

</div>

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

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

Daniel.

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [July 23, 2012, 6:50pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/10 "2012-07-23T18:50:31Z")

</div>

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???

😃

---

<div class="post-metadata">

**Author:** ![estratos](https://avatars.discourse-cdn.com/v4/letter/e/22d042/32.png) [@estratos](https://forum.arduino.cc/u/estratos)\
**Post date:** [July 23, 2012, 9:43pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/11 "2012-07-23T21:43:26Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [July 25, 2012, 12:09pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/12 "2012-07-25T12:09:01Z")

</div>

Thanks a lot Daniel.

Is the message format for NMEA2000 this [CAN in Automation (CiA): Not found](http://www.can-cia.org/index.php?id=496) ???  
But it is bit different from CAN (2.0B) message format [Controller Area Network - Wikipedia](http://it.wikipedia.org/wiki/Controller_Area_Network#Formato_dell.27Extended_frame) .

I'm wrong???

😃

---

<div class="post-metadata">

**Author:** ![estratos](https://avatars.discourse-cdn.com/v4/letter/e/22d042/32.png) [@estratos](https://forum.arduino.cc/u/estratos)\
**Post date:** [July 25, 2012, 1:36pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/13 "2012-07-25T13:36:22Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [July 29, 2012, 5:01pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/14 "2012-07-29T17:01:05Z")

</div>

Hi Daniel,

I found this forum [NMEA2000 nach NMEA0183 Converter - Mikrocontroller.net](http://www.mikrocontroller.net/topic/143234) and on this forum I found this library [http://www.mikrocontroller.net/attachment/53861/NMEA2000ToNMEA183.rar](http://www.mikrocontroller.net/attachment/53861/NMEA2000ToNMEA183.rar) .

I think it is what I need...

Can you help me with it?

Thanks a lot.

🙂

---

<div class="post-metadata">

**Author:** ![dpharris](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/dpharris/32/1163202_2.png) [@dpharris](https://forum.arduino.cc/u/dpharris)\
**Post date:** [July 29, 2012, 5:15pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/15 "2012-07-29T17:15:38Z")

</div>

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.

David

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [July 30, 2012, 12:10pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/16 "2012-07-30T12:10:21Z")

</div>

Hello David,

Did you already use that library ( [http://www.mikrocontroller.net/attachment/53861/NMEA2000ToNMEA183.rar](http://www.mikrocontroller.net/attachment/53861/NMEA2000ToNMEA183.rar) )?  
If yes, what hardware are you using? I have an Arduino UNO + Sparkfun Can-Bus ( [CAN-BUS Shield - DEV-13262 - SparkFun Electronics](http://www.sparkfun.com/products/10039) ).  
I want to send some data over NMEA2000 bus to all node (broadcast).  
I'd like to have a code example to send data using that library (if possible) or a brief guide to using the library.

Thanks a lot

🙂

---

<div class="post-metadata">

**Author:** ![skyjumper](https://avatars.discourse-cdn.com/v4/letter/s/e95f7d/32.png) [@skyjumper](https://forum.arduino.cc/u/skyjumper)\
**Post date:** [August 7, 2012, 5:54am UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/17 "2012-08-07T05:54:36Z")

</div>

I also have an N2K project I need to work on, but the expense of the protocol and certification is holding me up. Have you had any luck so far?

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [October 8, 2012, 6:45pm UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/18 "2012-10-08T18:45:09Z")

</div>

I have just started with embedded programming but been writing enterprise software for many years.

I have just pulled together a base NMEA 2000 / J1939 protocol stack. Currently I have support for a limited number of PGNs but I do have support for single and fast frame NMEA2000 messages. The current project is to create NMEA 2000 transducer that will read analog engine data and broadcast PGNs 127488 (engine Rapid), 127489 (engine dynamic), 127505 (fuel level). The protocol stack is built to quick add additional PGNs with minimal amount of code.

Also I'm finishing up support for address claim and other NMEA 2000 group functions. If you are interested in working with me on adding additional capabilities and functions let me know. The current implementation runs on Arduino Uno with Sparkfun CAN-bus that uses MCP2515 CAN controller.

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [October 15, 2012, 10:19am UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/19 "2012-10-15T10:19:30Z")

</div>

Hi, @southern\_cross: I'm most interested in your work. Myself looking at the possibilities to use Arduino + shield to prototype a marine monitoring interface. Basically I would want to monitor and convert to NMEA2000 the engine data you mention plus some additional ones, like PGN 127508 - Battery Status. Possibly also some environmental data and in future also read and parse the AIS PGNs. I've previously only been working in the NMEA0183 domain though now believe that the transition to 2000 is inevitable. If you are willing to share your progress and also specify how you would want to co-operate I'd be very happy to join.

---

<div class="post-metadata">

**Author:** ![scruzin](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/scruzin/32/1146125_2.png) [@scruzin](https://forum.arduino.cc/u/scruzin)\
**Post date:** [December 4, 2012, 7:33am UTC](https://forum.arduino.cc/t/nmea-2000-shield/51012/20 "2012-12-04T07:33:40Z")

</div>

Hi, I'm new to this forum. Just wondering if there has been anything more on the subject of interfacing Arduino and NMEA2000?

[Next page](https://forum.arduino.cc/t/nmea-2000-shield/51012.md?page=2)
