Ereignishorizont
offlineLNSwitch

offlineLNSwitch

Der bitcoinSwitch der auch offline funktioniert

Der offline⚡️Switch

Der offline⚡️Switch ist ein bitcoinSwitch, basierend auf ein Mikrocontroller Board mit ESP32 und Touch Display. Durch das Touch-Display erhält man eine benutzerfreundliche Oberfläche als Schnittstelle, mit der man interagieren kann. Das besondere an diesem offline⚡️Switch ist, dass er selbst keine Internetverbindung benötigt. Der Mikrocontroller benötigt kein WLAN, bzw. keine Verbindung mit dem Internet/Server. Nur der Kunde, der den angezeigten QR-Code mit seinem Wallet scannt, der muss sich mit dem Zahlungsserver in Verbindung setzen. Nach erfolgreicher Zahlung, bekommt der Zahlende in seinem Wallet einen Link angezeigt. Folgt er diesem Link, dann öffnet sich der Browser und zeigt eine Seite mit einem "Geheimnis" in Form einer vierstelligen PIN an. Diese PIN kann er über das Touch-Display eingeben. Stimmt die PIN überein, dann schaltet der ESP32 die gewünscht Funktion bzw. das Relais. Et voilà! Dieser bitcoinSwitch kann damit überall stehen und die Voraussetzungen ist Spannungsversorgung, sonst nichts.

Demo Video
Weiteres..

Neben der "offline" Funktion ist ein weiterer Vorteil die Möglichkeit, dass Anzeigen eines individuellen QR-Codes und der Dateneingabe über das Panel. Der ESP32 muss nur einmal mit der Firmware über eine Webseite beschrieben werden, danach kann man alle weiteren Daten über das Touch-Display eingeben. Das vereinfacht die Handhabung und man ist sehr flexibel, da man keinen Computer oder Handy benötigt, um Änderungen vorzunehmen. Eine PIN für den Zugang zum Konfigurationsmenü reicht aus.

Die ganze Komponenten sind dazu noch sehr günstig, kompakt und die Software zudem kostenlos. Keine wilden Verdrahtungen zwischen ESP32, Display und Tastatur. Für unter 20 Euro hat man einen einfachen und anspruchslosen "Verkaufsautomaten", bei dem die Sats immer sicher auf dem (LNbits-)Server liegen. Die Anwendungsmöglichkeiten sind vielfältig. Überall dort, wo man mobil sein möchte oder kein ausreichend gutes Wifi/Internet hat. Auch ist man durch das Touch-Display sehr flexibel und kann die Wallet oder Produktdaten in Handumdrehen ändern.

Einen kleinen Herausforderung hat das System allerdings. Der Kunde muss etwas mit dem System interagieren und sollte dazu etwas aufgeklärt werden. Er findet dazu auf dem Display einen Info ℹ️ Button. Auf der Seite bekommt er dann eine Information über die Funktion und die Möglichkeit, dass ganze einmal testweise durchzuspielen. Er kann eine Testzahlung mit minimal möglichen Kosten durchführen. Z.B. mit 1 Cent oder 1 Sat. Der Anwender sieht zur Bestätigung den Button, der für ein paar Sekunden von orange auf grün wechselt.

Neben der kurzen Erklärung befindet sich auf der Seite Info ℹ️ auch ein QR-Code, der zu dieser Seite führt. Und damit man immer weiß, welche Version man eigentlich hat, wird noch die Firmware Version angezeigt.

Roddatenbilder der Oberfläche:

1. Die Hardware

Man benötigt ein Sunton 3.5" Smart Display, Typ ESP32-3248S035, z.B. von AliExpress. Davon gibt es derzeit zwei Versionen. Das mit "Resistive" Touch und "Capacitive" Touch Screen. Im Prinzip kann man beide verwenden, das kapazitive Touch Display ist aber etwas robuster und deswegen würde ich auch das empfehlen. Des Weiteren braucht es noch ein 5V Relais (High-Level-Triggered). Z.B. diese Bauform.

Der ESP32 selbst kann über die Micro USB (5V) Verbindung angeschlossen und versorgt werden. Das Relais kann mit dem mitgelieferten Kabel direkt verbunden werden. Üblicherweise haben die 5V Relais drei Anschlüsse: Versorgung (5V), Ground (GND) und Signal (Sig). Der Sunton ESP32 liefert zwar nur 3,3V, aber für die meisten Relais sollte das reichen. Angeschlossen wird, wie im Bild gezeigt, 3,3V (rot), GND (schwarz) und das Signal IO21 (gelb). Die blaue Leitung für IO22 bleibt hier ungenutzt.

2. Die Software

Das Flashen der Firmware könnt ihr ganz einfach über diesen Webinstaller für den offline⚡️Switch machen. Ihr könnt dort die Version aussuchen, die ihr flashen möchtet. Meistens ist es die letzte Version. Ältere oder andere Versionen können aus dem Drop-Down Menü ausgewählt werden. Die Versionsnummer setzt sich aus der "Blockzeit" (die Bitcoin Blockhöhe, als die Version erstellt wurde) und dem Anhang "c" für Capacitive oder "r" für Resistive Touch zusammen. Gefolgt von einer Bezeichnung, zur besseren Identifizierung, die extra willkürlich ist. Unten auf der Webseite des Webinstallers findet ihr auch eine Versionshistorie.

Ablauf des Flash Prozesses:

  • Öffnet die offline⚡️Switch Webinstaller Seite.
  • Verbindet den EPS32 mit eurem Computer per USB Kabel.
  • Kontrolliert die benötigte Version und wählt dann Flash.
  • Ein Verbindungsfenster wird sich öffnen, in dem ihr die COM-Schnittstelle für den ESP32 auswählen müsst und dann auf Verbinden klickt.
  • Jetzt seht ihr das Device Dashboard und wählt INSTALL OFFLINELNSWITCH.
  • Beim erstmaligen Flash-Vorgang aktiviert ihr noch Erase Device und geht dann auf NEXT.
  • Die ausgewählte Version einmal überprüfen und dann INSTALL drücken.
  • Jetzt kommt: Preparing installation… Erasing… Installing… Wrapping up… Installation complete!
  • Der ESP32 wurde mit der Firmware beschrieben und ist einsatzbereit. 🎉

Hilfe, falls es nicht geklappt hat:

  • Versucht zuerst ein Browser Refresh (F5). Oft hilft das schon, die Kommunikation neu zu initialisieren.
  • Klappt es immer noch nicht, dann verbindet den ESP32 neu und refreshed noch einmal.
  • Bleibt das Verbindungsproblem bestehen, könnte es an einem schlechten USB Kabel liegen, tauscht es!
  • Bekommt ihr die Meldung, dass die Schnittstelle bereits verwendet wird, dann habt ihr evtl. ein zweites Fenster oder ein anderes Programm geöffnet, welches die Schnittstelle schon verwendet. Schließt alle nicht benötigten Anwendungen.
  • Habt ihr immer noch Kommunikationsprobleme, dann könnte ein Treiber-Update für den Kommunikationschip CH340C notwendig sein. Folgt diesem Link für Windows oder diesen für MAC.
  • Bei Linux-Geräte, müsst ihr für die Verbindung ggf. den aktuellen Benutzer noch zur Gruppe "dialout" hinzufügen: $ sudo usermod -aG dialout $USER und $ sudo chmod 666 /dev/ttyXXXX.
  • In ganz seltenen Fällen verweigert das Betriebssystem aber auch einfach die Zusammarbeit. Dann versucht es mit einem anderen Rechner.

Noch ein Hinweis:

Nach dem klicken des Button Flash findet ihr im Device Dashboard auch die Funktion LOGS & CONSOLE. Wenn euer ESP32 korrekt verbunden ist und ihr dann einmal auf Reset drückt, dann seht ihr Rückmeldungen vom ESP32. Dort werden auch bestimmte Programmabläufe und Werte angezeigt. Es ist ganz nützlich zum debuggen, also zur Fehlersuche.

3. Das LNbits Wallet

Der offline⚡️Switch benötigt ein (online) Lightning Wallet (Server) im Hintergrund, mit dem der Kunde interagieren kann. Dafür verwenden wir LNbits. LNbits ist ein Bitcoin Lightning Wallet und Account System, mit vielen Optionen in Form von Erweiterungen, die man installieren kann. LNbits ist eine Free and Open Source Software. Jeder kann selbst einen LNbits Server aufsetzen. Allerdings ist das technisch noch recht anspruchsvoll. Die Funktionen von LNbits können aber auch jetzt schon mit den freien Demo Server legend.lnbits.com getestet werden. So verwenden wir auch in diesem Beispiel den Demo Server.

Wallet einrichten:

  • Geht auf die Seite legend.lnbits.com.
  • Wählt einen Namen für euer Wallet aus und klickt dann ADD A NEW WALLET.
  • Jetzt bitte den Webseitenlink des Wallets als Favorit im Browser abspeichern, oder besser noch, zusätzlich kopieren und als Text irgendwo sichern. Das ist euer Zugang zu dem Wallet! Es gibt kein Benutzername und Passwort oder Ähnliches. Passt also auf den Link auf.
  • Klickt auf Extensions und sucht nach "LNURLevice".
  • Aktiviert die Erweiterung mit ENABLE.
  • Jetzt findet ihr links unter Extensions LNURLDevice. Das bitte einmal anwählen.
  • Klickt auf NEW LNURLDEVICE INSTANCE, um eine Instanz für euren offline⚡️Switch anzulegen.
  • Vergebt einen Titel (der wird beim Zahlungsvorgang angezeigt). Wählt welches Wallet ihr verwenden wollt (falls ihr mehrere habt) und dann noch die Fiat Währung.
  • Die Funktion die wir brauchen, ist PoS und bereits voreingestellt.
  • Profit margin noch auf "0" setzen, damit der Zahlende keine extra Gebühren zahlen muss und drückt dann einmal CREATE LNURLDEVICE.

Jetzt seht ihr in der Zeile unter LNURLDevice, rechts neben dem Titel, die id und den key. Das sind die Wallet Daten, die ihr für den offline⚡️Switch benötigt. Hinzu kommt noch die gewählt Fiat Währung, hier z.B. "EUR" und den Host Server der euer Wallet verwaltet. Hier z.B. "legend.lnbits.com" für den LNbits Host. Jetzt seid ihr bereit für die Parametrierung des ESP32. ⚙️

4. Den offline⚡️Switch einrichten

Für die Eingabe der Daten braucht es auf grund der Größe des Panels, etwas Fingerspitzengefühl, ist aber ansonsten sehr einfach.

Schließt euren offline⚡️Switch an eine Spannungsversorgung an und folgt dieser Anleitung:

  • Wählt unten links das Zahnradsymbol ⚙️ Die Standard PIN lautet 123456.
  • Auf der Seite Setup up config gebt ihr die Daten zum Wallet ein:
  • LNbitsHost = z.B. legend.lnbits.com
  • DeviceID = z.B. 7vDYV
  • DeviceKey = z.B. 3v9i65KL36yhtw2xCNwD8k
  • Currency = z.B. 0.21 (Achtung: Punkt als Dezimaltrennzeichen)
  • Eine persönliche ConfigPIN könnt ihr hier auch einstellen.
  • Unter Set up Switch könnt ihr das Produkt und das Relais einrichten:
  • Name = Produkt Name, wird beim QR-Code angezeigt
  • Price = Preis des Produkts
  • Time = Zeit in ms, die das Relais schalten soll. Z.B. 3000
  • GPIO = Ausgang der angesteuert werden soll. Standard: 21
  • Dann gibt es noch den Schalter Toggle Switch. Der kann dazu verwendet werden, das Relais manuell anzusteuern oder das Signal zu invertieren.
  • Zurück zum Config Menü mit dem Button Config
  • Prüft die Einstellungen einmal und wählt dann Save+Exit

Fertig ist der offline⚡️Switch, er ist jetzt einsatzbereit. 🔥⚙️

5. Kompatible Wallets

Alle Lightning⚡️Wallets, die LUD-09 der LNURL-Spezifikation verwenden unterstützen auch die Funktion, nach der Zahlung einen Text/Link anzuzeigen. Das ist mittlerweile die überwiegende Mehrheit.

Eine Übersicht der getesteten Wallets:

BitBanana / Blixt / Breez / LNbits / LightningTipBot / Phoenix / Wallet of Satoshi / Zeus / BlueWallet mit Alby LNDHub

Wo es bekanntlich noch nicht geht: Blink -> Feature Request #2660 eröffnet

Bei Einigen wird der Link sehr gut angezeigt und bei Anderen kann er auch etwas versteckt sein. Bei den Wallets Breez, Blixt, BlueWallet/Alby, LNbits, LightningTipBot, Phoenix und WoS besteht die Möglichkeit, sich den Link im Nachhinein anzeigen zu lassen. Bei den Wallets BitBanana und Zeus leider noch nicht, aber dafür gibt es ja Github Issues und Feature Requests. 😉

6. Anhang

Die hier gezeigte Option (Webinstaller), zum Beschreiben des ESP32, ist eine Möglichkeit die sehr benutzerfreundlich ist. Die Software ist allerdings FOSS, also Free and Open Source Software. Deshalb besteht für den "versierten" Anwender auch die Möglichkeit die Software vorher zu prüfen. Ganz nach dem Motto: Don’t trust, verify.

Das ganze Projekt ist auf Github verfügbar. Ihr könnt es kopieren, editieren oder was auch immer. Als Entwicklungsumgebung (Integrated Development Environment) würde ich PlatformIO auf VSCode empfehlen. Als grafische Benutzerschnittstelle wurde LVGL (Light and Versatile Embedded Graphics Library) verwendet und zum größten Teil durch die Anwendung SquareLine Studio erstellt.

Noch zu erwähnen sind zwei großartige Projekte, die mir maßgeblich zu der Idee verholfen haben und von denen ich Teile für diese Projekt verwendet habe. Das ist zum einen der BliksemBier von Pieter und der bitcoinVend von Ben Arc. 🙏 Ohne die gäbe es den offline⚡️Switch jetzt noch nicht.


Falls dir der Artikel gefallen hat, freue ich ich über eine Nachricht. 📨
Meine⚡️Lightning Adresse: axelhamburch@ereignishorizont.xyz

Tipp: Mit dem LightningTipBot geht das übrigens auch.
Syntax: /send <Betrag> <LightningAdresse> <Nachricht>


Erstellt mit Liebe 🧡 Seit 808011 / 809040/p>

– Lightning ⚡ (er)leben –