NMEA2000 Gateway mit M5Stack Atom

Vorab ein paar wichtige Hinweise, die Sie unbedingt beachten sollten.

Oft  besteht die Aufgabe bei älteren Booten verschiedene Sensornetzwerke miteinander zu verbinden und Daten zwischen den Bussen wie z.B. NMEA0183 und NMEA2000 auszutauschen. Darüber hinaus möchte man gerne die Daten per WiFi übertragen und auf einem Tablett sehen, bzw. einer Navigations-Apps zur Verfügung stellen. Dafür gibt es im kommerziellen Bereich so genannte Gateways bzw. WiFi-Gateways die solche Aufgaben lösen. Mittlerweile gibt es eine frei OpenSource Implementierung zum NMEA2000 Bus von Timo Lappaleinen die man in eigenen Projekten verwenden kann. Andreas Koritnik hat in mehreren Workshops in verschiedenen Projekten gezeigt wie man an einem NMEA2000 Datenbus Daten ausliest und einspeist. In seinem Workshop werden kleine Elektronikmodule mit einem ESP32 und CAN-Leitungstreiber verwendet die verlötet werden müssen, um eine funktionierende Gesamtschaltung zu erhalten. Die Projekte sind nicht aufwändig. Wer aber keine Löterfahrung hat, traut sich solch ein Projekt kaum zu.

Die chinesische Firma M5Stack vertreibt für den Lernbereich kleine fertige und günstige Elektronikmodule die man durch zusammenstecken miteinander verbinden kann und zur Lego-Welt mechanisch kompatibel sind. Die M5Stack-Module sind so zu sagen das elektronische Gegenstück zu den mechanischen Bausteinen von Lego. So können auch Leute ohne Lötkenntnisse individuelle elektronische Schaltungen aufbauen und für sich nutzbar machen. Auf den Webseiten von M5Stack kann man sich einen guten Überblick über alle Möglichkeiten des modularen Systems verschaffen.

Universelles WiFi NMEA Gateway

Andreas Wellenvogel hat die Idee von Andreas Koritnik aufgegriffen und mit diesen fertigen Modulen weiterentwickelt und ein Softwareprojekt auf GitHub gestartet, das ein universelles WiFi NMEA Gateway zum Ziel hat. Das Gateway besteht aus folgenden Grundkomponenten:

  • Grundkomponenten
    • ESP32 (WiFi-fähig, USB)
    • CAN-Bus-Treiber (NMEA2000)
    • Stromversorgung
  • optionale Zusatzmodule
    • RS485 (NMEA0183)
    • RS232 (NMEA0183)
    • I2C
    • 1Wire

Das Gateway unterstützt folgende Protokolle:

  • NMEA2000
  • NMEA1083
  • SeaSmart (NMEA2000 über TCP)
  • Kundenspezifische Datenpakete über NMEA0183 mit XDR Sentences

ATOM CANBus Kit

Alle 3 Grundkomponenten sind z.B. im ATOM CANBus Kit von M5Stack enthalten.

Abb.: ATOM CANBus Kit

Das  Kit besteht aus zwei Teilen. Dem CAN-Bus Treiber als Basismodul und dem ATOM lite 32 (ESP32 CPU) mit der Stromversorgung als kleines Aufsteckmodul. Beide Teile werden aufeinander gesteckt und bilden einen Einheit. Diese Einheit ist die einfachste Version eines  WiFi NMEA 2000 Gateways. Mit optionalen Zusatzmodulen kann das Grundsystem um weitere Schnittstellen zu anderen Bussystemen erweitert werden.

Andreas Vogel hat eine Firmware entwickelt, die verschiedenste Hardwarekombinationen von M5Stack-Modulen unterstützt. In Zukunft werden sicherlich noch weitere Hardware-Kombinationen dazu kommen. Der Quellcode der Firmware ist so gestaltet, dass weitere Kombinationen eingefügt werden können.

Je nach Anwendung können unterschiedliche Hardwarekombinationen verwendet werden. Die Kombinationen unterscheiden sich hinsichtlich der Stromversorgung und der zusätzlichen Busse die verfügbar sind. Die Zusatzmodule werden direkt am ATOM light aufgesteckt (Tail) oder über ein kleines Verbindungskabel angeschlossen (Units). Ab Werk werden die ATOM light nur mit einer Hardware-Diagnosesoftware ausgeliefert und müssen noch mit der jeweiligen Firmware programmiert werden. Man muss darauf achten die richtige Firmware für die richtige Hardwarekombination zu laden. In der Tabelle sind alle möglichen Hardwarekombinationen aufgelistet. In der letzten Spalte findet man die zugehörige Firmware.

Zur Installation kann man direkt den Installer im Browser nutzen (sofern vom Browser unterstützt). Unter Windows muss dazu nur der entsprechende Treiber für die serielle Schnittstelle installiert sein.

Hardwarekombinationen

Art des Gateways Grundmodul Zusatzmodule Unterstütze Bussysteme Stromversorgung Firmware
Für Einsteiger ohne Löterfahrung
WiFi Gateway Light

NMEA2000 <> NMEA0183 (WiFi)

NMEA2000 <> NMEA0183 (USB)

NMEA2000/NMEA0183 <> SeaSmart (WiFi)

ATOM CANBus Kit

keine NMEA2000 (CAN)

NMEA0183 (USB),

NMEA0183 (WiFi)

SeaSmart (WiFi)

5V über USB Firmware
WiFi Gateway

NMEA2000 <> NMEA0183

NMEA2000 <> NMEA0183 (WiFi)

NMEA2000/NMEA0183 <> SeaSmart (WiFi)

ATOM CANBus Kit

ATOM Tail485

NMEA2000 (CAN)

MEA0183 (RS485)

NMEA0183 (WiFi)

SeaSmart (WiFi)

12V über ATOM Tail485 Firmware
WiFi NMEA Gateway

NMEA2000 <> NMEA0183

NMEA2000 <> NMEA0183 (WiFi)

NMEA2000 <> NMEA0183 (USB)

NMEA2000/NMEA0183 <> SeaSmart (WiFi)

ATOM CANBus Kit

RS485 to TTL Converter Unit

NMEA2000 (CAN)

NMEA0183 (RS485)

NMEA0183 (USB)

NMEA0183 (WiFi)

SeaSmart (WiFi)

12V über RS485 Unit oder
5V über USB
Firmware
WiFi Gateway

NMEA2000 <> NMEA0183 (WiFi)

NMEA2000 <> NMEA0183 (USB)

NMEA2000/NMEA0183 <> SeaSmart (WiFi)

ATOM Light

Isolated CAN Unit

NMEA2000 (CAN)

MEA0183 (USB)

NMEA0183 (WiFi)

SeaSmart (WiFi)

5V über USB Firmware
WiFi Gateway

NMEA2000 <> NMEA0183 (WiFi)

NMEA2000 <> NMEA0183 (USB)

NMEA2000/NMEA0183 <> SeaSmart (WiFi)

M5STICK C Plus ESP32

Isolated CAN Unit

NMEA2000 (CAN)

MEA0183 (USB)

NMEA0183 (WiFi)

SeaSmart (WiFi)

5V über USB Firmware
WiFi NMEA Display Gateway

NMEA2000 <> NMEA0183

NMEA2000 <> NMEA0183 (WiFi)

NMEA2000 <> NMEA0183 (USB)

NMEA2000/NMEA0183 <> SeaSmart (WiFi)

NMEA0183 <> SeaTalk (noch nicht implementiert)

MFD OBP 60 V1.1

keine notwendig, alle Schnittstellen enthalten NMEA2000 (CAN)

NMEA0183 (RS485)

NMEA0183 (USB)

NMEA0183 (WiFi)

SeaSmart (WiFi)

SeaTalk

I2C

1Wire

12V über

Bordnetz

oder CAN

Firmware
WiFi NMEA Display Gateway

NMEA2000 <> NMEA0183

NMEA2000 <> NMEA0183 (WiFi)

NMEA2000 <> NMEA0183 (USB)

NMEA2000/NMEA0183 <> SeaSmart (WiFi)

MFD OBP 60 V2

keine notwendig, alle Schnittstellen enthalten NMEA2000 (CAN)

NMEA0183 (RS485)

NMEA0183 (USB)

NMEA0183 (WiFi)

SeaSmart (WiFi)

I2C

1Wire

12V über

Bordnetz

oder CAN

Firmware
Für Fortgeschrittene mit Löterfahrung
WiFi Gateway

NMEA2000 <> NMEA0183 (WiFi)

NMEA2000 <> NMEA0183 (USB)

NMEA2000/NMEA0183 <> SeaSmart (WiFi)

ModeMCU32

Angepasst an das Board von Homberger.

CAN-Treiber

NMEA2000 (CAN),

NMEA0183 (USB-Seriell),

MEA0183 (WiFi)

SeaSmart (WiFi)

12V über Bordnetz oder CAN Firmware
Zukünftig unterstützte Hardware
WiFi Gateway Light

NMEA0183

NMEA0183 (WiFi)

NMEA0183 (USB)

NMEA0183 <> SeaSmart (WiFi)

ATOM RS485 Kit

keine NMEA0183 (RS485)

NMEA0183 (USB)

NMEA0183 (WiFi)

SeaSmart (WiFi)

12V über Bordnetz
WiFi NMEA Gateway

NMEA2000 <> NMEA0183

NMEA2000 <> NMEA0183 (WiFi)

NMEA2000 <> NMEA0183 (USB)

NMEA2000/NMEA0183 <> SeaSmart (WiFi)

ATOM RS485 Kit

Isolated CAN Unit

NMEA2000 (CAN)

NMEA0183 (RS485)

NMEA0183 (USB)

NMEA0183 (WiFi)

SeaSmart (WiFi)

12V über CAN
WiFi NMEA Gateway

NMEA2000 <> NMEA0183

NMEA2000 <> NMEA0183 (WiFi)

NMEA2000 <> NMEA0183 (USB)

NMEA2000/NMEA0183 <> SeaSmart (WiFi)

ATOM CANBus Kit

Isolated RS485 Unit

NMEA2000 (CAN)

NMEA0183 (RS485)

NMEA0183 (USB)

NMEA0183 (WiFi)

SeaSmart (WiFi)

5V über USB
WiFi NMEA Gateway

NMEA2000 <> NMEA0183

NMEA2000 <> NMEA0183 (WiFi)

NMEA2000 <> NMEA0183 (USB)

NMEA2000/NMEA0183 <> SeaSmart (WiFi)

ATOM NMEA2000 Kit (Open Boat Projects)

Isolated RS485 Unit

NMEA2000 (CAN)

NMEA0183 (RS485)

NMEA0183 (USB)

NMEA0183 (WiFi)

SeaSmart (WiFi)

12V über CAN
WiFi NMEA Display Gateway

NMEA2000 <> NMEA0183 (WiFi)

NMEA2000 <> NMEA0183 (USB)

NMEA2000/NMEA0183 <> SeaSmart (WiFi)

M5STICK Core2

Isolated CANBus Unit

NMEA2000 (CAN)

NMEA0183 (RS485)

NMEA0183 (USB)

NMEA0183 (WiFi)

SeaSmart (WiFi)

5V über USB
WiFi NMEA Display

NMEA0183 (WiFi)

SeaSmart (WiFi)

Lilygo T-Watch-2020

keine notwendig NMEA0183 (WiFi)

SeaSmart (WiFi)

3,7V Batterie

Firmware über USB programmieren

Bei der Programmierung der Firmware für den ESP32 ist folgendes zu beachten. Bei der erstmaligen Programmierung benötigt man eine spezielle Firmware, die verschiedene Partitionen im Flash-Speicher anlegt. Neben der eigentlichen Firmware in der Partition app0 werden noch Partitionen für app1 (Sicherheitskopie der Firmware), nvs (Konfigurationsdaten) und otadata (Over the Air Flashfunktion) benötigt. Die nachfolgende Tabelle zeigt die Anordnung der jeweiligen Partitionen im 4 MB großen Flash-Speicher.

Name Typ Subtyp Offset Size
nvs data nvs 0x9000 0x5000
otadata data ota 0xe000 0x2000
app0 app ota_0 0x10000 0x1f0000
app1 app ota_1 0x200000 0x1f0000

Tabelle: Partitions-Tabelle der Firmware

Um den Flash-Vorgang zu vereinfachen, wurden alle benötigte Partitionen in einem Binary-File zusammengefasst. Das File ist mit dem Namen

xxxxx-xxxx-all.bin

gekennzeichnet.

Die einfachste Variante ist die Nutzung des Installers im Browser (sofern vom Browser unterstützt). Unter Windows muss dazu nur der entsprechende Treiber für die serielle Schnittstelle installiert sein.

Die Firmware lässt sich mit dem esptool von Espressif laden. Das Tool besteht aus einer Reihe von Python-Skripten die den Flashvorgang ausführen. Linux-User können das esptool sehr einfach über den PIP-Paketmanager mit

sudo pip install esptool

installieren. Um die Scripte ausführen zu können, benötigt man allerdings einen Python-Interpreter den man installieren muss. Den Python-Interpreter kann man hier unter für gängigen Betriebssystemen wie Linux, Windows und Mac herunterladen und installieren.

Aktuelle Linux Betriebssysteme bringen USB-Seriell-Treiber bereits mit. Sie müssen nichts weiter tun. Unter Windows müssen sie vor dem Programmieren noch den USB-Seriell-Treiber für Windows installieren. Anderenfalls können sie keine USB-Verbindung zum ATOM-Device herstellen. Den Treiber findet man bei FTDI:

Hinweis: Die auf der M5 Seite angebotenen Treiber scheinen nicht zu funktionieren (siehe USB Drive Problems)

Vergewissern sie sich nach der Treiberinstallation im Gerätemanager von Windows, dass ein neues USB-Gerät unter Serielle Geräte dazukommt, wenn sie das ATOM-Device mit dem PC verbinden. Merken Sie sich die entsprechende COM-Schnittstelle. Wir benötigen sie für den späteren Flash-Vorgang.

Abb.: Gerätemanager von Windows

Linux-Benutzer

Verwenden Sie zum Flashen die hinterlegte Firmware in der obigen Tabelle. Der nötige Flash-Befehl für das WiFi Gateway light (m5stack-atom) wäre folgender:

esptool.py --port XXXX --chip esp32 write_flash 0x1000  m5stack-atom-XXXXXXXX-all.bin

XXXX nach –port muss durch die entsprechende serielle Schnittstellenbezeichnung ersetzt werden. Zur Bedeutung der Boardnamen siehe Hardware . Weitere Informationen finden Sie im Code in platformio.ini und in den Hardwaredefinitionen in GwHardware.h .

Windows-Benutzer

Mit esptool.exe finden Sie im Projektotrdner unter tools eine vorgefertigte ausführbare Datei, die Ihnen eine zusätzliche Installation des Python-Interprters erspart, da der Interpreter bereits in esptool.exe integriert ist.  Erstellen Sie einfach ein leeres Verzeichnis auf Ihrem Computer, laden Sie das esptool.exe in dieses Verzeichnis herunter und laden Sie auch die Firmware (xxx-all.bin) aus der obigen Tabelle herunter. Öffnen Sie eine Eingabeaufforderung und wechseln Sie in das Verzeichnis, in das Sie die esptool.exe und die Firmware-Binärdatei heruntergeladen haben. Mit dem Befehl

esptool.exe --port COM13 write_flash 0x1000 xxxxx-xxxx-all.bin

flashen Sie die Firmware über die serielle USB-Schnittstelle COM13.  Es kann durchaus sein, dass Sie die USB-Schnittstelle auf Ihrem PC noch anpssen müssen.

Auf der Projekt-Seite findet sich auch noch eine Erklärung, wie man die Firmware (unter Windows) mit einem grafischen Tool aufbringen kann, ohne dazu die Kommandozeile benutzen zu müssen.

Firmware-Aktualisierung über Web-UI

Um die Firmware eines Gerätes später zu aktualisieren, können Sie die Web-UI (Registerkarte Update) verwenden. Benutzen Sie dafür nicht die Initial-Firmware. Für Updates über die Web-UI gibt es spezielle Firmware-Files die nur die Partition mit der Firmware enthält. So bleibt ihre Konfiguration auch nach dem Flash-Vorgang erhalten. Im Prinzip könnten Sie ein Gerät auch mit dem initialen Flash-Firmware (und einer xxx-all.bin) Firmware aktualisieren, aber dies würde Ihre gesamte Konfiguration löschen. Laden Sie also für den normalen Betrieb einfach eine xxx-update.bin von der Release- Seite herunter und verwenden Sie die Benutzeroberfläche, um sie zu installieren.

Abb.: Update über Web-UI

Wenn Sie eine Datei für das Update auswählen, prüft die Benutzeroberfläche, ob es sich um eine gültige Firmware-Datei handelt und weist ungültige zurück. Um das Update wirklich auszuführen, klicken Sie auf die Schaltfläche Upload. Sie erhalten eine Fortschrittsanzeige und eine Benachrichtigung über das Update-Ergebnis. Nach einem erfolgreichen Firmware-Update laden  sie bitte die Seite in Ihrem Browser neu, nachdem der Status “verbunden” grün ist. Nur so funktionieren in einer neuen Version mögliche Erweiterungen, die es vorher noch nicht in der Web-UI gab.

Inbetriebnahme

Nach erfolgreichem flashen und starten der Firmware wird ein WiFi-AccessPoint erstellt. Verbinden Sie sich mit dem WiFi Netzwerk ESP32NMEA2K  und dem Passwort esp32nmea2k. Verwenden Sie anschließend in einen Web-Browser die Adresse ESP32NMEA2k.local oder die IP-Adresse 192.168.15.1. Sie erhalten eine kleine Benutzeroberfläche, um den Status zu beobachten und Einstellungen vorzunehmen.

Abb. Statusseite

Wenn Sie sich mit einem anderen WiFi-Netzwerk verbinden möchten, geben Sie einfach die Zugangsdaten in der Registerkarte WiFi-Client ein und aktivieren Sie den WiFi-Client. Für alle potentiellen Ein- und Ausgänge (NMEA2000, USB, TCP, RS485) können Sie die Konfiguration inklusive NMEA0183 Filterung einstellen. Um Ihre Änderungen zu speichern, werden Sie nach einem Admin-Passwort gefragt. Das Initial-Passwort ist esp32admin. Sie können dieses Passwort auf der Registerkarte config/system ändern oder sogar vollständig deaktivieren. Achten Sie darauf, das Passwort nicht zu verlieren. Sie können ein verlorenes Passwort nur durch einen Werksreset des Geräts wiederherstellen (drücken Sie die LED-Taste lange, bis sie blau->rot->grün leuchtet). Um Ihnen bei der Wiederherstellung verlorener Passwörter zu helfen, werden das Passwort des WLAN-Zugangspunkts und das Admin-Passwort beim Start des Geräts am USB-Anschluss ausgegeben. Durch Anschließen eines Terminalprogramms können Sie diese Passwörter abrufen.

Sicherheitshinweise

Sie sollten das Geräts nur mit vertrauenswürdigen WiFi-Netzwerken verbinden. Es gibt nur einen sehr begrenzten Schutz gegen Netzwerk-Sniffing oder Denial-of-Service-Angriffe. Verbinden Sie das Gerät niemals direkt mit dem Internet, ohne dazwischen eine Firewall wie z.B. einen Wifi oder LTE Router zu verwenden. Seien Sie besonders vorsichtig, wenn Sie Verbindungen zu offenen Hafen-Netzwerken herstellen. Bei Änderungen werden Sie nach dem Admin-Passwort gefragt – und dieses wird immer verschlüsselt gesendet. Wenn Sie jedoch das Passwort für den WLAN-Zugangspunkt oder das WiFi-Client-Passwort ändern, wird es im Klartext gesendet. Wenn Sie das “Erinnern an mich” für das Admin-Passwort aktivieren, wird es im Klartext in Ihrem Browser gespeichert. Verwenden Sie ForgetPassword, um es von dort zu entfernen.

Verbindung mit dem NMEA2000 Bus

Steckersystem

Für den NMEA2000-Bus gibt es genormte wasserdichte und geschirmte 5-polige Steckververbindungen im M12 Format. Je nach Ausführung können sie vollständig aus Kunststoff oder teilweise aus Metall bestehen. Neben den Datenleitungen CAN-H und CAN-L gibt es noch zwei Leitungen für die Stromversorgung wie GND (V-) und +12V (V+) sowie einen Anschluss für den Schirm. Kabelanschlüsse von Sensoren sind meistens als Stecker (Male) ausgeführt und haben ein Außengewinde. Buchsen hingegen besitzen immer eine Überwurfmutter mit Innengewinde.

Abb. Draufsicht auf Kontaktseite

Abb. NMEA2000 Stecker zur Selbstmontage (Busse Yachtshop)

Wer wesentlich kostengünstigere Industrie-Steckverbinder außerhalb des Yacht-Zubehörhandels einkaufen möchte, achtet darauf 5-polige Steckverbinder mit A-Kodierung zu kaufen. Die Indexkerbe befindet sich dann zwischen Pin 1 und 2. Es gibt noch andere Kodierungen wo sich die Indexkerbe an anderer Position befindet.

SeaTalk NG, Simnet und Philippi P-Bus sind ähnliche Bussysteme die auf CAN-Bus als physischen Layer aufsetzen. Jedoch weichen sie in einigen Spezifikationen von NMEA2000 ab und sind nicht 100% kompatibel. Zudem benutzt jeder Hersteller noch eigene Steckverbinder die untereinander nicht zu NMEA2000 kompatibel sind. Mit entsprechenden Konverter-Kabeln kann aber ein Datenaustausch zwischen diesen Netzen vorgenommen werden. Grundsätzlich sollte eine Mischung verschiedener Bustechnologien vermieden werden.

Stromversorgung aus dem Bus

NMEA2000 Geräte mit geringem Stromverbrauch wie z.B. Sensoren können auch aus dem Bussystem mit Strom versorgt werden. So sind keine zusätzlichen Versorgungskabel notwendig. Die Einspeisung der 12V-Versorgungsspannung in den NMEA2000 Bus erfolgt entweder über ein Einspeisekabel oder einen Plotter mit Buseinspeisung. Allerdings ist darauf zu achten, dass aus dem NMEA2000 Bus nur eine begrenzte Leistung von bis zu 35W entnommen werden darf. Die NMEA2000 Geräte sind dazu mit Load-Werten gekennzeichnet, die die Stromentnahme aus dem Bus angeben. Die Load wird als Vielfaches von 50 mA angegeben.  Ein Gerät mit Load 3 würde demnach 150 mA an 12V benötigen und 1,8 W an Leistung verbrauchen. Die Einspeisung der 12V-Versorgungsspannung in den Bus sollte idealer Weise in der Mitte erfolgen, da so Leitungsverluste durch Leitungswiderstände minimiert werden.

Kabel

Als Buskabel sollten nur hochwertige, wasserdichte und geschirmte Industrie-Kabel verwendet werden wie z.B. Lapp Busleitung UNITRONIC 2 x 2 x 0.34 mm².

Abb. CAN-Buskabel

Dabei sind 2x zwei Einzeladern paarweise verdrillt und zusätzlich mit einem äußeren Schirmgeflecht umgeben. Ein verdrilltes Aderpaar wird für CAN-H und CAN-L verwendet und das andere Aderpaar für GND und 12V. Das Schirmgeflecht wird mit GND einseitig verbunden. Damit erzielt man die besten Ergebnisse und hat eine sichere und langlebige Installation. Dünnere Kabel als 0.34 mm² sollten nicht verwendet werden, wenn die Versorgung aus den Bus erfolgen soll. Die Länge des Buskabels sollte in Summe 40 m nicht übersteigen.

Terminierung

Der physischen Layer des NMEA2000 Busses basiert auf dem CAN-Bus mit differenzieller Signalübertragung. Es werden jeweils zwei Signale mit entgegengesetzter Polarität vom Sender übertragen und im Empfänger durch Subtraktion aus den zwei Signalen ein Einzelsignal erzeugt. Störungen die sich in selber Weise auf beide Signalleitungen auswirken werden durch die Subtraktion eliminiert. Dadurch wird eine robuste und störunanfällige Signalübertragung ermöglicht.

Abb. Differenzielle Datenübertragung (rot CAN-H, blau CAN-L)

Ein CAN-Bus verwendet an den beiden Enden des Bussystems Abschluss-Widerstände von 120 Ohm zwischen den Leitungen CAN-H und CAN-L. Die beiden Abschluss-Widerstände entsprechen dem Leitungswiderstand von 120 Ohm und verhindern Signalreflexionen an den Leitungsenden bei hohen Datenübertragungsraten von 1 MBit/s. Der CAN-Bus besteht aus einem langen Busstrang mit kurzen Stichleitungen kleiner 1.5 m. Eine Sternstruktur des Bussystems ist nicht erlaubt. Die beiden Abschluss-Widerstände dürfen nur am Busende verbaut sein und dürfen sich nicht dazwischen befinden.

Abb. CAN Busstruktur (ohne Stromversorgung)

Einige Geräte besitzen eingebaute Abschluss-Widerstände, die durch entsprechende Schalter zu- oder abgeschaltet werden können. Vergewissern sie sich vor dem Einbau neuer Geräte ob integrierte Abschluss-Widerstände benutzt werden und wie sie konfiguriert sind. Falsch terminierte Busse können Übertragungsprobleme verursachen die schwer zu finden sind.

Abb. CAN-Bus Anbindung mit Versorgung aus dem Bus (M5Stack Atom mit Tail485)

Die Verbindung zum NMEA2000 Bus erfolgt über den orangen Steckverbinder des ESP32 CAN Kits und die 12V Stromversorgung über den Tail485.

Wertere Möglichkeiten der Anbindung sind im Repository bei Github beschrieben.

Verbindung mit dem NMEA0183 Bus

Eine Verbindung zum NMEA0183 Bus ist je nach genutzer Hardware über den orangen Steckverbinder eines Tails485 oder einer RS485 Unit möglich. Mit den oben in der Tabelle angegebenen RS485 Modulen von M5Stack kann jeweils entweder lesend oder schreibend auf den Bus zugegriffen werden. Das kann in der Konfiguration des Web-UI ausgewählt werden. Dort können auch die Parameter (Baudrate, Filter) für die Schnittstelle gesetzt werden. Die Baudrate wird standardmäßig auf 4800 Bd eingestellt und unterstützt damit die meisten Geräte. Je nach Gerät kann aber auch eine höhere Baudrate wie z.B. für einen AIS-Empfänger eingestellt werden, sofern er diese Baudraten unterstützt. Es ist aber zu beachten, dass bei höheren Baudraten die Störempfindlichekiet zumimmt und die zulässige Buslänge geringer ist. Der NMEA0183 Bus ist hinsichtlich der Verkabelung unkritischer als der NMEA2000 Bus. Es werden keine speziellen Kabel vorgeschrieben. Um Störungen zu vermeiden sind geschirmte Kabel empfehlenswert. Der Kabelquerschnitt sollte bei 0,34 mm² liegen.

Eigene Hardware integrieren

Der Quellcode der Firmware ist so gestaltet, dass weitere Hardware-Kombinationen oder eigene Hardware eingefügt werden können. Man kann leicht Anpassungen der PIN Belegung für eigene Hardware durchführen oder auch eigenen Code hinzufügen. Im Projekt ist dazu ein Beispiel um Ordner lib/exampletask enthalten, dort ist auch eine Beschreibung zu finden. Weitere Beispiele findet man in “forks” des Projektes – z.B. unter free-x oder norbert-walter.

Bekannte Probleme

NMEA2000 kritisch: Ein Problem besteht wohl bei der Implementierung des CAN-Protokollstack im ESP32, wenn auf dem Bus die Kommunikation gestartet wird. Wird die Start-Anfangs-Sequenz vom Kommunikationspartner nicht beantwortet, so geht der CAN-Bus des anfragenden ESP32 in einen undefinierten Zustand und sendet solange mit voller Datenrate Mülldaten bis die Start-Anfangs-Sequenz von irgend einem Kommunikationspartner im Bus beantwortet wird. Wenn man beide ESP32 mit dem CAN-Bus verbunden hat und beide oder einen der ESP32 danach resettet, funktioniert die Verbindung wieder. So wie das aussieht kann man die Start-Anfangs-Sequenz wohl nur einmalig nach einem Reset benutzen. Danach funktioniert sie nicht mehr. Befinden sich aber im CAN-Bus andere Kommunikationspartner die keinen ESP32 verwenden und noch korrekt auf die Anfangs-Sequenz antworten können, ist alles ok. Das Problem tritt also nur auf, wenn zwei oder mehrere ESP32 miteinander kommunizieren wollen.

Das Problem konnte inzwischen gelöst werden durch Korrekturen in einer Open Source Bibliothek.

NMEA2000 kritisch: Werden am CAN-Bus keine oder nicht die richtigen Abschlusswiderstände verwendet, so kann es zu Störungen auf dem Bus kommen. Entweder gehen Datenpakete verloren oder der CAN-Bus hängt komplett oder läuft erst gar nicht an. Das tritt insbesondere dann auf, wenn ungeschirmte und nicht verdrillte Kabel verwendet werden oder wenn man die Datenleitungen CAN-H und CAN-L mit der Hand berührt oder diese Leitungen mit GND oder +12V hochohmig in Verbindung kommen. Der CAN-Bus kann dann nur wieder belebt werden, wenn die Spannung komplett abgeschaltet wird und danach alle Systeme wieder starten. Solche Probleme treten nicht auf, wenn der CAN-Bus korrekt terminiert ist und geeignete Kabel und Steckverbindungen verwendet werden.