Skip to content

Latest commit

 

History

History
130 lines (88 loc) · 11.7 KB

README.md

File metadata and controls

130 lines (88 loc) · 11.7 KB

NMEA2000-Workshop

This repository contains information for a NMEA2000 workshop. It is currently only available in German language. But you can use Google Translate to translate it to other languages: Start translating to English

Dieses Repository enthält Informationen zu einem NMEA2000-Workshop. Mit Schritt-für-Schritt-Anleitungen und vielen Beispielen wird die Nutzung und Programmierung von NMEA2000-Anwendungen gezeigt.

Die Informationen sind eigentlich für die Nutzung in einem Präsenz- oder Online-Workshop gedacht. Die Informationen können aber auch ohne Workshop in eigener Regie genutzt werden. Alle notwendigen Inhalte und Erklärungen sind im Text enthalten.

NMEA2000 Modified motor yacht.jpg

Es haben inzwischen zwei Online-Workshops stattgefunden:

Die Zweiteilung des Workshops hat sich dabei bewährt, da es für einen Termin zu viel Inhalt ist.

Weitere Workshops können bei Bedarf folgen. Bei Interesse bitte im Segeln-Forum hier melden. Sobald genügend Interessenten dabei sind, planen wir dann den nächsten Workshop.

Für Fragen und Diskussionen zum Workshop könnt ihr gern auch das Segeln-Forum nutzen. Alternativ geht natürlich auch die Discussions-Funktion in GitHub.

Für den Workshop sind einige Bauteile notwendig. Die Liste mit genauen Bestelldaten folgt weiter unten.

Ziele des Workshops

Nach dem Workshop solltet ihr folgendes können:

  • Grundlegende Informationen zu NMEA0183 und NMEA2000 finden und verstehen
  • Aufbau eines NMEA2000-Netzwerks auf einem Steckbrett (ESP32, CAN-Bus-Transceiver)
  • Die Arduino-IDE installieren
  • Die nötigen Bibliotheken installieren (ZIP-Datei und Bibliotheksverwalter)
  • Grundlegende Informationen zur NMEA2000-Bibliothek finden (PGN, Datentypen)
  • Arduino-IDE nutzen (Programme laden und auf den ESP32 hochladen)
  • Daten von einem NMEA2000-Bus auslesen und auf dem PC darstellen (mit NMEA-Reader)
  • Den Aufbau eines typischen Programms (C/C++) verstehen
  • I2C-Sensoren (hier BME280) nutzen (Anschluss I2C, Bibliotheken)
  • Messen von Werten (Temperatur, Luftfeuchte, Druck) und Senden entsprechender PGNs
  • Nutzung von 1-Wire und Multitasking mit ESP32 (Temperatursensor DS18B20)
  • Messung von Spannungen und Widerständen (Batteriespannung, Tanksensoren)
  • Messung von Frequenzen (Motordrehzahl, Durchflussgeber)
  • Daten mit dem ESP32 vom NMEA2000-Bus lesen (PGN) und nutzen
  • Lesen von NMEA0183-Nachrichten und Wandlung nach NMEA2000
  • Aufbau eines NMEA2000-zu-NMEA0183-WLAN-Gateways und Darstellung von simulierten Daten (NMEA-Simulator) in OpenCPN und auf dem Tablet
  • Optional: Aufbau eines ESP32-Web-Servers und Senden von Daten an einen SignalK-Server

Vorkenntnisse in Programmiersprachen wie C und C++ sind hilfreich, für den Workshop aber nicht unbedingt notwendig. Die Nutzung der Beispiele und auch das eigenständige Erweitern von Programmen wird auch ohne Vorkenntnisse funktionieren.

Wenn ihr alle Vorbereitungen abgeschlossen habt, startet hier der Workshop.

Vorbereitungen

Für den Workshop sind einige Vorbereitungen notwendig. Diese sollten vor dem Workshop durchgeführt werden, um im Workshop mehr Zeit für die Beispiele zu haben.

Falls es bei den Vorbereitungen zu Problemen kam, können wir die Probleme im Workshop gemeinsam lösen.

Vorbereiten der Arduino-IDE

Als Erstes müssen wir die Arduino-IDE und die ESP32-Board-Unterstützung installieren. Wie das geht, wird bei den folgenden Links beschrieben.

  • Download und Installation der Arduino-Entwicklungsumgebung Link
  • Installation der ESP32-Board Informationen Link (Bitte Methode "Installing using Boards Manager" nutzen).

Die Beispiele im Workshop sind mit dem ESP32 Development Module V1 (Bestell Link unten) und der Board-Version 1.0.6 getestet. Die Version 1.0.6 ist die letzte, die auch von 32-Bit Windows-Systemen unterstützt wird. Die Biblotheken von Timo Lappalainen haben sich auch inzwischen weiterentwickelt. Um Probleme mit dem Workshop zu vermeiden, habe ich die genutzte Version der Biblotheken im Verzeichnis "Libraries" gepeichert.

Beim ESP32 V2 und neueren Board-Versionen (2.x.x) kann es zu Fehlern beim Kompilieren mit früheren Beispielprogrammen kommen, da sich einzelne Funktionen der ESP32-API geändert haben. So ist zum Beispiel "esp_efuse_read_mac(chipid);" durch die geänderte Funktion "esp_efuse_mac_get_default(chipid);" zu ersetzen.

In den aktuellen Beispielen auf GitHub sind die Funktionen schon umbenannt. Das gilt auch für meine anderen NMEA2000-Projekte auf Git-Hub. Trotzdem kann es dazu kommen, das weitere Änderungen notwendig sind.

In der Arduino-IDE müssen wir als Nächstes das richtige Board auswählen. Dazu klicken wir auf "Werkzeuge", "Board" und wählen dann "ESP32 Arduino" und "ESP32 Dev Module".

Download der NMEA2000-Bibliotheken

Im Workshop werden wir Bibliotheken von Timo Lappalainen verwenden. Durch die Nutzung der Bibliotheken wird die Programmierung von NMEA20000 sehr vereinfacht.

Folgene Bibliotheken bitte als ZIP-Dateien downloaden und installieren:

Jeweils auf den Namen des Repositories klicken, dann den auf "Code" klicken und "Download ZIP" auswählen. Dann in der Arduino-IDE: Sketch, Bibliothek einbinden, .ZIP-Bibliothek hinzufügen auswählen und den Speicherort der heruntergeladenen Bibliotheken für jede der drei Bibliotheken nacheinander auswählen und installieren.

Vorbereiten des Steckbretts

Ein Steckbrett (auch Breadboard), ist die einfachste Art, kleine Schaltungen aufzubauen. Wie ein Steckbrett funktioniert wird zum Beispiel hier beschrieben.

Die Basis für den Workshop bilden zwei ESP32-Module mit zusätzlichen CAN-Bus-Transceivern. Der linke ESP32 dient als Schnittstelle zum NMEA-Simulator/-Reader auf dem PC/Laptop. Der rechte wird für die Beispielprogramme genutzt.

Um Schäden durch falsche Steckverbindungen zu vermeiden, bitte den ESP32 immer zuerst von der USB-Stromversorgung trennen, bevor Steckverbindungen gesteckt oder geändert werden.

An beiden ESP32 wird der CAN-Transceiver angeschlossen:

  • 3,3 Volt an 3,3 Volt
  • GND an GND
  • CAN-RX an GPIO 4
  • CAN-TX an GPIO 5

Die beiden Transceiver werden dann verbunden (CAN-H mit CAN-H und CAN-L mit CAN-L).

Damit haben wir ein kleines NMEA2000-Netzwerk zum Üben.

Eigentlich besteht ein NMEA2000-Netzwerk aus einem Backbone-Kabel, das an beiden Enden mit einem Widerstand abgeschlossen ist. Vom Backbone können dann mehrere Stichleitungen zu den Geräten abgehen. Für unser Mini-Netzwerk ist das aber nicht weiter wichtig. Der CAN-Bus ist so robust, dass es auch mit einer einfachen Direktverbindung von CAN-L und CAN-H funktioniert.

So sieht das dann auf dem Steckbrett aus:

Basis

Zusätzliche Programme zum Testen von Funktionen (PC und Apple/Android APP)

  • Zum Lesen und Anzeigen von NMEA2000-Daten auf dem PC soll der NMEA-Reader verwendet werden: Link
  • Auf dem PC muss zum Senden von Daten der NMEA2000-Simulator installiert werden: Link. Eventuell muss zum Entpacken des Simulators auch das Entpack-Programm 7-ZIP installiert werden.
  • Optional kann auf dem PC auch OpenCPN installiert werden (wird zum Testen des WLAN-Gateways genutzt): Link
  • Auf dem Telefon/Tablet benötigen wir eine APP zum Anzeigen von NMEA0183-Daten. Zum Beispiel NMEAremote(lite) für Apple-Geräte. Die "lite"-Version kostet wohl 3,49 Euro. Für Android-Geräte bitte im App-Store nach einer geeigneten APP suchen und installieren (z.B. AvNav oder nke Display). Ich konnte das leider nicht testen.

Workshop-Beispielprogramme

Auf dem rechten ESP32 werden unterschiedliche Beispielprogramme installiert, um die Nutzung der NMEA2000-Bibliothek zu erklären.

Mit dem NMEA-Reader können wir Daten vom NMEA2000-Netzwerk anzeigen, und mit dem NMEA-Simulator auch Daten an das Netzwerk senden. Beides werden wir im Workshop nutzen.

Hier startet der Workshop.

Material für den Workshop

Folgende Materialien werden für den Workshop benötigt:

  • Steckbrett (Spannungsversorgung Mitte) Link
  • 2* ESP32 Link
  • 2* CAN-Bus-Transceiver Link
  • BME280-Sensor Link. Die Stiftleiste bitte anlöten. Am Besten so herum, dass man die Kontaktbezeichnungen gesteckt noch lesen kann.
  • DS18B20-Temperaturfühler Link
  • Drehpotentiometer 10 kOhm Link. Falls das Potentiometer nicht direkt ins Steckbrett gesteckt werden kann, bitte kurze Drahtbrücken anlöten.
  • Flexible Drahtbrücken Link

Zusätzlich benötigen wir auch noch folgendes:

  • 2* USB-Kabel (Micro, passend für ESP32)
  • PC/Laptop (mit 2* USB)
  • Tablet/Smartphone (Android/Apple)

Der bei Reichelt angebotene ESP32 (Joy-IT) geht prinzipiell auch. Er hat aber eine andere Pin-Belegung als der von AZ-Delivery. Im Workshop nutzen wir den ESP32 von AZ-Delivery.