Forum: Mikrocontroller und Digitale Elektronik ESP32 Arduino Cheat Sheet (aktuell für BSP3.x)


von Bernhard S. (b_spitzer)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

für meine Schüler habe ich gerade mein Arduino Cheat Sheet für den ESP32 
/ ESP32-S3 überarbeitet. Beim ADC, Timer und LEDC sind die geänderten 
API-Funkionen vom Board Support V3.x bereits drin.
- Wer es nutzen will, viel Spass damit
- Wer Fehler findet bitte hier melden
- Wer weitere Ergänzungen wünscht - wenn es der Platz zulässt ;-)

Aus Platzgründen sind jetzt nicht sämtliche API-Funktionen erklärt. 
Seltener genutzen Kram kann man in der Espressif-API nachlesen (ist 
verlinkt).

tschuessle
Bernhard

von Alexander (alecxs)


Lesenswert?

Woher stammt die Idee? Sehr schön!

von Helmut -. (dc3yc)


Lesenswert?

Alexander schrieb:
> Woher stammt die Idee?

Wer das Cheat Sheet lesen kann, ist klar im Vorteil!

von Thomas W. (dbstw)


Lesenswert?

Sehr schoen!

Gruesse

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

PROGMEM beim ESP32?

von Udo (grindstone)


Lesenswert?

Tolle Idee! Habe ich gleich in meinen Fundus aufgenommen :-)

von Alexander (alecxs)


Lesenswert?


von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Alexander schrieb:
> warum nicht?

Weil's sinnlos ist?

Alexander schrieb:
> https://github.com/earlephilhower/ESP8266Audio/issues/643

Da wird das PROGMEM-Makro nicht genutzt. Außerdem ist das nicht für den 
ESP32.

von Bernhard S. (b_spitzer)


Lesenswert?

Niklas G. schrieb:
> PROGMEM beim ESP32?
Ja, kann man sich beim ESP sparen. Danke für den Hinweis.
Es passiert aber auch nichts "tragisches", PROGMEM wird vom Compiler 
ignoriert (aber auch nicht als const umgesetzt!).
Hab dazu mal ein mini Testprogramm geschrieben:
1
#define longstring "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird."
2
//char longstring[]= "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.";
3
//const char longstring[]= "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.";
4
//PROGMEM char longstring[]= "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.";
5
//String longstring = "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.";
6
//const char longstring[]= R"xxxxxx(das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.)xxxxxx";
7
8
void setup() {
9
  // put your setup code here, to run once:
10
  Serial.begin(115200);
11
  Serial.print(longstring);
12
}
13
14
void loop() {
15
  // put your main code here, to run repeatedly:
16
  delay(1);
17
}
Ergebnis:
#define, const char und const char mit Rawliteral ist identisch

char, PROGMEM char und char mit Rawliteral ist identisch

String ist beim RAM geringfügig kleiner, beim ROM größer
1
#define longstring "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird."
2
Sketch uses 279357 bytes (21%) of program storage space. Maximum is 1310720 bytes.
3
Global variables use 20200 bytes (6%) of dynamic memory, leaving 307480 bytes for local variables. Maximum is 327680 bytes.
4
5
const char longstring[]= "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.";
6
Sketch uses 279357 bytes (21%) of program storage space. Maximum is 1310720 bytes.
7
Global variables use 20200 bytes (6%) of dynamic memory, leaving 307480 bytes for local variables. Maximum is 327680 bytes.
8
9
const char longstring[]= R"xxxxxx(das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.)xxxxxx";
10
Sketch uses 279357 bytes (21%) of program storage space. Maximum is 1310720 bytes.
11
Global variables use 20200 bytes (6%) of dynamic memory, leaving 307480 bytes for local variables. Maximum is 327680 bytes.
12
13
14
char longstring[]= "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.";
15
Sketch uses 279373 bytes (21%) of program storage space. Maximum is 1310720 bytes.
16
Global variables use 20280 bytes (6%) of dynamic memory, leaving 307400 bytes for local variables. Maximum is 327680 bytes.
17
18
PROGMEM char longstring[]= "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.";
19
Sketch uses 279373 bytes (21%) of program storage space. Maximum is 1310720 bytes.
20
Global variables use 20280 bytes (6%) of dynamic memory, leaving 307400 bytes for local variables. Maximum is 327680 bytes.
21
22
char longstring[]= R"xxx(das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.)xxx";
23
Sketch uses 279373 bytes (21%) of program storage space. Maximum is 1310720 bytes.
24
Global variables use 20280 bytes (6%) of dynamic memory, leaving 307400 bytes for local variables. Maximum is 327680 bytes.
25
26
27
String longstring = "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.";
28
Sketch uses 279389 bytes (21%) of program storage space. Maximum is 1310720 bytes.
29
Global variables use 20216 bytes (6%) of dynamic memory, leaving 307464 bytes for local variables. Maximum is 327680 bytes.

von Alexander (alecxs)


Lesenswert?

RTC_DATA_ATTR könnte noch mit drauf. oder ist das auch sinnlos?

von Bernhard S. (b_spitzer)


Angehängte Dateien:

Lesenswert?

Kleines Update, PROGMEM gelöscht, dafür noch eine Mini-Erklärung für 
#define ergänzt.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Bernhard S. schrieb:
> dafür noch eine Mini-Erklärung für
> #define ergänzt.

Schreib da besser mal "Makro" drüber statt "Definitionen". Konstanten 
sollte man sowieso besser per "static constexpr" definieren statt mit 
#define .

"static - Variable bleibt erhalten" stimmt ja auch nur bei lokalen / 
Member-Variablen

: Bearbeitet durch User
von Bernhard S. (b_spitzer)


Lesenswert?

Alexander schrieb:
> RTC_DATA_ATTR könnte noch mit drauf. oder ist das auch sinnlos?
Das ist sehr speziell. Wenn man Wake-Up intensiv nutzt, muss man sowieso 
noch in die vollständige API reinschauen. Das hab ich nicht mal in 
meinen Beispielen drin (könnte ich vielleicht mal an der Dualen 
Hochschule nutzen).
Danke für den Hinweis.

Genauso verzichte ich bei den Schülern bei ISR auf die etwas 
performantere Version mit IRAM_ATTR... Wer mit ISRs auf Kriegsfuß steht, 
dem hilft das auch wenig weiter.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

"unsigned short 0 – 65536"  sollte wohl 65535 heißen ;-)

String str5 = "Sensor-Wert: " + analogRead( A0 );

das dürfte nicht funktionieren

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

mein Drucker kann es nicht ausdrucken, es kommt nur ein Ausschnitt raus

von Bernhard S. (b_spitzer)


Lesenswert?

Niklas G. schrieb:
> "unsigned short 0 – 65536"  sollte wohl 65535 heißen ;-)
Da schaut aber jemand ganz genau hin! Super!

> String str5 = "Sensor-Wert: " + analogRead( A0 );
> das dürfte nicht funktionieren
Ja, danke! So ist es besser...
1
  String str5 = "Sensor-Wert: " + String(analogRead( A0 )) + "\n";

von Bernhard S. (b_spitzer)


Lesenswert?

Alexander schrieb:
> mein Drucker kann es nicht ausdrucken, es kommt nur ein Ausschnitt raus
Im PDF-Reader beim Drucken auf "Skalierung auf Druckbereich" auswählen.
Das Original ist DIN-A0 (war so bei der Vorlage, muss das mal bei 
Gelegenheit wenigstens auf A3 verkleinern). Wenn ich das in LibreOffice 
als PDF konvertiere bleiben die Links klickbar, aber die Blattgröße ist 
original.
Wenn ich es in eine PDF-Datei drucke, dann ist die 20x so groß (auch 
wenn es nur A4 Format ist) und die Links sind nicht mehr anklickbar :-(

@all: das ist noch ein "Work in progress", 99% sind ok, aber es gibt 
sicher noch ein paar kleine Korrekturen ;-)

: Bearbeitet durch User
von Manfred P. (pruckelfred)


Angehängte Dateien:

Lesenswert?

Bernhard S. schrieb:
> "Work in progress"
...

von Bernhard S. (b_spitzer)


Lesenswert?

Manfred P. schrieb:
> Bernhard S. schrieb:
>> "Work in progress"
Was ist das Problem? Bei mir wird der Text vollständig angezeigt.
Welcher Browser/PDF-Reader wurde da benutzt?
Bei dir fehlt auch die Hintergrundfarbe...

: Bearbeitet durch User
von Bernhard S. (b_spitzer)


Angehängte Dateien:

Lesenswert?

So sollte das aussehen...

von Bernhard S. (b_spitzer)


Angehängte Dateien:

Lesenswert?

Letzter Stand für heute...

von Manfred P. (pruckelfred)


Lesenswert?

Bernhard S. schrieb:
> Manfred P. schrieb:
>> Bernhard S. schrieb:
>>> "Work in progress"
> Was ist das Problem? Bei mir wird der Text vollständig angezeigt.
> Welcher Browser/PDF-Reader wurde da benutzt?

Sumatra 3.1.2, Foxit Reader zeigt "Variablen" vollständig.

> Bei dir fehlt auch die Hintergrundfarbe...

Hintergrund ist weiß, aber im Sumatra fehlen die blauen Rahmen.

Im Dateiheader steht "PDF-1.7". Also nichts für ältere Systeme, das muss 
heutzutage so sein.

von Bernhard S. (b_spitzer)


Angehängte Dateien:

Lesenswert?

Manfred P. schrieb:
> Sumatra 3.1.2, Foxit Reader zeigt "Variablen" vollständig.
Vielleicht mal Updaten??
>> Latest release: 3.5.2

>> Bei dir fehlt auch die Hintergrundfarbe...
> Hintergrund ist weiß, aber im Sumatra fehlen die blauen Rahmen.
Die blauen Rahmen sind der Hintergrund. Darüber liegen weiße abgerundete 
Rechtecke... Irgend was bekommt Sumatra da mit den Layern nicht auf die 
Reihe.

> Im Dateiheader steht "PDF-1.7". Also nichts für ältere Systeme, das muss
> heutzutage so sein.
Hab dir die Datei nochmal mit Option PDF/A exportiert. Stimmt damit die 
Darstellung?
Ich kann auf Wunsch aber auch die odg-Datei hier reinstellen.

von Manfred P. (pruckelfred)


Lesenswert?

Bernhard S. schrieb:
>> Sumatra 3.1.2, Foxit Reader zeigt "Variablen" vollständig.
> Vielleicht mal Updaten??
>>> Latest release: 3.5.2

"Latest version that support XP is 3.1.2"

> Hab dir die Datei nochmal mit Option PDF/A exportiert. Stimmt damit die
> Darstellung?

Nein.

> Ich kann auf Wunsch aber auch die odg-Datei hier reinstellen.

Danke, aber mache Dir keine Mühe, mit Foxit passt es ja und Arduino mit 
ESP32 läuft unter XP sowieso nicht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.