Der Picoclick C3 von @maker.moekoe ist ein simpler kleiner Button, den man mit C++ programmieren kann. Er basiert auf einem ESP32-C3, hat WLAN an Board und einen sehr niedrigen Stromverbrauch. Somit ist der Picoclick C3 perfekt geeignet, um ihn in einer IoT-Umgebung einzusetzen. Wir wollen in diesem Tutorial per Klick eine http-Abfrage an unser System stellen und die Batteriewerte auf dem anschließbaren 0,49 Zoll OLED Display ausgeben lassen.
Zur Programmierung verwenden wir Visual Studio Code mit der Erweiterung PlatformIO. PlatformIO benötigen wir, damit wir Arduino Code in VSC kompilieren können. Warum benutzen wir nicht einfach die Arduino IDE? PlatformIO ist schneller, VSC ist übersichtlicher und bietet deutlich mehr Möglichkeiten, besonders wenn es dann mal an größere Projekte geht, in denen man zum Beispiel header files für generelle Konfigurationen benutzen möchte.
Nachdem wir also VSC installiert haben, ist der nächste Schritt, PlatformIO zu installieren. Dafür klicken wir in der linken Seitenleiste auf "Extensions", suchen nach PLatformIO und installieren es.
Dann erstellen wir uns unseren Projektordner irgendwo auf der Festplatte, dort wird gleich der Beispielcode von Github gespeichert. Das geht entweder mit git über die Konsole (setzt voraus, dass git installiert ist), oder aber man speichert sich das Github Repository manuell. Dafür klickt man auf den grünen "Code"-Button und kann sich das ganze dann als ZIP Datei herunterladen.
Der befehl für die Konsole mit git wäre:
git clone https://github.com/makermoekoe/Picoclick-C3 c:\Pfad\zum\Zielordner
Wir wollen den Beispielcode für das OLED-Display in unserer Programmierumgebung öffnen. In Visual Studio Code sehen wir jetzt links in der Leiste, in der auch der Extensions Button ist, ganz unten einen neuen Button für PlatformIO. Dort öffnen wir jetzt das soeben heruntergeladenen Projekt.
Konkret wollen wir das Projekt PC3_Hardwaretest_OLED_049 des Repositorys, es befindet sich im Ordner code/Picoclick_C3/.
Dieses Beispielprojekt ist speziell für das angeschlossene OLED Display. Mit einem Klick auf den Button werden die LEDs blau und signalisieren den angeschalteten Zustand, gleichzeitig erscheint ein Lauftext auf dem Display. Ein weiterer Klick schickt den Picoclick in den Deep Sleep Modus.
Ab jetzt arbeiten wir in der Datei main.cpp.
Wir werden diesen Code nun etwas erweitern, indem wir die Library HTTPClient.h einbinden, um unsere http Abfrage vornehmen zu können.
#include <HTTPClient.h>
Dann fügen wir gleiche ganz oben unsere Variablen ein, damit der Picoclick sich mit dem WLAN des Raspberrys verbinden kann
Die Funktion void setup() wird als erstes gestartet, wenn das ESP angeschaltet wird, hier verbinden wir uns zum WLAN mit folgendem Code:
Gleichzeitig wird hier bereits der http Endpunkt angesprochen und wir erhalten eine Antwort mit den Batteriewerten. Diese Antwort speichern wir in der Variable payload, um sie danach auf dem Display ausgeben zu können.
Etwas weiter unten, in Zeile 108 (kompletter Code im Anhang) berechnen wir die Breite der Pixel, die benötigt werden, um den Text anzeigen zu können, mit.
Im Grunde war es das auch schon mit den Anpassungen. Zum jetzigen Zeitpunkt wacht der Picoclick mit dem ersten Klick auch und fragt den http Endpunkt an, erhält eine Antwort und lässt diese über das Display laufen.
Wir fügen ganz unten im Code noch die Funktion "esp_deep_sleep_start();" ein, und zwar an der Stelle, bevor der Lauftext wieder von vorne angefangen wird.
Damit wird die Antwort der Abfrage einmal angezeigt und danach geht der Picoclick wieder in den Deep Sleep Modus.
Beachtet aber, dass der Picoclick an sein muss, um den Code neu flashen zu können. Schicken wir ihn also sofort wieder in den Deep Sleep Modus, könnte es schwierig werden. Deswegen schreiben wir direkt davor einfach noch ein "delay(2000);", damit werden erst 2 Sekunden abgewartet (nachdem der Text durchgelaufen ist), bevor der Pico sich wieder schlafen legt und wir haben genug Zeit einen Flashvorgang zu starten.
Jetzt müssen wir das Ganze noch kompilieren und auf den Pico hochladen, das machen wir über die Buttons, die PlatformIO uns ganz links unten zur Verfügung stellt:
Der Haken kompiliert den Code und gibt eventuelle Fehlermeldungen aus, der Pfeil nach rechts kompiliert zuerst den Code und lädt ihn anschließend auf den Picoclick.
Tipps und Tricks:
Man kann jeden Endpunkt der HTTP-API ansprechen, also können wir auch Relays schalten etc. Zu beachten ist, dass bei einer "http.PUT("");" Funktion eine Payload mit übergeben werden muss. Da unsere Api aber keine Payload erwartet, senden wir einfach eine leere Payload mit den Anführungszeichen in der Klammer.
Natürlich lässt sich der Code noch beliebig erweitern, man könnte z.B. mehrere Anfragen stellen und die Antworten kombinieren.
Falls ihr euch fragt, ob die Abfrage wirklich so schnell vonstattengeht nachdem man den Knopf gedrückt hat und nicht irgendwelche alten gespeicherten Werte angezeigt werden: Hängt mal an den http Endpunkt eine Debug Node, dann seht ihr, dass wirklich jedes Mal eine Anfrage durchgeht.
API REQUEST IM VIDEO:
https://youtube.com/shorts/JxrJnkMEU04
Weitere Links:
https://makermoekoe.gitbook.io/picoclick-c3/
https://randomnerdtutorials.com/vs-code-platformio-ide-esp32-esp8266-arduino/#2
https://devdrik.de/arduino-in-vs-code/
PC3_Hardwaretest_OLED_049-main.cpp txt-Datei:
https://share.12-s.de/s/tMeWqXWozqBZPk9