Table des matières

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 :

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 :

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 NonWifi 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 NonRemplace 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:

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)

Hardware

PWM, I2S, IR

WIFI

OS

Brochage

PINOUT

esp32_pinout.jpg esp32_oled_pinout.jpg

ESP-WROOM-32

Installation de l'environnement de développement

Procédure d'installation de l'environnement ARDUINO

* 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 :

* Brancher votre carte ESP32, vérifier le port COM qui lui a été attribué :

* Créer un nouveau sketch, sélectionner la carte: ESP32 Dev Module et le port qui lui a été associé

* 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 <WiFi.h>
#include <WiFiUdp.h>

// 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 HERCULE

Démarrer HERCULE et dans l'onglet UDP mettre 3333 dans le port à utiliser puis cliquer sur “Listen”

Consommation

Source : Andreas Spiess

Liens utiles

Schema de la carte de developpement ESP32 DEVKIT V1 www.doit.am schematicsforesp32.pdf