Mit KI zur Remote–Antennenumschaltung

Für meine Remotelösung im Shack setze ich autarke Controller ein, die keinen PC vor Ort benötigen, sondern direkt über Internet gesteuert werden. Da ich mit der Ethernetverdrahtung in der Vergangenheit Einstrahlprobleme hatte, habe ich inzwischen auf WLAN-Kommunikation im Shack umgestellt. Als Mikrocontroller bietet sich z.B. der ESP32 von Espressif an, der alles an Board hat, und der aufgelötet auf PCBs sehr günstig zu bekommen ist. Die Programmierung z.B. über die Arduino IDE ist recht einfach und im Internet gibt es Bibliotheken für alle (un)möglichen Interfacebausteine. Diese Controller befinden sich in meinen Interfaces für die Rotoren und Antennenumschalter.
Vor einiger Zeit hatte ich mir in China ein Board [1] bestellt, das neben dem ESP32 noch 8 Relais enthält, so dass für die Fernsteuerung eines 8-fach-Antennenumschalters nur noch die Versorgungsspannung anzuschließen ist und weiterer Verdrahtungsaufwand entfällt. Zum Preis von ca. 10€ ist das niemals selbst zu bauen ganz abgesehen vom zeitlichen Aufwand.
Das Board lag einige Zeit bei mir herum. Ich hatte schließlich eine funktionierende Lösung. Dann kam Michael, DJ0MDR mit der Idee, seine Station fernzusteuern. Im Gegensatz zu meinem bisherigen Schalter, der kommuniziert über MQTT mit einem Webserver, wollte ich, dass der Controller auch direkt über ein Web-Interface ansprechbar sein sollte. Knackpunkt war, dass ich nicht wusste, wie ich innerhalb des Controller-Programms den Status der Webseite abfragen konnte. Zwar fand ich im Internet einige Beispiele dazu, wobei ich aber nicht so recht verstand, wie das Ganze funktioniert. So lag das Projekt auf Eis, bis ich im Urlaub – dem schlechten Wetter sei Dank – den Artikel in der Dezember CQ-DL zum Thema Programmierung mit KI [2] las. Ich hatte zwar schon etwas über Software-Entwicklung mit KI gehört, mich aber nicht weiter mit dem Thema beschäftigt. Es reifte der Gedanke, doch die KI zu bitten, die nötige SW für den Antennenschalter zu schreiben.
Mir schwebte dabei folgendes vor (Sorry, jetzt wird es fachchinesisch…):
Die SW soll in C++ auf einem ESP-Controller laufen, die Steuerung soll über eine Webseite erfolgen, auf der es 8 Buttons für 8 Antennen gibt. Die Webseite soll der Übersichtlichkeit halber getrennt in einem Filesystem im Flash-Speicher des Controllers abgelegt werden. Der Controller soll über WiFi ins häusliche LAN eingebunden sein. Außerdem soll der Controller den Zustand der Antennen via MQTT-Protokoll an einen Server weitermelden. Des Weiteren soll die Temperatur über einen DS18B20-Temperatursensor gemessen und auf der Webseite angezeigt werden. Nicht, dass ich das unbedingt gebraucht hätte, aber ich wollte die KI ja etwas herausfordern!
Im CQ-DL–Artikel stand, dass der KI klare Anweisungen zu geben sind, um zu bekommen, was man verlangt. Aus diesem Grunde habe ich erst einmal in einem Texteditor einen Text aufgesetzt, korrigiert und strukturiert, bis ich mit den Anweisungen zufrieden war. Hier der Text:
Create code in C++ for ESP32 wroom32 for the Arduino framework. Use Arduino code style. Comment code in English. Create code for an asynchronuous web server, which connects via WiFi. The name of the code project is remote_ctl. The web server contents a web site with 8 radio buttons and a displayed temperature in °C.
When a radio button is pressed by the user a specific GPIO pin of the ESP32 should be set to high and the GPIO pins for the other radio buttons should be set to low.
The radio buttons assignment is the following:
radio button 1: GPIO pin: GPIO13, Name auf webseite: Antenne 1, MQTT-Message: 01
radio button 2: GPIO pin: GPIO12, Name auf webseite: Antenne 2, MQTT-Message: 02
radio button 3: GPIO pin: GPIO14, Name auf webseite: Antenne 3, MQTT-Message: 03
radio button 4: GPIO pin: GPIO27, Name auf webseite: Antenne 4, MQTT-Message: 04
radio button 5: GPIO pin: GPIO26, Name auf webseite: Antenne 5, MQTT-Message: 05
radio button 6: GPIO pin: GPIO25, Name auf webseite: Antenne 6, MQTT-Message: 06
radio button 7: GPIO pin: GPIO33, Name auf webseite: Antenne 7, MQTT-Message: 07
radio button 8: GPIO pin: GPIO32, Name auf webseite: Antenne 8, MQTT-Message: 08
Every 30 seconds the software should read a DS18B20 temperature sensor which is connected to GPIO02 and display it on the web site. The web site is stored as html file in the flash of the ESP32 in the littlefs.
Each activation of a radio button shall be published to the topic /REMOTESW/ANTENNA on an MQTT broker with the address 192.168.20.31:1883. User name is dl2nbu and there is no password.
Nach der Registrierung bei ChatGPT (https://chatgpt.com/g/g-kLwmWO80d-world-class-software-engineer) wurde ich freundlich begrüßt. Dann habe ich meine Text-Anweisungen hinter die Eingabeaufforderung (Prompt) hineinkopiert. Nach einigen Sekunden ist dann der Source-Code über den Bildschirm geflattert. Es kamen die Hinweise, dass ich in den Source-Code noch die WLAN SSID und Password eintragen müsse und dass die SW die Webseite in der Datei „index.html“ erwarte. Das musste ich noch auf das Filesystem hochladen. Erst später bemerkte ich, dass ich die Anweisungen halb in Englisch und halb in Deutsch formuliert habe. Interessanterweise wurde das klaglos, aber richtig verarbeitet.
Eine erste Durchsicht des Source-Codes ließ den Schluss zu, dass die KI verstanden hat, was ich wollte. Nach dem Herunterladen des Source-Codes wollte ich das „index.html“-file natürlich nicht selbst schreiben, sondern habe die KI mit „please create index.html for project“ dazu aufgefordert, mir das passende HTML-File zu erzeugen und kurze Zeit später rauschte der html-Source-Code über den Bildschirm. Den habe ich dann im Browser nach dem Download gleich aufgerufen und konnte ebenfalls feststellen, dass das dargestellt wurde, was ich wollte.
Soweit, so gut. Aber, wie heißt es so schön: „The proof of the pudding is in the eating”. Der Source-Code wurde in die Arduino-IDE geladen und nach Eintragen von WiFi SSID und Passwort compiliert. Da gab es dann den ersten Fehler. Die Methoden, die im Source-Code von der littlefs-Bibliothek verwendet wurden, waren dem Compiler unbekannt. Die Ursache war, dass ich die falsche Bibliothek installiert hatte, bei der die Methoden in Großbuchstaben (warum auch immer…) definiert waren. Nach Umwandlung aller Aufrufe der einen Bibliothek von Klein- in Großbuchstaben ließ sich der Code problemlos compilieren. Nach dem Hochladen der Firmware mit anschließendem Reset passierte erst einmal nichts. Der Webserver war nicht erreichbar und auch der WLAN-Router wusste nichts von dessen Existenz. Nach mehrmaligen Code-Review habe ich dann festgestellt, dass ein Tippfehler im WLAN-Passwort die Ursache war. Dann konnte ich mich auf dem Controller einloggen und über Web-Interface die Relais umschalten.
Für diejenigen, die den Antennenschalter nachbauen wollen, habe ich noch die folgenden Hinweise:
- Den überarbeiteten Sourcecode mit der dazugehörigen Datei index.html findet Ihr unten
- Das Board hat keinen USB-Anschluss. Man benötigt einen USB-Seriell-Converter [4].
Mein Fazit
Hätte ich die richtige Bibliothek installiert ‒ das nächste Mal frag‘ ich gleich die KI, welche ich nehmen soll ‒ und mich beim WLAN-Passwort nicht vertippt, dann hätte die SW auf Anhieb funktioniert. Das hat mich schwer beeindruckt! Ich hätte das sicher irgendwann auch ohne KI-Unterstützung hinbekommen, aber das hätte mich einige Abende mehr gekostet.
Kann nun jeder ohne Programmierkenntnis-se mit der KI Software schreiben?
Ich glaube eher nicht. Die Kunst liegt darin, der KI die Anweisungen so mitzuteilen, dass es idealerweise keinen Interpretationsspielraum seitens der KI gibt. Das ist sicher einfacher, wenn man schon selbst programmiert hat und die Sichtweise der anderen Seite kennt. Mit der Anweisung „Schreibe mir Software für einen 8-fach Remote-Antennenschalter“ wird das Ergebnis nicht den Wünschen entsprechen. Mein Beispiel hat gezeigt, dass, obwohl die KI alles richtig gemacht hat, noch ein paar menschliche Fehler dazu geführt haben, dass Debugging und manuelles Eingreifen nötig sind.
Kann mit der KI beliebige SW geschrieben werden?
Dazu fehlt mir die Erfahrung, um das beurteilen zu können. Ich habe diese Frage mit einem Bekannten diskutiert, der mit professioneller SW-Entwicklung zu tun hat. Seine Erfahrung ist, dass es für kleinere Projekte, für die es im Internet viele Beispiele gibt, ganz gut funktionieren kann. Wenn es dagegen komplexere Projekte sind, für die es wenig „Lernmaterial“ im Internet gibt, ist die Qualität der produzierten SW deutlich schlechter. In meinem Fall war das Projekt nicht komplex und außerdem gab es viele Code-Beispiele als Vorlage, was die Qualität sicher begünstigt hat. Das dürfte aber für viele Amateurfunk-Softwareprojekte der Fall sein, besonders für kleine Controlleranwendungen zum Thema Remote wie z.B. Rotor-Interfaces, Beverage-Fernsteuerungen usw. Ich werde jedenfalls weiter versuchen, per KI-Software zu programmieren. Das nächste Projekt ist eine Remote-Fernsteuerung für einen Mikrowellentransverter am Mast via RS-485/Modbus.
Wer nutzt KI für ähnliche Anwendungen? Mich würden Erfahrungen diesbezüglich interessieren. Bitte schreibt per E-Mail an dl2nbu@gmx.de.
Das Thema Remote-Betrieb gewinnt zunehmend an Bedeutung – Stichwort Störspektren im dichtbesiedelten Raum. Die diesjährige HAM Radio steht unter dem Motto „Remote Radio – connecting the World“. Die technische Umsetzung am Beispiel der Antennenumschaltung als zentraler Bestandteil einer Remote-Station zeigt, dass es keine unüberwindbaren Hürden beim Aufbau gibt. Per E-Mail-Reflektor wird Hilfen bekommen, wer beim Aufbau einer Remote-Station vor technischen Herausforderungen steht und nicht weiß, was zu tun ist.
Quellen
[1] Gibt es bei AliExpress, Ebay, Amazon. Nach „ESP32 relay module“ suchen. Je nach Anbieter kostet es 11-22€ inkl. Versand.
[2] Afu-Software mit KI selbst entwickeln, Dr.-Ing. Axel Richter, DM1AR, CQ-DL 12-2024.
[3] https://www.bavarian-contest-club.de/2025/05/mit-ki-zur-remote-antennenumschaltung/
[4] Gibt es bei AliExpress, Ebay, Amazon. Ich habe diesen verwendet, da er schon vorhanden war: Aideepen 3pcs Serial Adapter FT232RL USB to TTL Adapter Module for 3.3V and 5V (Amazon.de: Computer & Zubehör)
[5] https://lists.bavarian-contest-club.de/archives/bcc/
Source-Code der Remote-Antennenumschaltung: ESP32_Antenna_switch.zip
HTML-Datei des Webinterfaces: index.html