Inhalt
Arduino Sketch Entwicklung mit ChatGP
Vorausgeschickt sei, dass ich ChatGPT zu 96,37% für technische Fragestellungen verwende. So hat ChatGPT mir bei Linux Problemen geholfen, auch kleinere Python Routinen verschönert, Javascript Rechenformeln erstellt und so weiter.
Fragen, das tägliche Dasein betreffend, habe ich wenig gestellt und wenn, dann meist nur, weil irgendwelche Unklarheiten bei Diskussionen oder Unterhaltungen aufkamen.
Arduino bzw. das C++ dahinter bereitet mir Kopfschmerzen. Extrem pingelig bei Variablendeklarationen und Strings, dazu Libraries in unterschiedlichen inkompatiblen Versionen etc. Da hilft dir ChatGPT, dachte ich mir.
Das Projekt
Mein letztes Projekt war, aus in der Bastelkiste gefundenen ESP32-Cam Modulen eine Webcam zu bauen, die alle halbe Stunde ein Foto macht und auf einen FTP Server hochlädt.
Frage an ChatGPT war also:
<<ich habe ein esp32-cam board und möchte eine kamera bauen, die alle x minuten ein foto macht und an einen ftp server schickt>>
ChatGPT antwortet in gewohnt freundlicher, fast euphorischer Manier:
Perfekt – das ist ein sehr häufiges Projekt für das ESP32-CAM, und lässt sich gut umsetzen. Ich kann dir dafür eine komplette, funktionierende Firmware in Arduino-C++ schreiben.
Wir werden später noch feststellen, dass ChatGPT einige Dale Carnegie Seminare („Wie man Freunde gewinnt“) besucht – bzw. verarbeitet – hat. Immer freundlich, geduldig erklärend. So entspannt sich ein (fast) menschlicher Dialog. Ein Mensch würde irgendwann einmal ungeduldig werden, C. bleibt immer hilfsbereit und hält aufmunternde Worte für einen bereit.
Manchmal auch zu hilfsbereit. Als User kommt man dann schnell in einen Modus, ChatGPT die ganze Arbeit machen zu lassen und selbst weniger oder gar nicht mehr zu hirnen.
Nicht im Kontext
Dabei entstehen unweigerlich Probleme: ChatGPT denkt nur wenig im Kontext.
Beispiel: Ich habe ein Stück Code geschrieben und zu GPT hochgeladen. Der Code enthält ein paar, jetzt auch Chat GPT bekannte Zusatzfunktionen (z.B. Kamerachip vorwärmen, Datum auswerten), die mit dem eigentlichen Problem wenig zu tun haben. Gemeinsam werden Änderungen erarbeitet und ChatGPT macht sein typisches Angebot: “Wenn du möchtest, kann ich dir den vollständigen Sketch mit dem neuen Block integriert schicken, damit du ihn einfach kopieren kannst – möchtest du das?
Das kann gewaltig schief gehen. Der Code ist hinterher gelegentlich komplett anders, als der, an dem ich gerade gearbeitet habe. Code Teile sind plötzlich verschwunden, stattdessen sind auf einmal neue Libraries eingebunden, die nicht gebraucht werden.
Ich frage nach, warum es sowas getan hat, die Antwort lautet sinngemäß: „ich habe gerade mehrere ESP32 Diskussionen am Laufen, da muss sich irgendetwas überschnitten haben“
Auch beim Einfügen von kleineren, vom System erstellten Codeblöcken ist Vorsicht geboten. ChatGPT erfindet neue Variable, die natürlich vorher nicht deklariert wurden und so den Compiler zum Meckern bringen.
Merke: Was ChatGPT einem liefert, sollte immer „cum grano salis“ genommen werden. Hirn einschalten und ggf. selbst recherchieren.
Vergesslich
Getreu der Devise „was geht mich mein Geschwätz von gestern an“ ist Chat GPT sehr vergesslich. Hat man zusammen mit dem System über mehrere Tage an einem ESP32 Sketch gearbeitet, muss ich es explizit an das erinnern, was vorher getan wurde. Wurde ein einigermaßen funktionierender Stand erarbeitet, sollte man ChatGPT bitten, sich diesen zu merken. <<bitte merke dir diesen Code für das nächste mal>>.
Guter Ratschlag, schlecht umgesetzt
Immerhin, auf die Frage, wie das Arduino IDE beschleuniget werden könne, empfiehlt Chat GPT, es doch einmal mit PlatformIO auf Basis von Visual Code zu probieren.
Hier ist, wie üblich, aller Anfang schwer und Chat GPT erklärt geduldig, wie ein Projekt aufsetzt und migriert wird. Doch irgendwann kommt man an einen Punkt, wo die Erklärung mit der Wirklichkeit nicht mehr korrespondiert. Nach einem längeren Frage- und Antwort Pingpong – Chat GPT muss ja verbal erklären, was der Benutzer vermeintlich vor Augen hat – stellt sich heraus, dass die bisherigen Erklärungen für eine veraltete Version von PlatformIO gelten. „Ach ja richtig, dann arbeitest du wahrscheinlich mit der neuesten Version… da hat sich manches geändert. Du findest die Compile Anweisung im Statusbalken ganz unten. Es ist ein Haken.“
Warum Chat GPT nicht gleich die neueste Benutzeroberfläche erklärt, wo es doch vorher einem gesagt hat, man solle das Programm erst einmal installieren, ist mir schleierhaft. Ein Programm erstmalig zu installieren impliziert doch, dass man auch die neueste GUI vor sich hat, oder?
Die Katze beißt sich in den Schwanz
Ein anderer Sketch soll Befehle, die per MQTT empfangen wurden, auch synchron auf einer Weboberfläche darstellen – Schalter ein bzw. aus. Irgendwie klappt das nicht – die Weboberfläche reagiert nicht. So präsentiert mir Chat GPT dann einen ganzen Blumenstrauß von Möglichkeiten bzw. Hinweisen dazu, was ich (eigentlich ja Chat GPT) falsch gemacht haben könnte. Manchmal dreht sich das Hinweiskarussell sogar im Keis:
„Mach mal B und lösche Codeteil A, dann funktioniert es garantiert!“
<<geht nicht>>
„Mach mal C und ändere B folgendermaßen, dann klappt es bestimmt.“ Untermalt von verschiedenen ausführlichen Erklärungen warum es bisher nicht geklappt hat.
<<bringt nichts>>
„Mach mal ….“
Nach der xten Iteration sind wir wieder am Ausgangspunkt A angekommen, ohne dass die Weboberfläche etwas synchron mit MQTT anzeigt.
Ich selbst komme dann darauf, dass es am Refresh des Browsers liegt, den man von Hand auslösen muss. Daraufhin kommt auch ChatGPT auf die richtige Lösung, es mit AJAX etc. zu probieren. Ich habe bis dahin aber die Lust an der Problemlösung verloren…
Nicht lernfähig
Bei all diesen Dialogen ist Chat GPT immer sehr höflich, sogar enthusiastisch. Bei Vorhaltungen, sich gründlich vertan zu haben reagiert das System freundlich zerknirscht und schlägt gleich eine andere Lösung vor – ohne dass es sich seine eigenen Fehler oder das Gelernte merkt. D.h. Chat GPT tappt beim nächsten Mal wieder in dieselbe Falle wenn man selbst nicht gut aufgepasst hat und korrigierend eingreift.
Ich frage C.: <<Lernst du eigentlich etwas aus den Sachen die wir hier erarbeiten?>>
Die ehrliche Antwort: "Nein, ich arbeite auf dem Stand der Informationen, mit denen ich trainiert wurde."
Das ist einerseits schade, ein echt lernendes System wäre wesentlich nützlicher. Andererseits ist das auch gut so, da Chat GPT ja Fragen aus sämtlichen Bereichen des Universums beantwortet. Würde es sich aus der Diskussion mit Kriminellen oder Faschisten deren Aussagen aneignen, wäre das ausgesprochen gefährlich. Hierzu gab es auch schon Experimente, in denen die KI bei entsprechender (A-)Social Media Beschallung zu einem bösartigen, rassistischen Ungeheuer wurde.
Fazit
aus mehreren teils Nachmittage langen Unterhaltungen ist: Ohne Chat GPT hätte ich meine ESP Bausteine mangels tiefergehender C++ Kentnisse sicher nicht programmieren können. Andererseits ist das System eher ein „Idiot Savant“, etwas, das sich zwar in einer bestimmten Materie auskennt aber kaum über den Tellerrand hinausblickt keine Schlüsse zieht und dann anfängt, wie wild zu raten – zu halluzinieren. So dauert die SW Entwicklung lange, sehr lange – vielleicht sogar länger als wenn ich mich auf den Hosenboden gesetzt und mir die fehlenden Kenntnisse angeeignet oder selbst recherchiert hätte. Trotzdem habe ich eine Menge dabei gelernt.