Go Down

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


"I see the Genuino 101 has onboard IMU" It has gyro and accel but for compass magnetometer is also needed.
Aahaa, thanks mate



I want to try to use a DUE to translate all the analog engine data from my V8 to be shown on my Raymarine Axoim through NMEA2000.

To do so I wanted to play a bit with the DUE and the multidevice example file.
I get this error while compiling it:

"In file included from /home/thomas/Arduino/libraries/NMEA2000_due-master/NMEA2000_due.cpp:28:0:
/home/thomas/Arduino/libraries/due_can-master/src/due_can.h:23:24: fatal error: can_common.h: No such file or directory
 #include <can_common.h>"

I added all the libraries from github which where asked for, also the due_can but without  luck.

First I tried it under Windows but there I got a lot of error due to the path to the libraries as there where wirtten / instead of \ in the pathes (if this was the reason for).

So can you help to find why it wants the can_common.h even if it not existing in the due_can libraries or what I am doing wrong?

I just choosed the example "MultiDevice" and added  the NMEA200_DUE librarie due to I want to use the Due.



I have not yet updated the docs. Collin has made some changes and it does not compile anymore and I have not had time to check those. Please remote you current due_can completely and install the one under my repositories: https://github.com/ttlappalainen/due_can

In c/c++ language one should use only /, since then code in compatible with Linux and Mac. Translator will take care of right way of pointing directories.

Also I do not any use for you to start with MultiDevice example. I prefere to use some simpler example like TemperatureMonitor.


Hi again Timo,

I soldered another MCP2562 with connections for DUE. Is it ok to post it to Kave Oy with your name?


Please send me personal message, so I'll give you address.


Hi Timo.

I'm quite new with Arduino but your work seems to be huge and amazing.

I would like to use the NEMA 2000 library to make a remote control for an Raymarine EV100 Autopilot.
This new generation of autopilots talks with seatalkNG which is, I think NMEA2000.
I want to use a 433Mghz remote.

Have you ever try this ? Do you think it could be doable ?

In advance, thanks


Yes it is doable. I have the same problem. But there is big challence, since all autopilot control commands are proprietary. This means that there is no documentations about them. So this requires bus traffic spying and some knowledge of the NMEA2000 protocol, since you have to read messages bit by bit to find out how autopilor will be controlled.

I have older model SPX-10 and I would imagine they use same protocol. Last summer I did some spying and I think I found a way to send course command to pilot and the way how to turn pilot on/off. Anyway I have not tried that yet.

So now it depends very much about you total skills can you do it or not.


Thank you for your answer.

My skills in C/C++ are almost at zero :( .
I will try to investigate all of this and I will at first try to do an NMEA0183 -> NMEA2000 converter to train...
I'll tell you if I go further.


But have you used other languages? C/C++ is not the easiest to start.

In my repository there is also NMEA0183 library, which I have used for my NMEA0183 -> NMEA2000 converter. There is also ready example.


Hello Timo,

I made to proto types of can adapters now. One for the 2560 and the other for the DUE.

So now my plan is to get the DUE to send GPS data from a Blox NEO-6m (NMEA2K based GPS) on the NMEA2K bus. I have a MFD from Raymarine (Axiom 9") which shell show all analog data from the engine and use the new build external GPS reciever.

I think the best is to start to simulate the engine temp as first try and get it shown on the MFD.

My problem is that I am a bit confused about what hae to be used (libray) where and how.
I found the NMEA2K sender example. I guess this is the one to use with the CAN shield to send the messages on the bus. BUT do I have to use a seperate Arduino to convert the analg signal to nmea2k message which than will be send through the DUE which is running the sender library?

I have read a lot of sites from this post but this made it more worth?!  :smiley-eek:

So like I wrote the plan is to grap all analog data signals from the engine and drop it to the MFD through nmea2k.

Lets say I have engine coolant temp, rpm, oil pressure, battary voltage/charge, gasoline/hr, tank level, rudder position and air temp in the engine room.

How would you organize this and what is to be used where? I meen for example 2560 for coolant temp behind the DUE which is running the sender?

Would be great if you could help me to understand the general setup!

Thank you and happy holidays to all!



I rather prefer to take TemperatureMonitor as first example to make something work. You can run it either with Mega (2560) or DUE. It will compile on both without problems. Others have had problems with DUE to send data to bus for some reason, which is not yet clear for me. In any case load mcp_can and due_can libraries from my GitHub repository, since e.g. newest due_can on Collin repository does not work with NMEA 2000.

So in principle all your data "engine coolant temp, rpm, oil pressure, battery voltage/charge, gasoline/hr, tank level, rudder position and air temp in the engine room" can be collected with one board and send to bus. Practically this is not the point of NMEA 2000 bus. Instead you should have board there, where is you information to simplify cabling. So e.g. "engine coolant temp, rpm, oil pressure, air temp in the engine room" to one board near engine. Others could be on other board or what would be easiest if you think it on cabling view. E.g. I have NMEA 2000 cable going through the whole boat and in front I have depth/log device and on the other end there is autopilot. Other devices are between those. This is the idea of single bus system.

So you do not need to put 2560 behind DUE. Just simply read e.g. coolant temp on 2560 and send it to bus, if you have CAN  BUS shield for 2560.

Anyway start with TemperatureMonitor and when you have that visible on MFD, continue developing. You can then find examples of other messages on example MessageSender.


Dec 26, 2017, 01:17 pm Last Edit: Dec 26, 2017, 01:26 pm by autopilotNOR
Hey Timo,

thanks for your answer!

So since I would like to have an all in one solution later I think I start with the Due. For that I have build the "shield"m with the MCP2562 based on the pdf from the nmea library for the due.

When I try to compile the watertemp example with added nmea2000_due.h I get the error to use the mcp_can from collin. If I understood it right, I now edited the NMEA200_due.cpp and changed out the mcp_can from collin to the one from from your repository right (NMEA2000_mcp)?

If I do so I get a couple of error message reffering to the nmea2000_due complaining about can0 is not declared and so on. Aren' t all those part of the due_can library from collin? He is also writing the can_common is neccessary to use that library.

I tried at last now to load this libraries with the tempmonitor:

Code: [Select]

#include <Arduino.h>
#include <NMEA2000_CAN.h>
#include <N2kMessages.h>
#include <NMEA2000_due.h>
#include <NMEA2000_mcp.h>



You do not need to touch any file under NMEA 2000 library. Either you do not need to edit TemperatureMonitor to get it running. It compiles and works as untouched for Due, Mega and Teensy 3.2-3.5.

- Remember to load due_can from my github repository. Do not load anything from collin!
- Remember to set right board. People often set "Arduino Duemilanove or Diecimila" for Due! It must be "Arduino Due (Programming port)"
- Delete all duplicate libraries from your Arduino\Libraries path. So you can not have due_can-master and e.g. due_can-test paths there.

In you sample you have included both Mega and Due object for your code. #include <NMEA2000_CAN.h>  does that automatically for you. So please do not touch code, before you know what you are doing.



got it. It compiled well. Thx!

Next step than to get it shown on the MFD!

You wrote you have an autopilot installed? Is this a diy design? I am currently building as well an autopilot based on Jack E. design which is nice one with enhanced features also using nmea2k to get the course from gps/mfd.

If yours is diy. How did you solved the problem when the boat is comming into a dangerous situation where you have to react immidiate and take over to manual steering? I have a hydraulic steering today (26 foot cabincruiser).



No, I have Raymarine pilot. It has simple Standby button to release clutch. Also works with hydraulic systems.

Go Up