← Zur Übersicht

🛠️ Entwicklung & Aufbau

Ein neutraler, technischer Überblick, wie die Steuerung der Cocktailmaschine aufgebaut ist.

Die Firmware läuft auf einem ESP32 und ist in Rust geschrieben (auf Basis des ESP-IDF-Frameworks, also mit Standardbibliothek). Sie erfüllt gleichzeitig zwei sehr unterschiedliche Aufgaben: eine Weboberfläche ausliefern und die Schrittmotoren präzise takten. Damit sich beides nicht gegenseitig stört, sind die Aufgaben auf die zwei Prozessorkerne des ESP32 verteilt.

Architektur auf einen Blick

📱 Browser Handy / Tablet / PC WLAN (HTTP) ESP32 Kern 0 WLAN + Webserver liefert die Web-App aus, nimmt HTTP-Befehle entgegen Kern 1 Motorsteuerung erzeugt die Schritt-Impulse, Sicherheitslogik, Pumpe Befehle ▸ ◂ Status

Kern 0 kümmert sich um WLAN und Webserver, Kern 1 ausschließlich um die Motoren. So bleiben die Schritt-Impulse gleichmäßig getaktet, selbst wenn gerade jemand die Weboberfläche lädt.

Wie die beiden Kerne miteinander reden

Der Webserver und die Motorsteuerung teilen keinen direkten Speicher, sondern kommunizieren über zwei klar getrennte Wege:

Die Weboberfläche

Die komplette Oberfläche ist eine einzelne HTML-Datei mit eingebettetem CSS und JavaScript. Sie wird beim Kompilieren fest in die Firmware eingebacken (include_str!) und beim Aufruf von / ausgeliefert – es gibt also keinen separaten Webspace und keine Build-Pipeline fürs Frontend. Das JavaScript spricht ausschließlich die kleine HTTP-Schnittstelle der Firmware an, z. B.:

GET /status GET /dispense?drink=N GET /home GET /moveto GET /estop POST /api/settings POST /api/drinks POST /script

Konfiguration & Speicherung

Alles, was eingelernt wird – Slot-Positionen, Höhen, Zeiten und die Getränke – wird als JSON serialisiert (mit serde) und im NVS-Flash des ESP32 abgelegt. Es übersteht damit Stromausfall und Neustart und ist von jedem Gerät im WLAN identisch. Empfangene Werte werden vor dem Speichern gegen feste Grenzen geprüft und begrenzt, damit keine fehlerhafte Eingabe gefährliche Zustände erzeugt.

Vom Rezept zur Bewegung

Ein Getränk ist eine Liste von Schritten „Slot × Portionen". Beim Auslösen erzeugt die Firmware daraus eine konkrete Befehlsfolge für die beiden Achsen – sinngemäß:

(falls nötig) Z referenzieren → X referenzieren →
für jede Zutat: X zum Slot → Sync → pro Portion: Z hoch, halten, kurzer Rückhub (bzw. Pumpe an) → Sync
am Ende: Z herunter → Referenzfahrt → (optional Ausgabeposition).

Die Sync-Punkte sorgen dafür, dass die Achsen an den richtigen Stellen aufeinander warten – etwa, dass nie dosiert wird, während der Schlitten noch fährt.

Eingebaute Sicherheit

Technik-Stack

Rust (Edition 2021) ESP-IDF (std) esp-idf-svc embedded-svc serde / serde_json anyhow HTML / CSS / Vanilla-JS

Projektstruktur

DateiAufgabe
src/main.rsStart, WLAN, Webserver mit allen Endpunkten, Pin-Zuordnung, Konfiguration laden
src/servo.rsMotorsteuerung: Schritt-Impulse, Zustandsmaschine, Sicherheitslogik, Pumpe
src/settings.rsDatenmodell der Konfiguration und der Bauplan „Rezept → Befehlsfolge"
src/config.rsZentrale Grenzen: Verfahrwege, Tempo-Limits, Rezept-Limits
src/servo-control-migrated.htmlDie eingebettete Weboberfläche
Dieser Überblick beschreibt den Aufbau der Software neutral und ohne Anspruch auf Vollständigkeit. Die Cocktailmaschine ist ein Hobby-Projekt und wird ohne Gewährleistung bereitgestellt.
Zur Startseite · Impressum · Datenschutz