Go Down

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


Hello David,

Did you already use that library ( http://www.mikrocontroller.net/attachment/53861/NMEA2000ToNMEA183.rar )?
If yes, what hardware are you using? I have an Arduino UNO + Sparkfun Can-Bus ( 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



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?


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.


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.


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


BTW, there is an open-source NMEA 2000 decoder project over at https://github.com/canboat that looks useful.


I've just spent the weekend decoding a NMEA 2000 GPS sensor.  Garmin's manual specified the PGNs the unit transmits and accepts but no detail on any of the payload.  I've managed to come across documents which have been helpful, but whats been most helpful is Maretron's product manual.  They get into detail, at least with their GPS sensor, almost as heavily as most NMEA0183 devices I've had the pleasure to use.  Only problem is, I need to figure out how to configure my Garmin sensor since differential corrections are disabled be default...  I've been talking with a Garmin representative about the lack of technical documentation and am waiting for a follow-up.

When it comes to standards, the manufacture might be the entity who purchases the standard, but we, the customer, are actually paying for it. 


I've been active over at Seeed studio's forums.  I've been actively developing and ironing out the MCP2515 library.  I would recommend checking out my github if you end up using the MCP2515 with an Arduino.
"Taking the time to make a proper, punctuated, post is a mark of courtesy and respect."  http://forum.arduino.cc/index.php?topic=149022.0


Cory would you be able to provide an example of writing a broadcast of engine data PGN 127489 using your library?

I am working on receiving these values from my boat's computer (delphi ecm MEFI3) and I would now like to have them appear on my NMEA 2000 network.

I'll be releasing my full project's source code and hardware when completed (for now: by request).


Nevermind Cory.

I have successfully broadcasted engine data (PGN 127488 + PGN 127489) to my raymarine MFD.


I am very interested in doing just this. If you are willing to share what you have done, I would very much appreciate it. Not sure if if want PGN 127489 or 130311 for my task. There doesn't seem to be an appropriate PGN for engine vacuum (not boost).


Nevermind Cory.

I have successfully broadcasted engine data (PGN 127488 + PGN 127489) to my raymarine MFD.


I'd be happy to help. PM sent.


I replied. Thanks very much! I don't have much to offer in kind, other than a parts list and schematic for what I plan to do with it.


Nevermind Cory.

I have successfully broadcasted engine data (PGN 127488 + PGN 127489) to my raymarine MFD.

Hello Allen!

How did You manage to broadcast PGN 127489? It isnt covered by standard or extended CAN formats due to more than 8 databyte (=26) in it - I found that its only supported by CAN FD devices - MCP2515, AT90CAN128 family and all PICs are supports only the 8 databyte mode... Im really interested in it, can You please share Your findings?

Best regards,


Jun 03, 2014, 06:52 am Last Edit: Jun 03, 2014, 05:13 pm by coryjfowler Reason: 1
The way more than 8 data bytes is sent is a little confusing.  They send it 7 bytes at a time with the first byte of every message incrementing by 1, which is called the sequence identifier.  So to send more than 8 data bytes, you would essentially be sending multiple messages, each having the sequence identifier one greater than the previous.  Three such messages would give you 21 bytes and four would give you 28.  I think the simplest way to do this would be with a 'for' loop, putting the data bytes in an array, using the the loop count variable as the sequence ID, and multiplying the loop variable by seven for the offset needed by the array.

Sorry, its been a while since I've been around and active.  I've been busy with life things and not had any time for my toys.
"Taking the time to make a proper, punctuated, post is a mark of courtesy and respect."  http://forum.arduino.cc/index.php?topic=149022.0


I'm very impressed you managed to generate engine data on NMEA 2000 so the Raytheon MFD could display it. Is there a way you could share your results or can I approach you via a PM? /Jay

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