Inhaltsverzeichnis

Controller, alter Zustand

Tür-offen Überwachung

die Türen haben einen Schleifkontakt: Tür-offen: Kontakt ist zu.

Die Kontakte hängen an +12V und wenn sie geschlossen sind versorgen sie je einen Zeitgeber (Multivibrator mit ein paar Sekunden Zykluszeit).

Diese beiden Multivibratoren haben ein Relais, welches alle paar Sekunden auf und zu geht. Dieses Relais steuert programmierbare Eingänge des VXR9000 an: Es verbindet den EXT PTT Anschluss sowie die prog.IOs 2(Innentüre) und 1(Außentüre) mit GND (über einen Schutzwiderstand)

Relais Kennung

Für die CW-Kennung gibt es noch eine Zusatzschaltung. Ist die Außentüre geschlossen, so ist diese RC Schaltung über den Ruhekontakt des Relais aktiv. Damit soll das Relais alle ca. 10min getriggert werden um die CW-Kennung abzuspielen.

Wenn die Außentüre geöffnet wird so schließt ein Relais und diese RC Schaltung geht außer Betrieb.

Controller, NEU

Versorgung: 12 Volt

Inputs:
Türkontakt innen, Türkontakt außen (das sind potentialfreie Schaltkontakte, geschlossen = Türe ist zu)
TX_ATT (open drain), geht auf GND wenn das VXR9000 sendet.

Die Inputs gehen über Optokoppler. Es findet keine Invertierung statt.

Outputs:
VXR9000 PIO-2 (5V kompatibel): auf GND legen triggert das Aussenden des Morsecodes „INNEN“
VXR9000 PIO-1 (5V kompatibel): auf GND legen triggert das Aussenden des Morsecodes „AUSSEN“
VXR9000 PIO-3 (5V kompatibel): auf GND legen triggert das Aussenden des Morsecodes „DB0SL“, also die Relaiskennung

Die Outputs gehen über Optokoppler. Es findet eine Invertierung statt, also: GPIO: High bedeutet Optokoppler zieht den Ausgang gegen GND.

Funktion:

  1. bei beiden geschlossenen Türen soll alle 10 Minuten die Relaiskennung gesendet werden
  2. Türe innen ist offen: sende „innen“
  3. Türe außen ist offen: sende „aussen“

zusätzlich sende bei Statusänderung oder alle 10 Minuten eine MQTT Message
Topic: db0sl/tuerstatus
Payload: value: „innen“: „offen“ oder „geschlossen“, „aussen“: „offen“ oder „geschlossen“

Ausführung

PlatformIO-Projekt für den DFRobot FireBeetle ESP32 V4 (DFR0478) mit Arduino-Framework. Die Ausgänge steuern über Optokoppler die bereits im VXR-9000 programmierten CW-Nachrichten. Der Controller erzeugt die Morsezeichen nicht selbst.

Pinbelegung

Funktion FireBeetle-Pin ESP32-GPIO Signal am ESP32
Türkontakt innen D7 13 LOW = geschlossen, HIGH = offen
Türkontakt außen DI 16 LOW = geschlossen, HIGH = offen
VXR-9000 TX_ATT LRCK 17 LOW = Sender aktiv
VXR-9000 PIO-2 → „INNEN“ D2 25 HIGH = Optokoppler EIN, PIO nach GND
VXR-9000 PIO-1 → „AUSSEN“ D3 26 HIGH = Optokoppler EIN, PIO nach GND
VXR-9000 PIO-3 → „DB0SL“ D4 27 HIGH = Optokoppler EIN, PIO nach GND

Die gewählten GPIO sind herausgeführt und keine Boot-Strapping- oder Flash-Pins. I²C (GPIO 21/22) und SPI (GPIO 5/18/19/23) bleiben frei. Die Board-Pins DI und LRCK sind für I²S beschriftet und werden hier als normale digitale Eingänge genutzt. Die drei Eingänge verwenden INPUT_PULLUP.

Das Optokopplerboard muss auf der ESP32-Seite den jeweiligen Eingang bei aktivem Signal gegen ESP32-GND ziehen; im Ruhezustand muss der Ausgang offen sein. Bei langen Leitungen oder störender Umgebung sind zusätzliche Pull-ups (z. B. 10 kΩ nach 3,3 V) und Entstörung sinnvoll. Auf keinen ESP32-GPIO dürfen 5 V gelangen. Die potentialfreien Türkontakte benötigen auf der Eingangsseite des Optokopplers eine geeignete Stromversorgung und Vorwiderstände entsprechend dem verwendeten Board.

Die Ausgangsseite der drei PIO-Optokoppler schaltet jeweils nur den PIO-Eingang gegen VXR-GND; die Optokoppler trennen ESP32- und VXR-Seite galvanisch. Je ein 10-kΩ-Pulldown an GPIO 25/26/27 hält die Optokoppler während Reset und Boot sicher ausgeschaltet.

Belegung am VXR-9000 (DB-25): PIO-1 („AUSSEN“) liegt auf Pin 18, PIO-2 („INNEN“) auf Pin 17 und PIO-3 („DB0SL“) auf Pin 16. TX_ATT liegt auf Pin 5. Die drei PIO müssen am Funkgerät als Eingänge für die passenden CW-Nachrichten konfiguriert sein.

Die FireBeetle-GPIO-Zuordnung stammt aus dem DFRobot-Datenblatt.

Verhalten

Konfiguration und Bedienung

  1. In include/config.h das WLAN-Passwort bei WIFI_PASSWORD eintragen. WIFI_SSID ist bereits DB0SL-Wlan, MQTT_HOST ist 192.168.144.21. Der lokale Broker verwendet keine Anmeldung; MQTT_USER und MQTT_PASSWORD bleiben leer. DOOR_REPEAT_INTERVAL_MS, RELAY_ID_INTERVAL_MS und MQTT_STATUS_INTERVAL_MS können dort angepasst werden; alle Werte sind in Millisekunden. include/config.h wird durch .gitignore nicht eingecheckt.
  2. Mit ./build.sh build kompilieren und linken. Solange das WLAN-Passwort leer ist, wird bei einem geschützten WLAN keine Verbindung aufgebaut.
  3. Mit ./build.sh all bauen, auf den FireBeetle flashen und anschließend den seriellen Monitor mit 115200 Baud öffnen. Bei mehreren USB-Seriell-Adaptern: PORT=/dev/ttyUSB0 ./build.sh all.

Voraussetzung: PlatformIO CLI (pio) im PATH. Ohne angeschlossenes Board kann der Upload und Monitor nicht geprüft werden. Der MQTT-Broker verwendet hier unverschlüsseltes MQTT über TCP (Vorgabe Port 1883); er sollte im vertrauenswürdigen Netz stehen.