AIS in Navionics einbinden

Wir wollten unseren Garmin durch den großen Preisunterschied durch Navionics ersetzen, da wir hier nur ein Zehntel des Preises für die Karten zahlen müssen. Um unser Garmin ersetzen zu können, brauchten wir größere Geräte als unsere Handys, deshalb haben wir uns zwei günstige Blackview Tab 11 SE Tablets gekauft und dort Navionics installiert. Für unser Navigationssystem war uns wichtig ein hochgenaues GPS und AIS zu haben, um auch in engen oder unübersichtlich Stellen, sicher navigieren zu können. Wir hatten bereits eine AIS Antenne mit eigenem GPS, und diese wollten wir jetzt relativ schnell und günstig in Navionics einbinden. 

 

Um die AIS Antenne und Navionics verbinden zu können, brauchen wir eine Schnittstellte. Wir haben uns für einen ESP32 Board entschieden. Unsere Version verfügt beispielsweise schon über WLAN und war damit perfekt für die Aufgabe geeignet. Um NMEA 0183 Daten ins WLAN zu übertragen, mussten wir erstmal die Spannung der NMEA 0183 Verbindung von 5 auf 3 Volt reduzieren. Das ging recht einfach mit zwei Widerständen, die in Reihe geschaltet wurden, um einen Spannungsteiler zu bilden, der größere Widerstand wurde dabei parallel zum ESP 32 geschaltet. 

Falls jemand mit dem ESP32 Board noch nicht so bewandert ist, hier noch zwei gute Links mit weiteren Informationen: 

Dabei wird das ausgehende Kabel unserer AIS Box (Transmitter), mit Plus an den 2,2 KΩ Widerstand angeschlossen, der wiederum an den RX2 Pin und 3,3 KΩ Widerstand angeschlossen ist. Ground des ESP ist dabei mit dem anderen Ende vom 3,3KΩ Widerstand verbunden und außerdem mit dem Minus - Transmitterkabel unserer AIS Box. Jetzt mussten wir nur noch den Code unten auf der Seite aufspielen und die Baudrate anpassen. 

Damit das ESP-Board gut geschützt auf dem Boot ist haben wir noch eine 3D-Box mit Hilfe von FreeCad erstellt. Diese haben wir dann ausgedruckt und aus Plexiglas durchsichtige Scheiben für die Fronten gefräst.  So sieht die Box jetzt aus. 

Und hier kann man die Box downloaden.

Download
Boden
Boden für die ESP32 Box
3mm_Boden.step
Text Dokument 172.4 KB
Download
Gehäuserahmen
Rahmen für ESp32 Box
Gehaeuserahmen.step
Text Dokument 277.2 KB
Download
Deckel
Deckel für die die ESP Box
3mm_Deckel.step
Text Dokument 131.9 KB
Download
Rahmen mit Boden
RahmenMitBoden.step
Text Dokument 3.2 MB

Code für die Einbindung

// code für ein doit esp 32 devkit v1 30 pin

#include <WiFi.h>
#include <WiFiClient.h>

const char* ssid = "AIS";  // SSID des Access Points
const char* password = "passwort";  // Passwort für den Access Point
const int serverPort = 1234; // Port für die Verbindung

// NMEA 0183 Daten
const int nmeaBaudRate = 4800;
const int nmeaRxPin = 16;
const int nmeaTxPin = 17;

// NMEA 0183 Serielle Verbindung
HardwareSerial nmeaSerial(1);  // Serieller Port 1 am ESP32

WiFiServer server(serverPort); // Server-Objekt erstellen
WiFiClient clients[5];        // Array für 5 Client-Verbindungen

void setup() {
  // Serielle Verbindung für Debugging
  Serial.begin(115200);

  // Access Point erstellen
  WiFi.softAP(ssid, password);

  // IP-Adresse des Access Points abrufen
  IPAddress apIP = WiFi.softAPIP();
  Serial.print("Access Point IP-Adresse: ");
  Serial.println(apIP);

  // WLAN Server starten
  server.begin();

  // NMEA 0183 serielle Verbindung konfigurieren
  nmeaSerial.begin(nmeaBaudRate, SERIAL_8N1, nmeaRxPin, nmeaTxPin);
}

void loop() {
  // Neue Client-Verbindungen akzeptieren
  for (int i = 0; i < 5; i++) {
    if (!clients[i] || !clients[i].connected()) {
      clients[i] = server.available();
      if (clients[i]) {
        Serial.print("Neuer Client ");
        Serial.print(i);
        Serial.println(" verbunden.");
      }
    }
  }

  // NMEA-Daten vom AIS-Antenne lesen und an alle Clients senden
  if (nmeaSerial.available()) {
    String nmeaString = nmeaSerial.readStringUntil('\n');
    for (int i = 0; i < 5; i++) {
      if (clients[i] && clients[i].connected()) {
        clients[i].print(nmeaString);
      }
    }
    // NMEA-Daten auf dem seriellen Monitor anzeigen
    Serial.print("Empfangene NMEA-Daten: ");
    Serial.println(nmeaString);
  }
}