====== ESP32 ======
L'**ESP32** est un SOC développé par la société Espressif dédié à l'internet des objets (**IoT**) et plus particulièrement les communications sans fil Wifi et Bluetooth pour un coût réduit. Il a été décliné en version module l'**ESP-WROOM-32** qui a lui même été intégré par différents fabricants (Essentiellement Chinois) sur des cartes de développement.
Il présente plusieurs intérêts :
* Prix faible ~5€ pour le module ~8€ pour une petite carte de développement
* Intègre du Wifi 802.11 b/g/**n**/e/i (WPA)/WPA2/WPA2-Enterprise/Wi-Fi Protected Setup (WPS)
* Intègre Bluetooth **5.0** - BLE Bluetooth low Energy
* Compatible avec l'environnement de développement **ARDUINO**
* Intègre un microcontrôleur 32 bits performants et de nombreux périphériques (ADC **12bit**, DAC, 3xUART, PWM, I2C, SPI, etc ...)
* S'alimente directement en USB
* etc.
{{::esp32-wroom.jpg?200|}}
===== Quel micro ? =====
Il existe un nombre important de références. Il peut être compliqué de définir ce qu'on doit utiliser en fonction de nos besoins. Donc pour résumer :\\
* ESP32 : Première série maintenant remplacée mais toujours largement utilisée
* ESP32-Sx : Remplacement des ESP32
* ESP32-Cx : Moins performants que les ESP32-Sx mais aussi moins cher.
* ESP32-Hx : Orienté basse consommation
^ Modèle ^ Année^ Core ^ Wifi ^BLE^ Zigbee/Thread ^ Matter ^Commentaire ^
| ESP32-C2 | 2020 | 1 | 4 | 5.0 | Non |Non| |
| ESP32-C3 | 2020 | 1 | 4 | 5.0 | Non | Non| Remplace l'ancien ESP8266 |
| ESP32-C5 | 2022 | 1 | **6** 2.4+5Ghz | 5.2 | Oui |Oui| |
| ESP32-C6 | 2021 | 1 | **6** | 5.3 | Oui | Non|Wifi 6 + Zigbee |
| ESP32-C61 | 2025? | 1 | **6** | 5.0 | Oui |Oui| |
| ESP32-H2 | 2023 | 1 | Non | 5.0 | Non | **Oui** |Basse consommation|
| ESP32-S2 | 2020 | 1 | 4 | Non | Non | Non| |
| ESP32-S3 | 2020 | **2** | 4 | 5.0 | Non |Non|Remplace l'ancien ESP32 |
| ESP32 | 2016 | 2 | 4 | 4.2 | Non |Non |Ancien|
Vous voulez un micro **performant** 2 coeurs pour du **Wifi+BLE** ? **ESP32-S3**\\
Vous voulez du **Wifi 6** ? **ESP32-C6**\\
Vous voulez du **Matter** ? **ESP32-H2**\\
Vous voulez du **Zigbee** ? **ESP32-C6**\\
Pourquoi choisir un ESP32-S3 vs un ancien ESP32 ?\\
Le -S3 est plus performant pour une consommation 10 fois plus faible
Pourquoi choisir un ESP32-C6 vs un ancien ESP32 ?\\
Le -C6 a plus de fonctionnalité (Wifi 6, BLE 5.3, Zigbee/Thread) pour une consommation plus faible
Sources:\\
* https://www.youtube.com/watch?v=u5unB24lhC4\\
* https://www.espboards.dev/blog/esp32-soc-options/
===== Caractéristiques de l'ESP32 =====
==== CPU ====
Xtensa® single-/dual-core 32-bit LX6 microprocessor(s), up to 600 DMIPS (200 DMIPS for single-core microprocessor)
* 448 kB ROM
* 520 kB SRAM
* 16 kB SRAM in RTC
* QSPI flash/SRAM, up to 4 x 16 MB
* Power supply: 2.3V to 3.6V
==== Hardware ====
* Périphériques : SD card, UART, SPI, SDIO, I2C, LED PWM, Motor
PWM, I2S, IR
* GPIO : capacitive touch sensor, ADC, DAC, LNA preamplifier
* Capteurs intégrés : Hall sensor, temperature sensor
* Alimentation : 2.7 ~ 3.6V
* Courant max : 500 mA
* Température de fonctionnement : -40°C ~ +85°C
==== WIFI ====
* Wi-Fi Protocols : 802.11 b/g/n/e/i (802.11n up to 150 Mbps)
* Wi-Fi mode : Station/SoftAP/SoftAP+Station/P2P
* Wi-Fi Security : WPA/WPA2/WPA2-Enterprise/WPS
* Network protocols : IPv4, IPv6, SSL, TCP/UDP/HTTP/FTP/MQTT
==== OS ====
* FreeRTOS
===== Brochage =====
==== PINOUT ====
{{::esp32_pinout.jpg?direct}}
{{::esp32_oled_pinout.jpg?direct}}
==== ESP-WROOM-32 ====
{{::esp32_wroom.png?300|}}
{{::esp32_wroom_pinout1.png?400|}}
{{::esp32_wroom_pinout2.png?400|}}
==== Installation de l'environnement de développement ====
[[https://projetsdiy.fr/programmer-cartes-esp32-ide-arduino-macos-windows-arm-raspberry/|Procédure d'installation de l'environnement ARDUINO]]
* Installer l'environnement ARDUINO : [[https://www.arduino.cc/en/Main/Software]]
* Télécharger l'add-on pour l'ESP32 : [[https://github.com/espressif/arduino-esp32]]
* Deziper l'add-on dans le répertoire : Mes Documents\Arduino\hardware\espressif\esp32
{{::esp32_install_directory.png?400|}}
* Executer get.exe qui se trouve dans le répetoire Mes Documents\Arduino\hardware\espressif\esp32\tools
* L'executable get.exe va télécharger et intégrer l'add-on dans l'environnement ARDUINO
L'executable get.exe va télécharger 3 fichiers ZIP qui seront téléchargés dans le répertoire dist (esptool-4dab24e-windows.zip, mkspiffs-0.2.1-windows.zip et xtensa-esp32-elf-win32-1.22.0-75-gbaf03c2-5.2.0.zip)
* Démarrer l'environnement ARDUINO et vérifier que l'ESP32 apparait bien dans les types de carte :
{{::esp32_arduino.png?400|}}
* Brancher votre carte ESP32, vérifier le port COM qui lui a été attribué :
{{::esp32_cp210x.png?200|}}
* Créer un nouveau sketch, sélectionner la carte: ESP32 Dev Module et le port qui lui a été associé
{{::esp32_arduino2.png?300|}}
* Vérifier la compilation et le transfert
==== 1er sketch de test - clignotement LED ====
Ma carte intègre une LED sur la sortie IO2
void setup() {
// put your setup code here, to run once:
pinMode(2, OUTPUT); // set pin to input
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(2, HIGH); // sets the LED on
delay(200); // waits for a second
digitalWrite(2, LOW); // sets the LED off
delay(800);
}
==== Sketch exemples ====
De nombreux exemples sont fournis dans le répertoire : Documents\Arduino\hardware\espressif\esp32\libraries
==== Sketch transmission wifi ====
Le sketch ci dessous va transmettre une trame toutes les secondes vers un serveur UDP.
Remplacer par **your-ssid** par le nom de votre réseau WIFI, **your-password** par le mot de passe de votre réseau WIFI et 192.168.1.10 par l'adresse IP de votre PC.
/*
* This sketch sends random data over UDP on a ESP32 device
*
*/
#include
#include
// WiFi network name and password:
const char * networkName = "**your-ssid**";
const char * networkPswd = "**your-password**";
//IP address to send UDP data to:
// either use the ip address of the server or
// a network broadcast address
const char * udpAddress = "**192.168.1.10**";
const int udpPort = 2205;
//Are we currently connected?
boolean connected = false;
//The udp library class
WiFiUDP udp;
void setup(){
// Initilize hardware serial:
Serial.begin(115200);
//Connect to the WiFi network
connectToWiFi(networkName, networkPswd);
}
void loop(){
//only send data when connected
if(connected){
//Send a packet
udp.beginPacket(udpAddress,udpPort);
udp.printf("Seconds since boot: %u", millis()/1000);
udp.endPacket();
}
//Wait for 1 second
delay(1000);
}
void connectToWiFi(const char * ssid, const char * pwd){
Serial.println("Connecting to WiFi network: " + String(ssid));
// delete old config
WiFi.disconnect(true);
//register event handler
WiFi.onEvent(WiFiEvent);
//Initiate connection
WiFi.begin(ssid, pwd);
Serial.println("Waiting for WIFI connection...");
}
//wifi event handler
void WiFiEvent(WiFiEvent_t event){
switch(event) {
case SYSTEM_EVENT_STA_GOT_IP:
//When connected set
Serial.print("WiFi connected! IP address: ");
Serial.println(WiFi.localIP());
//initializes the UDP state
//This initializes the transfer buffer
udp.begin(WiFi.localIP(),udpPort);
connected = true;
break;
case SYSTEM_EVENT_STA_DISCONNECTED:
Serial.println("WiFi lost connection");
connected = false;
break;
}
}
L'ESP32 va transmettre toutes les secondes une trame vers le port 3333 de votre PC.
Pour visualiser les trames envoyées, il suffit d'utiliser un serveur UDP comme [[https://www.hw-group.com/products/hercules/index_en.html|HERCULE]]
Démarrer HERCULE et dans l'onglet UDP mettre 3333 dans le port à utiliser puis cliquer sur "Listen"
{{::hercule_esp32.png?400|}}
==== Consommation ====
{{::consommation_esp32png.png?400|}}
Source : [[https://www.youtube.com/watch?v=7bBDMW_m5vc|Andreas Spiess]]
===== Liens utiles =====
* [[http://espressif.com/en/products/hardware/esp32/overview|Site Espressif sur le ESP32]]
* [[http://espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf|Datasheet ESP32]]
* [[http://espressif.com/sites/default/files/documentation/esp-wroom-32_datasheet_en.pdf|Datsheet carte ESP WROOM 32]]
* [[https://projetsdiy.fr/esp8266/esp32-iot/|Projets DIY - Excellent site avec pas mal d'infos en français]]
Schema de la carte de developpement ESP32 DEVKIT V1 www.doit.am
{{::schematicsforesp32.pdf|}}