Arduino Cheat Sheet Für ESP32 - V3 [PDF]

  • 0 0 0
  • Suka dengan makalah ini dan mengunduhnya? Anda bisa menerbitkan file PDF Anda sendiri secara online secara gratis dalam beberapa menit saja! Sign Up
File loading please wait...
Citation preview

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)