Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Einleitung

Der ESP32 lässt sich in der Programmiersprache C++ ähnlich wie ein Arduino programmieren. Die Sprache kann zwar etwas schwieriger als Python sein, ist dafür aber deutlich schneller in der Ausführung. Und sie wird kompiliert, wodurch sich vor der Ausführung die meisten Fehler vermeiden lassen.

Platformio

In diesem Beispielprojekt verwenden wir zur Programmierung das Werkzeug Platformio. Dieses ermöglicht die Beschreibung des Mikrocontrollerprojektes durch die Datei platformio.ini. Hier werden festgelegt, welcher Mikrocontroller programmiert werden soll, welches Entwicklungsboard man hat, wie geflasht wird und welche Bibliotheken man verwendet.

Z.B.:

[env:azesp32]platform = espressif32 ;ESP32 Mikrocontrollerboard = az-delivery-devkit-v4 ;az-delivery-Board mit den entsprechenden Pins und Bezeichnungenframework = arduino ;Arduino-Framework verwenden (setup(), loop(), digitalWrite(), ...)monitor_speed = 115200 ;Baudrate für serielle Konsolelib_deps = adafruit/Adafruit NeoPixel@^1.10.4 ;Verwendung der Adafruit NeoPixel Bibliothek

Das Projekt lässt sich nun durch den Aufruf

pio run -e azesp32 -t upload -t monitor

kompilieren, aus den Mikrocontroller flashen und danach per seriellem Monitor die Ausgaben ansehen.

Beispielprogramme

Hello world

Dieses Programm gibt jede Sekunde die Anzahl Sekunden seit dem Start auf der seriellen Konsole aus. Flashen mit

pio run -e hello_world -t upload -t monitor

Code:

#include<Arduino.h>voidsetup() {
Serial.begin(115200);
}
voidloop() {
Serial.print("Hello world ");
Serial.println(millis()/1000.);
delay(1000);
}

Anschalten einer LED

Flashen mit

pio run -e led_an -t upload

Code:

#include<Adafruit_NeoPixel.h>
Adafruit_NeoPixel np{10, 4};
voidsetup()
{
np.begin();
np.setPixelColor(1, 20, 30, 0);
np.show();
}
voidloop()
{
}

LED Lauflicht

Flashen mit

pio run -e led_lauflicht -t upload

Code:

#include<Adafruit_NeoPixel.h>
Adafruit_NeoPixel np{10, 4};
int iLed = 0;
voidsetup()
{
np.begin();
}
voidloop()
{
for (int iLed = 0; iLed < np.numPixels(); ++iLed)
{
np.clear();
np.setPixelColor(iLed, 20, 30, 0);
np.show();
delay(50);
}
}

LED API

Dieses Programm verbindet sich mit dem WLAN und lässt den LED-Streifen per HTTP-API steuern. Beispielaufruf Abruf des LED Zustands:

> curl http://IP-Adresse/leds
[{"r":0,"g":0,"b":0},{"r":0,"g":0,"b":0},{"r":0,"g":0,"b":0},{"r":0,"g":0,"b":0},{"r":0,"g":0,"b":0},{"r":0,"g":0,"b":0},{"r":0,"g":0,"b":0},{"r":0,"g":0,"b":0},{"r":0,"g":0,"b":0},{"r":0,"g":0,"b":0}]

Beispielaufruf Anschalten der ersten beiden LEDs:

> curl -X POST http://IP-Adresse/leds -H 'Content-Type: application/json' -d '[{"r":0,"g":50,"b":10},{"r":30,"g":30,"b":10}]'

Flashen mit

pio run -e led_api -t upload -t monitor

Code:

#include<Adafruit_NeoPixel.h>
#include<Arduino.h>
#include<ArduinoJson.h>
#include<AsyncJson.h>
#include<AsyncTCP.h>
#include<ESPAsyncWebServer.h>
#include<WiFi.h>
AsyncWebServer server{80};
Adafruit_NeoPixel np{10, 4};
constchar *ssid = "MY_SSID";
constchar *password = "MY_PASSWORD";
voidsetup()
{
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
if (WiFi.waitForConnectResult() != WL_CONNECTED)
{
Serial.printf("WiFi Failed!\n");
return;
}
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
// Send a GET request to <IP>/get?message=<message>
server.on("/leds", HTTP_GET, [](AsyncWebServerRequest *request) {
AsyncJsonResponse *response = newAsyncJsonResponse(true);
response->addHeader("Server", "ESP Async Web Server");
auto root = response->getRoot().as<JsonArray>();
for (int iLed = 0; iLed < np.numPixels(); ++iLed)
{
auto color = np.getPixelColor(iLed);
root[iLed]["r"] = (color >> 16) & 0xFF;
root[iLed]["g"] = (color >> 8) & 0xFF;
root[iLed]["b"] = (color >> 0) & 0xFF;
}
response->setLength();
request->send(response);
});
auto postLedsHandler =
newAsyncCallbackJsonWebHandler("/leds", [](AsyncWebServerRequest *request, JsonVariant &json) {
auto root = json.as<JsonArray>();
for (int iLed = 0; iLed < np.numPixels(); ++iLed)
{
if (iLed < root.size())
{
auto led = root[iLed];
np.setPixelColor(iLed, led["r"], led["g"], led["b"]);
}
}
np.show();
request->send(200);
});
postLedsHandler->setMethod(HTTP_POST);
server.addHandler(postLedsHandler);
server.begin();
np.begin();
}
voidloop()
{
}

Hackertyper

Flashen mit

pio run -e hackertyper -t upload -t monitor

Rick Pairy

Download von rick.mp3 nach data/rick.mp3

Flashen mit

pio run -e rick-pairy -t uploadfs
pio run -e rick-pairy -t upload -t monitor

About

C++ Beispiele für den ESP32

Resources

Stars

0 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages