Ein WebSocket-basiertes Remote-Morse-System mit Token-Authentifizierung für sichere Verbindungen. Befindet sich noch in der Entwicklung, aber mal als Alpha Version zum Testen.
Dieses Projekt ermöglicht die Remote-Steuerung einer Morsetaste über ein Netzwerk (WiFi/Ethernet). Der Sender sendet Morse-Signale über WebSocket an einen Empfänger, der diese in Echtzeit ausgibt.
- ✅ WebSocket-Kommunikation mit niedriger Latenz (<10ms)
- ✅ Token-Authentifizierung für sichere Verbindungen
- ✅ WiFi-Konfigurationsportal für einfaches Setup
- ✅ Web-Interface für Status und Steuerung
- ✅ Straight Key & Iambic Paddle Support (Mode A & B)
- ✅ Einstellbare Geschwindigkeit (10-40 WPM) via Trimmer
- ✅ Hardware-Jumper für Moduswechsel
- ✅ Auto-Reconnect mit manueller Steuerung
Komponenten:
- LOLIN D1 Mini (ESP8266)
- Morsetaste oder Iambic Paddle
- 10kΩ Potentiometer (für WPM-Einstellung)
- Optional: Piezo-Summer für lokales Feedback
- Optional: 2x Jumper für Moduswahl
Pin-Belegung:
| Pin | Funktion | Beschreibung |
|---|---|---|
| D1 (GPIO5) | Morse Key | Normale Morsetaste |
| D2 (GPIO4) | Paddle DIT | Paddle linker Hebel (kurz) |
| D4 (GPIO2) | LED | Status-LED (invertiert) |
| D5 (GPIO14) | Paddle DAH | Paddle rechter Hebel (lang) |
| D6 (GPIO12) | Buzzer | Piezo-Summer (optional) |
| D7 (GPIO13) | Jumper A | Mode A aktivieren |
| D8 (GPIO15) | Jumper B | Mode B aktivieren |
| A0 | Trimmer | Geschwindigkeitsregelung |
Verkabelung:
Morsetaste: GPIO5 <--[Taster]--> GND
Paddle DIT: GPIO4 <--[Taster]--> GND
Paddle DAH: GPIO14 <--[Taster]--> GND
Trimmer: A0 <--[Schleifer]
3.3V <--[Pin 1]
GND <--[Pin 3]
Buzzer: GPIO12 <--[+Piezo]--> GND
Komponenten:
- WT32-ETH01 Ethernet Modul
- Ethernet-Kabel
- Ausgang: LED, Relais, oder andere Schaltung
Pin-Belegung:
| Pin | Funktion |
|---|---|
| GPIO2 | Morse-Ausgang |
| ETH | Ethernet (intern verdrahtet) |
- Arduino IDE (Version 1.8.x oder 2.x)
- ESP8266 Board Package:
- Boardverwalter-URL:
http://arduino.esp8266.com/stable/package_esp8266com_index.json - Board: "LOLIN(WEMOS) D1 R2 & mini"
- Boardverwalter-URL:
- ESP32 Board Package (für WT32-ETH01):
- Boardverwalter-URL:
https://espressif.github.io/arduino-esp32/package_esp32_index.json - Board: "ESP32 Dev Module"
- Boardverwalter-URL:
Für D1 Mini (Sender):
ESP8266WiFi(in ESP8266 Core enthalten)ESP8266WebServer(in ESP8266 Core enthalten)LittleFS(in ESP8266 Core enthalten)WebSocketsby Markus Sattler (via Library Manager)
Für WT32-ETH01 (Empfänger):
ETH(in ESP32 Core enthalten)WiFi(in ESP32 Core enthalten)WebServer(in ESP32 Core enthalten)WebSocketsby Markus Sattler (via Library Manager)
-
Code hochladen:
- Öffne
D1_Mini_Sender/D1_Mini_Sender.ino - Board: "LOLIN(WEMOS) D1 R2 & mini"
- Hochladen
- Öffne
-
Erstkonfiguration:
- D1 Mini startet als Access Point:
MorseSender-Config - Passwort:
morse123 - Verbinde dich mit dem WiFi
- Öffne Browser:
http://192.168.4.1 - Konfiguriere:
- WiFi-Netzwerk & Passwort
- WebSocket Server IP (z.B.
192.168.1.100) - WebSocket Port (Standard:
81) - Authentifizierungs-Token (ändere
morse2024!)
- Speichern → D1 Mini startet neu
- D1 Mini startet als Access Point:
-
Status-Webseite:
- Nach Neustart über
http://[D1-Mini-IP]erreichbar - Zeigt Verbindungsstatus, Modus, WPM
- Connect/Disconnect Buttons
- Link zur Konfiguration
- Nach Neustart über
-
Token anpassen:
- Öffne
WT32_Receiver/WT32_Receiver.ino - Ändere
String wsAuthToken = "morse2024";auf dein Token - Wichtig: Token muss auf Sender und Empfänger identisch sein!
- Öffne
-
Netzwerk-Einstellungen (optional):
bool useDHCP = true; // DHCP (Standard) // Oder statische IP: IPAddress local_ip(192, 168, 1, 100);
-
Code hochladen:
- Board: "ESP32 Dev Module"
- Hochladen
-
Status-Webseite:
- IP wird im Serial Monitor angezeigt
- Browser:
http://[WT32-IP] - Zeigt verbundene Clients, Nachrichten-Zähler
Hardware (Jumper):
- Kein Jumper: Straight Key (normale Morsetaste)
- GPIO13 → GND: Iambic Mode A
- GPIO15 → GND: Iambic Mode B
Software (Serial Monitor):
1= Straight Key2= Iambic Mode A3= Iambic Mode Br= Konfiguration zurücksetzen
Drehe den Trimmer am A0 für 10-40 WPM.
Via Webseite:
- Button "Verbinden" → Stellt WebSocket-Verbindung her
- Button "Trennen" → Trennt Verbindung (kein Auto-Reconnect)
Automatisch:
- Bei gespeicherter Konfiguration verbindet sich der Sender automatisch beim Start
Das System verwendet Token-basierte Authentifizierung:
- Client verbindet → Server sendet
AUTH_REQUIRED - Client sendet Token → Format:
AUTH:your_token_here - Server prüft Token:
- ✅ Korrekt →
AUTH_OK→ Verbindung erlaubt - ❌ Falsch →
AUTH_FAILED→ Verbindung getrennt
- ✅ Korrekt →
- Ändere das Standard-Token
morse2024! - WebSocket ist unverschlüsselt (kein TLS)
- Nutze nur in vertrauenswürdigen Netzwerken
- Token muss auf beiden Geräten identisch sein
- Token mindestens 8 Zeichen (empfohlen: 16+)
- Verwende ein langes, zufälliges Token
- Ändere das Token regelmäßig
- Nutze ein separates VLAN für IoT-Geräte
- Für öffentliche Netzwerke: VPN verwenden
GET / → Status-Webseite
GET /config → Konfigurations-Portal
GET /scan → WiFi-Netzwerke scannen (JSON)
POST /save → Konfiguration speichern
GET /api/status → Status abrufen (JSON)
POST /api/connect → WebSocket verbinden
POST /api/disconnect → WebSocket trennen
Status JSON Beispiel:
{
"connected": true,
"authenticated": true,
"wifi": "MyNetwork",
"server": "192.168.1.100:81",
"mode": "Paddle A",
"wpm": 25
}GET / → Status-Webseite
GET /api/status → Status abrufen (JSON)
Status JSON Beispiel:
{
"ip": "192.168.1.100",
"mac": "AA:BB:CC:DD:EE:FF",
"dhcp": true,
"totalMessages": 1234,
"lastMessage": 123456789,
"keyState": false,
"uptime": 123456789,
"clients": [
{
"ip": "192.168.1.50",
"uptime": 60000,
"connected": true
}
],
"clientCount": 1
}Nachrichten (Sender → Empfänger):
AUTH:token- AuthentifizierungDOWN- Taste gedrücktUP- Taste losgelassen
Nachrichten (Empfänger → Sender):
AUTH_REQUIRED- Authentifizierung erforderlichAUTH_OK- Authentifizierung erfolgreichAUTH_FAILED- Authentifizierung fehlgeschlagen
- ✅ WiFi-Credentials korrekt?
- ✅ Server-IP erreichbar? (ping testen)
- ✅ Token auf beiden Seiten identisch?
- ✅ Serial Monitor checken für Fehlermeldungen
- ✅ WebSocket-Server gestartet? (Check Serial Monitor)
- ✅ Firewall blockiert Port 81?
- ✅ Client authentifiziert? (Check Status-Webseite)
- ✅ Pins korrekt verdrahtet?
- ✅ Taster zwischen Pin und GND?
- ✅ Pull-up aktiviert? (im Code standard)
- ✅ D1 Mini LED ist invertiert (LOW = AN)
- ✅ Mit WiFi
MorseSender-Configverbunden? - ✅ IP
192.168.4.1im Browser - ✅ Passwort
morse123verwendet? - ✅ LED blinkt 3x beim Start des Config-Modus?
Für ESP8266:
- Flash Size: "4MB (FS:2MB OTA:~1019KB)" einstellen
- LittleFS formatieren:
LittleFS.format()
- Lokales Netzwerk: < 10ms
- WLAN → Ethernet: 5-15ms typisch
- Internet (mit gutem Ping): 20-100ms
- WiFi: Abhängig vom Router (typisch 20-50m indoor)
- Ethernet: Bis 100m (Cat5e/Cat6)
- D1 Mini (Sender): ~80mA @ 5V (WiFi aktiv)
- WT32-ETH01 (Empfänger): ~200mA @ 5V (Ethernet aktiv)
- OTA (Over-The-Air) Updates
- Morse-Decoder im Empfänger
- Aufnahme & Wiedergabe von Morse-Sequenzen
- TLS/SSL-Verschlüsselung
Contributions sind willkommen! Bitte:
- Fork das Repository
- Erstelle einen Feature-Branch
- Commit deine Änderungen
- Erstelle einen Pull Request
Dieses Projekt ist Open Source und steht unter der MIT-Lizenz.
- WebSockets Library by Markus Sattler
- ESP8266/ESP32 Arduino Core by Espressif
- Entwickelt für die Amateurfunk-Community
Bei Fragen oder Problemen:
- GitHub Issues erstellen
- Serial Monitor Ausgabe mitschicken
- Hardware-Setup beschreiben
73 & Happy Morsing! 📻✨