====== OBP60 ======
siehe auch: 
  * https://open-boat-projects.org/de/diy-multifunktionsdisplay-obp-60/
  * https://www.segeln-forum.de/thread/73307-multifunktionsdisplay-diy/
  * https://obp60-v2-docu.readthedocs.io/de/latest/
  * Quellen für die Firmware: \\ https://github.com/norbert-walter/esp32-nmea2000-obp60
  * Quellen für die Dokumentation: \\ https://github.com/norbert-walter/obp60-v2-docu
  * [[obp60v|Virtueller OBP60]] auf dem Raspberry
  * [[OBP40]]: Entwicklungssystem für Enthusiasten
===== Firmware =====
Erstellen der Firmware unter Linux lediglich mit PlatformIO Core.
  - Abhängigkeiten installieren (als root)
apt-get install python3-venv
  - PlatformIO installieren (als normaler Benutzer)
    - Installer herunterladen: 
curl -fsSL -o get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.pyoder
wget -O get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
    - Installer ausführen
python3 get-platformio.py
   - Installer kann anschließend gelöscht werden
rm get-platformio.py
  - Quellen von OBP von Github holen
git clone https://github.com/norbert-walter/esp32-nmea2000-obp60.git
  - Firmware erstellen
cd esp32-nmea2000-obp60
~/.platformio/penv/bin/pio run
  - Firmware erstellen und auf das Gerät laden
~/.platformio/penv/bin/pio run -t upload
==== Hinweise ====
  * :!: Die beim ersten Lauf heruntergeladenen Bibiotheken werden nicht automatisch aktualisiert. Um die Versionen zu aktualisieren muß das manuell gestartet werden:
pio pkg update
  * Wenn PlatformIO wegen einer Python-Bibliothek auf einen Fehler läuft, kann diese in der virtuellen PlatformIO-Umgebung (nach-)installiert werden:
source ~/.platformio/penv/bin/activate
pip install intelhex
deactivate
===== Linux / USB =====
Herstellen einer USB-Kabelverbindung. Systemprotokoll:
usb 3-1: new full-speed USB device number 7 using xhci_hcd
usb 3-1: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.01
usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 3-1: Product: USB JTAG/serial debug unit
usb 3-1: Manufacturer: Espressif
usb 3-1: SerialNumber: 11:22:33:44:55:66
cdc_acm 3-1:1.0: ttyACM0: USB ACM device
usbcore: registered new interface driver cdc_acm
cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
Anpassen der Schnittstellengeschwindigkeit auf Standardwerte von OBP60
  stty -F /dev/ttyACM0 speed 115200
 
Ausgabe der empfangegen Daten
  cat < /dev/ttyACM0
oder
  picocom -b 115200 --imap lfcrlf /dev/ttyUSB0
  CTRL-a, CTRL-q beendet das Programm
===== Entwicklung =====
==== Seite erstellen ====
  - ''Page.cpp'' anlegen
  - ''config.json'' anpassen: ''pagetype / list'' erweitern um den Namen
  - ''obp60task.cpp/registerAllPages'' erweitern um neue Seite
==== Konfiguration ====
Informationen in ''config.json''.
Felder
  * ''name'' Variablenname
  * ''label'' Feldtext in GUI
  * ''type''
    * ''boolean''
    * ''string''
    * ''password''
    * ''number''
    * ''array''
    * ''list''
    * ''filter''
    * ''xdr''
  * ''default'' Standardwert
  * ''description'' Anleitungstext welcher hinter dem Fragezeichen-Button angezeigt wird
  * ''category'' Ein- aufklappbare Konfigurationskategorie in der GUI
  * ''capabilities'' Filtermöglichkeit: ein- ausblenden je nach Hardware
  * ''check'' gesonderte Überprüfung aktivieren
    * ''checkMinMax''
    * ''checkApPass''
    * ''checkApIp''
    * ''checkNetMask''
    * ''checkAdminPass''
    * ''checkRMCt''
    * ''checkPort''
    * ''checkIpAddress''
    * ''checkMCAddress''
    * ''checkSSID''
    * ''checkXDR''
    * ''checkSystemName''
  * ''min'', ''max'' Wertebereich eingrenzen
  * ''list'' Auswahlliste für die Werte, Strings
  * ''condition'' Bedingungen zur Anzeige
Im Projekt kann es mehrere Dateien geben, die beim Erstellen zu einer einzigen
Konfiguration zusammengefügt werden.
Über //Capabilities// können Konfigurationsoptionen ein- oder ausgeschaltet werden,
je nach Hardware. Die möglichen Werte werden über ''DECLARE_CAPABILITY'' eingestellt.
Momentan in ''obp60task.h''.
Mit //Capabilities// ist es nicht möglich eine Einstellung mit verschiedenen
Standardwerten vorzubelegen. Dazu müssen je nach PlatformIO-Environment verschiedene
Konfigurationsdateien verwendet werden.
===== Screenshots =====
Im Browser
http://192.168.15.1/api/user/OBP60Task/screenshot
Oder über die console
wget --content-disposition http://192.168.15.1/api/user/OBP60Task/screenshot
===== Sonstiges =====
Kopplung an [[obppilot]]
  * pypilot siehe
    * https://www.pypilot.org/
    * https://github.com/moeritsen2/pypilot_obp/wiki
==== Schriften konvertieren ====
  * Basis ist eine BDF-Schrift
  * In Fontforge kann diese geladen und bearbeitet werden
    * Mehrere Zeichen selektieren:// Datei / Skript ausführen//
fontforge.activeFont().selection.select(("ranges", None), 0x80, 0xffff)
    * // Kodierung / Glyphen trennen und entfernen//
    * Anschließend unter neuem Namen speichern
  * In C-Code konvertieren mit z.B. ''bdf2adafruit.py''
    * Es ist Nacharbeit per Hand erforderlich