5 0 210 KB
Arduino Cheat Sheet für ESP32 Programmstruktur
Operatoren
Basis Programm Struktur void setup () { // einmal zu Beginn ausführen } void loop () { // wiederholt ausführen } Kontroll-Strukturen if (x < 5) { ... } else if (x < 10) { ... } else { ... } while (x < 5) { ... } do { ... } while (x < 5); // mind. 1mal for (int i = 0; i < 10; i++) { ... break ; // Schleife abbrechen continue ; // nächste Wiederholung
}
switch (var) { case 1: ... break ; case 2: ... break ; default :... } Funktions-Definitionen < name >(< params >) { ... } z.B. int doppel(int x) {return x*2;} return x; // Datentyp wie return ; // bei void-Funktionen
Allgemeine Operatoren = Zuweisung + plus minus * mal / geteilt % Modulo (Rest der GZ-Division) == Gleich wie != Ungleich < Kleiner als > Größer als = Größer oder gleich && AND (logisch)|| ODER (log.) ! NOT (logisch) Zusammengesetzte Operatoren ++ Inkrement / hochzählen -Dekrement / runterzählen += Addition mit Zuweisung -= Subtraktion mit Zuweisung *= Multiplikation mit Zuweisung /= Division mit Zuweisung &= Bitweise UND mit Zuweisung |= Bitweise ODER mit Zuweisung Bitweise Operatoren & bitweise UND | ^ bitweise XOR ~ >
bitweise ODER bitweise Neg. shift rechts
Pointer Zugriff (Zeiger) & Referenz: liefert einen Pointer * Dereferenz: Inhalt, auf den der Pointer zeigt
Hauptquelle: Arduino Language Reference https://arduino.cc/de/Reference/
Standard - Funktionen
Bibliotheken
Math Pin Input/Output abs (x) Digital I/O - alle Pins, 34-39 nur In min (x, y) max (x, y) sin (rad) cos (rad) tan (rad) pinMode (pin, sqrt (x) pow (base, exponent) [INPUT, OUTPUT, INPUT_PULLUP]) constrain (x, minval, maxval) int digitalRead (pin) map (val, fromL, fromH, toL, toH) digitalWrite (pin, [HIGH, LOW]) Analog In - Pins A0-A19 Random Numbers int analogRead (pin) randomSeed (seed) // long oder int analogReference ( long random (max) // 0 bis max-1 [DEFAULT, INTERNAL, EXTERNAL]) long random (min, max) PWM Out - Beim ESP32 mit ledc() ! ledcSetup (Kanal, Freq, Bits) Bits and Bytes ledcAttachPin (Pin, Kanal) lowByte (x) highByte (x) ledcWrite (Kanal, Wert) bitRead (x, bitn) analogWrite (Pin, Wert) nur für bitWrite (x, bitn, bit) Uno, Nano, ESP8266 bitSet (x, bitn) Advanced I/O bitClear (x, bitn) tone (pin, freq_Hz) bit (bitn) // bitn: 0=LSB 7=MSB tone (pin, freq_Hz, duration_ms) noTone (pin) shiftOut (dataPin, clockPin, Type Conversions [MSBFIRST, LSBFIRST], value) char (val) byte (val) unsigned long pulseIn (pin, int (val) word (val) [HIGH, LOW]) long (val) float (val)
Serial - Komm. mit PC oder üb. RX/TX begin (long speed) // bis 921600 begin (speed, config) // Config z.B. Serial7E1 od. end () Serial8N1 #Bytes angekommen int available () -1, wenn nichts da int read () int peek () // lesen ohne löschen // Puffer leeren flush () print (data) println (data) write (byte) write (char * string) write (byte * data, size) SerialEvent () // wird aufgerufen, wenn Daten da sind SoftwareSerial.h - Komm. an bel. Pin SoftwareSerial (rxPin, txPin) begin (long speed) // bis 115200 listen () // nur 1 Funktion isListening () // gleichzeitig read, peek, print, println, write // Genauso wie bei Serial Bibliothek
Time (ESP32-Timer siehe Rückseite) unsigned long millis () // Überlauf nach 50 Tagen unsigned long micros () // Überlauf nach 70 Minuten delay (msec) delayMicroseconds (usec)
EEPROM.h - nicht-flüchtiger Speicher byte read (addr) write (addr, byte) EEPROM[index] // Array-Zugriff Servo.h - Steuerung von Servos attach (pin, [min_uS, max_uS]) write (angle) // 0 bis 180 ° writeMicroseconds (uS) // 1000-2000; 1500 ist die Mitte int read () // 0 bis 180 ° bool attached () detach ()
External Interrupts attachInterrupt (interrupt, func, [LOW, CHANGE, RISING, FALLING]) detachInterrupt (interrupt) interrupts () noInterrupts ()
Variablen, Arrays und Definitionen | false - 127, 'a' '$' etc. - 255 - 255 - 32767 - 65535 bei ESP32 mit 32Bit wie (unsigned) long long -2147483648 - 2147483647 (=231-1) unsigned long 0 – 4294967295 (=232-1) float -3.4028e+38 - 3.4028e+38 double ±5,0e−324 - ± 1,7e+308 void Kein Rückgabewert oder Parameter Strings char str1[8] = {'A','r','d','u','i','n','o','\0'}; // C-String endet mit NULL-Zeichen char str2[8] = "Arduino"; // \0 mitzählen char str3[] = "Arduino"; String str4 = "Arduino"; // String-Klasse String str5 = "Sensor-Wert: " + analogRead(A0);
Numerische Konstanten 123 Normale Dezimalzahl 0b 01111011 Binäre schreibweise 0 173 Oktal – vermeiden! 0x 7B Hexadezimal – 0 bis F 123 U Erzwinge unsigned 123 L Erzwinge long 123 UL Erzwinge unsigned long 123 .0 Erzwinge Kommazahl 1.23 e 6 1.23*10^6 = 1230000 Qualifier static volatile const PROGMEM
Variable bleibt erhalten im RAM (notwendig für ISR) Nicht veränderbar im Flashspeicher
Arrays int myPins[] = {2, 4, 8, 3, 6}; int myInts[6]; // Array mit 6 Werten myInts[0] = 42; // Zuweisung an den // ersten Wert myInts[6] = 12; // Fehler! Index // von 0 bis 5
Sensor_VP/VN: Ausgang des HallElementes, wird intern gemessen GPIO34, 35, 36 und 39 sind nur Input, daher hier als GPIN bezeichnet.
Datentypen boolean true char -128 unsigned char 0 byte 0 short -32768 unsigned short 0 int und unsigned int
GND
RESET
EN
GPIO23
MOSI
SENS_VN
ADC0
GPIN36
GPIO22
SCL
SENS_VP
ADC3
GPIN39
GPIO1
TxD0
ADC6
GPIN34
GPIO3
RxD0
CAN-RX
ADC7
GPIN35
GPIO21
SDA
TOUCH9
ADC4
GPIO32
GND
TOUCH8
ADC5
GPIO33
GPIO19
DAC1
ADC18
GPIO25
GPIO18
SCLK
DAC2
ADC19
GPIO26
GPIO5
SS
TOUCH7
ADC17
GPIO27
TOUCH6
ADC16
GPIO14
TOUCH5
ADC15
GPIO12
ESPRESSIF USB ESP32 WROOM
AZ-Delivery
Alle GPIO nur bis 3,3V tolerant! Externe 5V Signale nur über Spannungsteiler anschließen!
ADC14
LED1
GPIO13
SD_DATA2
GPIO9
SD_DATA3
GPIO10
SD_CMD
GPIO11 Vin 5V
CP2102 USB/Ser
Reset
Boot USB
I2C-Bus, externe Pull-Up Widerstände erforderlich. LED1 Serielle Schnittstelle intern mit dem CP2102 verbunden (470Ohm an RxD) GPIO13, 25, 26, 27, 32, 33 haben keinen internen PullUp Widerstand. Bei den übrigen aktivierbar mit
PinMode(Pin, INPUT_PULLUP)
CAN-TX CAN-Bus benötigt Treiber MCP2551
GPIO16
GND TOUCH4
MISO
GPIO17
ESP32 NodeMCU
Wire.h - I²C Kommunikation begin () // Als Master teilnehmen begin (addr) // Als Slave mit addr requestFrom (address, count) beginTransmission (addr) // Schritt 1 send (byte) // Schritt 2 send (char * string) send (byte * data, size) endTransmission () // Schritt 3 int available () //#Bytes angekommen byte receive () //Nächstes Byte lesen onReceive (handler) onRequest (handler)
SPI-Bus: MOSI, MISO, SCLK, SS (optional)
Vcc3.3V
GPIO4
ADC10
TOUCH0
GPIO0
ADC11
TOUCH1
GPIO2
ADC12
TOUCH2
GPIO15
ADC13
TOUCH3
GPIO8
SD_DATA0
GPIO7
SD_DATA1
GPIO6
SD_CLK
Touch1 geht nicht wegen interner Beschaltung. (Boot-Taster)
SD_XX verbindet den internen FLASHSpeicher => GPIO611 nicht verwenden!
by Bernhard Spitzer Version: 2021-04-27
Quelle: https://github.com/liffiton/Arduino-Cheat-Sheet/
Adapted from: - Original: Gavin Smith - SVG version: Frederic Dufourg - ESP32 board drawing: Bernhard Spitzer
Arduino Cheat Sheet für ESP32 WLAN - Funktionen WiFi.h - WLAN-Funktionen, allgemein Zunächst das WLAN-Kennwort angeben: const char* ssid = "NetworkName"; const char* pass = "Password"; Alternative (besser beim Weitergeben von Programmen): #include // im LIB-Verzeichnis anlegen, // Inhalt: die beiden Zeilen von oben WiFi.begin(ssid, pass); // Startet WLAN zu ssid als Client WiFi.begin(ssid); // Verbindung mit offenem WLAN ssid IPAddress myIP = WiFi.localIP(); // IP-Adresse auslesen WiFi.status( ); // Lese Status WiFi.BSSID(bssid); long rssi = WiFi.RSSI( ); WiFi.disconnect( );
der Verbindung z.B. WL_CONNECTED // Liest die MAC-Adresse des Routers // Liest die Signalstärke aus // Verbindung trennen
WiFiAP.h - WLAN-Funktion Accesspoint WiFi.SoftAP(ssid, pass); // Startet einen Accesspoint Wifi.SoftAP(ssid); // offener Accesspoint IPAddress myIP = WiFi.softAPIP(); // IP-Adresse auslesen const char * softAPgetHostname(); // AP-Name auslesen bool softAPsetHostname(const char * hostname); // AP-Name festlegen String softAPmacAddress(void); uint8_t* softAPmacAddress(uint8_t* mac);
// MAC-Adresse festlegen // MAC-Adresse auslesen
HTTP(S) - Server WebServer.h - für HTTP und HTTPS Verbindungen Zunächst eine Objektinstanz erzeugen: WebServer server(80); // Port 80 für HTTP, Port 443 für HTTPS In Setup(): server.begin(); // Webserver starten, WLAN vorher verbinden server.onNotFound(Send404);// Callback-Funktion für ungültige URL server.on("/", HandleRoot);// Callback-Funktion für Web-Root Weitere URLs: weitere Callback-Fkt. oder in HandleRoot abfragen Webseiten ausliefern mit Status-Code und Inhaltstyp: server.send(200, "text/html", WebPage() ); // WebPage liefert String void Send404(void) { // hier als Funktion Send404() server.send(404, "text/plain", "Internet kaputt"); // sende unformatierten Text } Auswerten von Server-Argumenten (für Formulare, Benutzereingaben): void HandleRoot(void) { // DEBUG Ausgabe, zeigt alle Parameter des Aufrufs Serial.printf("URI: %s, ", server.uri()); Serial.print("Method: "); Serial.println((server.method() == HTTP_GET) ? "GET" : "POST"); Serial.printf(", Arguments: %s\n", server.args()); // Alle Server-Argumente ausgeben for (uint8_t i = 0; i < server.args(); i++) { Serial.printf("%s : %s\n", server.argName(i), server.arg(i)); } // ENDE DEBUG, jetzt nach bekannten Argumenten schauen; if(server.hasArg("r") || server.hasArg("g") || server.hasArg("b")) { uint16_t red, green, blue; String Temp; Temp = server.arg("r"); // Server sendet Strings red = Temp.toInt(); // String in Zahlumwandlen // jetzt was damit machen, z.B. LED-Farbe setzen } server.send(200, "text/html", WebPage() ); // neue Webseite senden } Weitere Möglichkeiten siehe Programmbeispiele in Arduino!
Hauptquelle: Arduino Language Reference https://arduino.cc/de/Reference/
Timer - Funktionen
Bluetooth - Funktionen BluetoothSerial.h - Bluetooth zur Kommunikation Zunächst eine Objektinstanz erzeugen: BluetothSerial SerialBT; // Name ist beliebig In Setup(): SerialBT.begin("Geräte_1234"); // Eindeutiger Name Danach können die gleichen Funktionen wie bei der seriellen Schnittstelle genutzt werden: SerialBT.availabe(); // Empfangsdaten vorhanden? SerialBT.println("Text"); Zeichen = SerialBT.read(); StringVar = SerialBT.readString(); SerialBT.end(); Weitere Funktionen für die Verbindungssteuerung: void enableSSP(); // Secure Pairing einschalten bool setPin(*pin); // z.B. SerialBT.setPin("1234"); bool connect(remoteName); // neue Verbindung bool connect(); // gespeicherte Verbindung bool connected(timeout=0);// Verbindung ok? bool disconnect(); bool unpairDevice(remoteAddress[]); Callback-Funktion für Verbindungs-Ereignisse: SerialBT.register_callback(BT_Comm); // in Setup() void BT_Comm(esp_spp_cb_event_t event, esp_spp_cb_param_t *param) { if(event == ESP_SPP_SRV_OPEN_EVT){ Serial.println("Client verbunden"); } if(event == ESP_SPP_CLOSE_EVT ){ Serial.println("Client getrennt");
}
} Weitere Event-Nummern und Definitionen: docs.espressif.com/projects/esp-idf/en/latest/esp32 /api-reference/bluetooth/esp_spp.html BluetoothA2DPSource.h und BluetoothA2DPSink.h Bluetooth zur Audio-Übertragung (Quelle, Senke) z.B. github.com/pschatzmann/ESP32-A2DP
Touch und Hall-Sensor
Der ESP32 hat 4 Universaltimer mit 64 Bit Zählumfang Eingangstakt 80MHz mit Vorteiler (:1 bis :65535) hw_timer_t *MeinTimer = NULL; // Zeiger auf eine Timer-Struktur MeinTimer = timerBegin(Nummer, Teiler, Richtung); // Nummer 0-3 // Teiler 1-65535, true: Aufwärtszähler / false: Abwärtszähler timerAlarmWrite(MeinTimer, Alarmwert, Reload); // 64 Bit Alarmwert // Reload true: nach Alarm bei 0 anfangen / false: weiterzählen timerAttachInterrupt(MeinTimer, &onTimer, true); // ISR onTimer() timerAlarmEnable(MeinTimer); // Alarmtimer starten timerStart(MeinTimer); // Timer starten uint64_t timerRead(MeinTimer); // Zählerstand lesen (64Bit!) timerWrite(MeinTimer, uint64_t Wert); // Zählerstand setzen Weitere Funktionen findet man im Benutzerprofil oder in %appdata%
%userprofile%\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-tmer.h %appdata%\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32\esp32-hal-t imer.h
ESP32-S CPU-Modul mit interner Antenne und u.FLStecker für externe Antenne. Widerstandsbrücke Vin 5V prüfen, ob die richtige Antenne genutzt wird! GND TOUCH5
ADC15
GPIO12
TOUCH4
ADC14
GPIO13
GPIO16 GPIO0
ADC11
TOUCH1
GND 5V 3.3V
0R Widerstände Für 3.3/5V
TOUCH6
ADC16
GPIO14
GPIO3
RxD0
TOUCH2
ADC12
GPIO2
GPIO1
TxD0
TOUCH0
ADC10
GPIO4
GND
Serielle Schnittstelle ohne USB-Adapter
Blitz-LED an GPIO4, parallel mit CF-Sockel HS2_DATA1 => LED flackert bei Karten-Zugriff! (Abhilfe: SPI-Modus f. CF-Karte) Sensor_VP/VN: Ausgang des HallElementes, wird intern gemessen
Kamera-IF GPIO4
Reset unten ESP32-CAM
LED Blitz
Schaltplan: https://raw.githubusercontent.com /SeeedDocument/forum_doc/mas ter/reg/ESP32_CAM_V1.6.pdf
GND
RESET
EN
GPIO1
TxD0
GPIO3
RxD0
SENS_VP
ADC3
GPIN39
Der ESP32 hat bis zu 10 nutzbare Touch-Eingänge, Teilweise nicht nutzbar (z.B. GPIO0/Touch1) wg. interner Beschaltung auf der Platine. Die Touch-Pins müssen nicht mit PinMode initialisiert werden.
TOUCH9
ADC4
GPIO32
TOUCH8
ADC5
GPIO33
CAN-RX
Vcc
Vcc3.3V
GPIN36
byte HallValue = hallRead( ); // nur ein Sensor
ESP32-S ist unten
GPIO15
ADC0
Der ESP32 hat einen internen Hall-Sensor (Magnetfeld), der aber nur bei den Modulen ohne Metalldeckel sinnvoll nutzbar ist. Sonst werden nur sehr starke Neodym-Magnete erkannt.
Vcc3.3V
ADC13
SENS_VN
Rückgabewert 0 – 100, Touch-Ereignis bei Schwellwert 20-30 (je nach Beschaltung): bool digitalTouch(T_Chan) { if(touchRead(T_Chan) < 30) return TRUE; else return FALSE; }
Sockel
TOUCH3
Zum Auslesen der Sensoren muss keine Bibliothek eingebunden werden.
byte TouchValue = touchRead(T0); // T0-T9
CF-Card
ESPRESSIF USB ESP32 WROOM
Vcc3.3V GPIO22
SCL
GPIO21
SDA
ADC6
GPIN34
GND
ADC7
GPIN35
GND
DAC1
ADC18
GPIO25
DAC2
ADC19
GPIO26
TOUCH7
ADC17
GPIO27
TOUCH6
ADC16
GPIO14
TOUCH5
ADC15
GPIO12
TOUCH4
ADC14
GPIO13
GPIO34, 35, 36 und 39 sind nur Input, daher hier als GPIN bezeichnet. Akku-Anschluß für eine LiIoZelle mit 4,2V Spannung. Ladeschaltung mit TP4054 (max 400mA Ladestrom)
Reset LED5
Wemos Lolin32
GND
GPIO19
MISO
GPIO23
MOSI
GPIO18
SCLK
GPIO5
SS
Vcc3.3V
CP2104 USB/Ser
PinMode(Pin, INPUT_PULLUP)
SPI-Bus
CAN-TX
Touch1 geht nicht wg. interner Beschaltung.
GPIO4
ADC10
TOUCH0
GPIO0
ADC11
TOUCH1
Akku +
GND
Akku -
GPIO2
ADC12
TOUCH2
GPIO15
ADC13
TOUCH3
USB
LED5
CAN-Bus benötigt Treiber MCP2551
GPIO16 Charge
I2C-Bus, externe Pull-Up Widerstände erforderlich. GPIO13, 25, 26, 27, 32, 33 haben keinen internen PullUp Widerstand. Bei den übrigen aktivierbar mit
GPIO17
Vin 5V
Serielle Schnittstelle intern mit dem CP2104 verbunden (470Ohm an RxD)