Welcome to the OpenSkipper project, which provides Open Source C# code for Windows for integrating and displaying NMEA 0183, NMEA 2000 and AIS data from nautical instruments, GPS units and internet data sources. OpenSkipper can be run on a laptop aboard your boat to show electronic instruments displaying speed, heading, etc. Open Skipper can also receive and transmit data over multiple connections, including a serial port (for NMEA 0183), an ActiSense NGT-1-USB NMEA-2000-to-USB converter to read NMEA 2000 (N2K) data, and wired and wireless network connections (including TCP and UDP). It also contains a built-in webserver, so you can run OpenSkipper on a laptop and use this to display data on an iPad or Android phone or tablet.
OpenSkipper was initially developed by Dr Andrew Mason in the Yacht Research Unit and Dept of Engineering Science at the University of Auckland, New Zealand, with fantastic assistance from student Jason Drake. OpenSkipper was updated in 2014 by Timo Lappalainen and Kave Oy from Finland.
If you are interested in the NMEA 2000 standard, then Open Skipper provides both code and definition files for interpreting NMEA 2000 messages. This work uses the definition files developed byCanBoat project.as part of his excellent
NMEA 2000 messages can be received using the Actisense (www.actisense.com) NGT-1-USB NMEA-to-USB converter (a product that we recommend). We have not signed any non disclosure agreements with Actisense, but instead written our own low level COM-port driver. Our accessing of an NGT-1 in this way is not officially supported by Actisense. It works for us, but we take no responsibility in any way for any consequences.
Open Skipper contains XML definition files used to describe how an NMEA 2000, AIS and NMEA 0183 message should be decoded. These definition files are a beta release, have not been tested and contain errors, so please do not rely on any output from open skipper for your navigation. These definitions are unofficial, and are not supported by NMEA (www.nmea.org) or any other body in any way. We welcome community feedback on improvements to these.
Open Skipper is beta software designed to serve only as an aid for navigators. It in no way replaces the need to follow good nautical practices.
By using this software, you agree to the terms of the GNU Public License v3 (http://www.gnu.org/licenses/gpl.html), and in particular that:
There is no warranty for the program, to the extent permitted by applicable law. Except when otherwise stated in writing the copyright holders and/or other parties provide the program “as is” without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. The entire risk as to the quality and performance of the program is with you. Should the program prove defective, you assume the cost of all necessary servicing, repair or correction.
In no event unless required by applicable law or agreed to in writing will any copyright holder, or any other party who modifies and/or conveys the program as permitted above, be liable to you for damages, including any general, special, incidental or consequential damages arising out of the use or inability to use the program (including but not limited to loss of data or data being rendered inaccurate or losses sustained by you or third parties or a failure of the program to operate with any other programs), even if such holder or other party has been advised of the possibility of such damages.
All trademarked terms are the property of their respective owners.
So I have ready libraries for Arduino to replace Actisense NGT1 interface. You need only Arduino due board and e.g. MCP2562 bus tranceiver to make full system. The library has been published on https://github.com/ttlappalainen.
My own system has uses also Arduino other serial lines for reading NMEA0183 data and sending them to N2k bus. So it works as NMEA0183 combiner, NMEA0183->Nk2 converter and N2k->PC interface so replacing 3 devices with single Arduino. It needs only three extra 3 RS4222 line tranceivers for NMEA0183 connection.
Very interest stuff going on here… my compliments!
Just a little comment. I’m also investigating this plugging to the N2K bus. The Arduino Due and it´s CAN bus is definitely a viable option. But I also found another alternative: Beaglebone Black. It´s quite a bit more powerful, also has a CAN controller and goes as far as including a couple of programmable microcontrollers with real time capabilities… pretty powerful stuff for 55$. Mind you that you would need to get into the Eclipse, Linux, ARM cross compiling, etc… No such thing as a free lunch.
I’m trying to put together a tilt compensated compass with noise reduction capable hard iron and deviation compensation. Why? Because I can! (that and I don’t want to pay 4k for a B&G) 🙂
René, very interesting. I choosed Arduino Due, because it is rather low power and I found ready CAN library solutions for it. So I needed write only N2k extension. My N2k needs a bit development to make it platform independent. Currently it can be used with different CAN controllers by inheriting base class.
About the compass. I have GPS compass and like its good accuracy in all situations. One can get e.g. Seapilot Vector GPS compass for 850 €. Can you beat GPS compass with any magnetic one? If yes, I am interested.
There is fixed beta on http://www.kave.fi/Apps/index.html. LatitudeDDMM and LongitudeDDDMM formats did not work on south and west side. Now you can also customise them.
Hi, Re your conversation with Rene.
I have a an existing commercial Marine AP (Lowrance / Simrad WP30 with NMEA0183). The WP30 has an in built compass, but this also accepts and prioritizes an external magnetic feed if required. I’m undertaking a project to provide a low cost back up for the WP30. In doing so I’m trying to incrementally migrate / move away from propriety based systems to a more simple open based systems approach….based on the Arduino
I would appreciate your views on using a ‘GPS Compass’ as opposed to a ’tilt compensated electronic compass’ as a feed for an Arduino based marine autopilot. My concerns with this are complexity, accurate & consistent calibration.
The main area of concern around the use of GPS ‘compass data strings’ seems to be if GPS derived ‘Compass’ data is being received (cycled) at a fast enough rate to enable the autopilot software to track, respond & react to the vessels short term position ‘fluctuations’? ?
Looking at the NMEA feed from various GPS / ChartPlotter’s the message string seems to cycle every 1 – 3secs.
In your opinion is this sufficiently quick?
Are there any other issues that would stop one using a GPS Compass feed?
Sorry fo delay – I do not get alarm from this site.
I did not completely understood your question. I have Raymarine STX10 and run it with GPS compass with 10 Hz heading output. Anyway I think Raymarine uses in combination internal accelerometer data. This I realized, when I tried to simulate running with autopilot on ground, when boat is not moving – the pilot did not react right to heading changes. So I think that for accurate fast control you would need both heading data for slow term correction and accelerometer for true control. Anyway if you are thinking to use normal GPS 1 Hz feed, it may not be good enough. I would work fine up to some weather condition because movements are rather predictable. With heavier movements errors on normal GPS heading (COG) start to grow. Ofcoarce you you can filter it a lot, since accelerometer is required for control.
Arduino based autopilot would be interesting. In basic it would be some PID control.
Thanks for your suggestions. I decided to use an ELM329 chip and am now reading battery voltages. No transmission to the N2k bus whatsoever. Next – expand the range of PGNs, change from serial to USB or bluetooth and then write an android app.
If you are using OpenSkipper for receiving data, you could just enable web-server on it and write web-pages four your data. Then you do not need to write any special android app. Instead you can use any web-browser. There are sample web-pages under www directory on OpenSkipper.zip
Thanks, Timo, I will try that. Preliminary look at the data suggests some non-standard use of N2K, so OpenSkipper will be very useful to check. Ultimately, I want the system to SMS me when battery voltages drop below a preset values, AC is lost or bilge pumps operate when I am away from the boat.
For offline monitoring I prefer some alarm system with some inputs and outputs or if you like to make your own, make it e.g. from Arduino based board and use sleeping to save batteries. I made anchor chain counter/display/control box with Arduino. It has average current about 10 mA. For othermonitoring I have Celotron Centro alarm system.
Timo – I looked at your schematic ArduinoDue_CAN_with_SN65HVD234.jpg. Can you explain the use of CAN0 and CAN1? I assume I just connect CAN0 to the NMEA2000 network and ignore CAN1. Please advise
Just use CAN0 and ignore CAN1. So connect CAN0 to NMEA2000 network.
Currently my NMEA2000 Arduino library does not support use of several CAN bus on same Arduino. I have done some preliminary tests, but it is not finished. This feature will be necessary only if you want to make NMEA2000-NMEA2000 bridge device, which is not so common on small yahcts.
I’ll prefer to send Arduino NMEA2000 library questions on GitHub.
I would like to setup a chain counter/display, it’s possible to share?
Yes it is. I have done some minor modifications to code, but I have not yet updated it. So please send your code/data directly to me, so I’ll add it to files. You can find my contact information through http://www.kave.fi/Contact.html.
The simulator is a super program, but is it possible to change gps pos. in the neam simulator ?
It would be nice, if there was a AIS with 5 or more tagets.
Sorry I did not undestood your question: “…is it possible to change gps pos. in the neam simulator?”. I expect you mean NMEA Simulator. You can set the GPS postion manually before you have activated run. When you have activated run, you “drive” boat by setting gear to forward (“F”) and rising throttle to some RPM. Then you can turn boat by turning Rudder. Simulator also simulates plane, if you rise you elevator (“Elev.”), which effects to altitude. During run there are some other parameters too simulated like fuel, water battery.
Note also that on Tools-Options…-Track you can open Nobeltec track or GPX route and then on main page activate “Follow track” and “Run”, so your boat will follow that. Video for route is still missing;)
I’ll take AIS to the worklist. There would be lot of vector calculations…
The code is not so easy, since I started this from quick and simple GPS simulator for NMEA 0183 and now it has lot of other options, NMEA2000 etc. And too much work to rewrite.
I’m trying to get NMEA simulator to work with west longitude and it fails because digits are changed to negative numbers as soon as I tick run.
Can you help?
Thanks a lot.
Same problem as the one above 🙁 West longitude turns to negative number and program wont run.
Fixed now. Sorry my mistake – I have not simulated for far.
Can anyone tell me please, if there is a way to search or export (to Excel etc.) the table of data in the Decoded Viewer window?
Does anyone know how the data in ‘Decoded Viewer’ screen the can be searched or exported (for use in Excel etc.)
As far as I remember, there is no way to export data from Decoded Viewer. The problem is that every message has different field description, so you can not have data in columns. In principle there could be some sense having columns like time,source,dest,PGN,PGNexplanation,field1,field2,…
You are asking with solution, so please explain what you need, so I can tell is there other solution for that.
I am working to start a project using OpenSkipper and the ESP32. Creating a solution that allows NEMA 2000 to be accessed via Wifi would be really cool! I hope to have a Lowrance unit and the motor that support NEMA 2000 by June. My thought is that the ESP can send the NEMA data via websockets in a browser. I already have the web server/websocket code running to control a trolling motor. If anyone is interested in this project please send an introductory email to [email protected]. Thanks!
Thanks for this; sounds like an interesting project. We look forward to hearing how you get on. Andrew
There are different ways to do that.
One way is as I have to use computer and OpenSkipper web server. Computer is connected normally to yacht WiFi, where you can get boat data with any browser. Since I have computer allways on and navigation sw on it, this is natural for me. There are sample web pages on OpenSkipper binary download package. If you can write java, it is rather easy to develop sample pages as you like. For this you need normal WiFi router, computer, NMEA 2000-USB box (either Actisense or Arduino based. See. e.g. https://github.com/ttlappalainen/NMEA2000/tree/master/Examples/TeensyActisenseListenerSender)
Other way is e.g. to use kBox (see https://hackaday.io/project/11055-kbox). It connects directly to N2k bus and has internal WiFi and can send data to e.g iNav App. They have also plan to add SignalK support for it.
I am Emmanuel from France,
Sorry to trust these comments
I start a project to get data from nmea 2000 bus and send it to a signal k server.
I would like to use a teensy 3.2 board. I saw your work on : https://github.com/ttlappalainen/NMEA2000/tree/master/Examples/TeensyActisenseListenerSender/Documents.
Could you contact me on e.fiancette at gmail.com please?
That project works also. That was for case where it was needed to send data from NMEA Simulator (see. http://www.kave.fi/Apps/) and read bus data on same time with NMEA Reader on other port. So in your case you would not need extra Pololu board and just simple example ActisenseReader would be enough.
On the otherhand library is now RPi compatible, so that could be implemented with PICAN2 directly to RPi, so then you would not need any extra boards. That could be done by adding basics from ActisenseListener code to signalk server.
You find my email from http://www.kave.fi.
Hi, I was asking earlier about NMEA Sentences, and I thought I would mention the following are what are being supplied in the simulation program that I am trying to get Open Skipper to respond too.
Has anyone programmed an xml for rudder angle?
September 13, 2017 at 7:24 pm
Has anyone programmed an xml for rudder angle?”
Super project, easy to install, easy to build with Arduino Due – canbus and my project running smooth.
My project is to get some measurements from two motors on Raymarine E80 mfd. I know that is possible with Timo’s NMEA 2000, great source. My wish is to see the same in OpenSkipper, but here is my knowledge about Grafik, com etc. stopped. Is there any out there who have made 2 instance of motors, oil pressure, batteries etc.. or some hint’s how to do it.
It would be a nice Christmas .
I wish you a merry Christmas and a happy New Year.
Super cool stuff, and I hope that you will continue.
Best regards Henning
Does anyone know if the NMEA simulator can send PGNs or sentences related to set/drift/current such as PGN 129291?
No but I could add it. Do you know it that simply the current or is it calculated effect of all like current and wind.
And by the way any donation for NMEA Simulator would be helpfull!
Is N2K and NMEA2000 not the same protocol?
What is the difference between them?
Nothing, except N2k is not trade-marked, I think. Andrew
I’ve just installed the OpenSkipper but XML file looks for Port27. There is no Port27 but 3,4, 5, I’ve tried them all , revising the XML file, but it keeps coming back saying ( There is no such port) Please advise !..
Louis, FL, USA
Port 27 is sample, if you test OpenSkipper with NMEA Simulator and follow instructions with it.
It is best to change port by OpenSkipper by selecting View-“Data Streams…”-“NMEA 2000 (Actisense NGT-1-USB)” . On tab you have one stream named “Main NMEA2000”. You can set port for that and press “Connect”.
We’re working on a project to perform data analysis of NMEA traffic using Splunk or another big data tool. Has anyone looked into moving data from openskipper into a log file format that can be reviewed and analyzed? Thanks
OpenSkipper will save the data it receives into a log file. Andrew
Hi, I have downloaded your code. It is nice project.
I have question, how to GetValue of “Percent Engine Load” ?
On PGN Explorer, I look that “Percent Engine Load” start from 192 bit, but as far as I know the data from CAN network is only 8 byte which is only 64 bit.
And when I try to GetValue using OpenSkipper -> RawIntValue, RawLongValue, RawUIntValue or RawULongValue it will be error beacuse out of range (192 bit).
Hi, I am searching for a solution that converts the NMEA0183 v1.2 winddata to NMEA0183 v1.3. I need this to connect a old VDO Logic windset to a Garmin GPSmap 721. Is there a way to do this with the Openskipper code on a Arduino?
The code can do that, yes, but it might need a little bit of coding by you. Andrew
Hello, this question might not be entirely suited for this site, but anyway. I am trying to send some PGN data to the NMEA bus. I am using an old MCU with CAN to send data. I am wondering how necessary is for the device to self-claim an address and to regurarly send the Heartbeat PGN? Everything is working fine connected to the OpenSkipper and the addresses set to a fixed value and without sending Heartbeat PGN. But I am wondering how this will work on a bigger system on a proper boat with NMEA certified devices?
Pleased that OpenSkipper is proving useful for you. I am sure data will still be received fine even if the transmitting device is not sending a heartbeat PGN. Other PGN experts may have a better idea on what the consequences are of not sending this heartbeat message. You could also ask Kees over at CanBoat https://github.com/canboat/canboat. Good luck, Andrew
Attempting to implement Tim’s NEMA_DataDisplay2 to read data from Bennett tabs (PGN 130576). This only node on network. Hardware: Teensy3.2 + external MCP2515/TJA1050. Do not have separate transceiver available to me at this time.
Teensy3.2 Processor MCP2515/TJA1050 board
Signal Pin Pin Wire Pin
+5V Vin (USB) —— Vcc
0V GND VSS —— GND
SPI Dout (SO?) D07 59 —— SO
SPI Din (SI?) D08 60 —— SI
SPI CS D09 46 —— CS
INT D10 49 —— INT
SPI SCK D14 58 —— SCK
following 3 defines at beginning of NEMA_DataDisplay2 code:
#define USE_N2K_CAN 1 // external MCP2515 NMEA2000_CAN.h
#define N2k_SPI_CS_PIN 46 // D09 CS Pin used with this Teensy 3.2
#define N2k_CAN_INT_PIN 49 // D10 INT Pin used with this Teensy 3.2
following line added to setup()
Oscilloscope sees signals from Trim Tab on CanH, CanL. Nothing displays on Serial Monitor. No LED13 indication of activity. Wiring has been triple checked. Any suggestions or where else to seek help?
Regarding the NMEA0183 string : M!PARLB,1,1,`@4AC@*37
Took me a while to find more information, so I will add what I’ve figured out at the moment, in order to help others who stumble into this situation.
Found a german forum, where someone asked this exact question: https://www.segeln-forum.de/board194-boot-technik/board35-elektrik-und-elektronik/70969-nmea0183-sentence/
It is the NMEA0183 output intended for interaction between an ACTISENSE N2K-to-NMEA0183 converter and it’s respective Actisense Toolkit Software. The person in the german forums received a tech-support reply from Actisense, regarding this issue. In which they stated that it is harmless string, since it is not of a format useable by NMEA0183 devices. It does occupy message TX time, hence via the Actisense software, it can be disabled/enabled or “temporary enabled”.
The other surprise, in my case, is that the Actisense NGW-1-AIS device when connected via NMEA0183 connector to my PC, kept showing !PARLB messages… ALL the time.
This meant that I needed to properly configure the device. Update the firmware and use their latest Actisense Toolkit software to configure the N2K-to-NMEA0183 conversions.
Hope this comment helps other, if they ever stumble into something similar.