Skip to Content

Plus de broches GPIO pour ESP32-CAM

Plus de broches GPIO pour ESP32-CAM

Dans cet article, vous apprendrez comment obtenir plus de broches GPIO libres pour votre ESP32-CAM carte. Les modules ESP32-CAM sont de petites cartes basées sur ESP32 avec une caméra intégrée, une LED flash et une interface carte SD. Ils sont parfaits pour construire des systèmes simples de surveillance ou de monitoring.

Cependant, le nombre de broches GPIO librement disponibles est très limité, surtout lorsque la caméra et l’interface carte SD sont utilisées. Ce tutoriel vous montre comment contourner cette limitation.

Pièces requises

Vous aurez besoin d’un module ESP32-CAM avec un shield de programmation ou un adaptateur FTDI USB-TTL. Certains autres composants comme un câble USB, une carte micro SD ou un lecteur de carte SD sont peut-être déjà en votre possession. Pas besoin de les acheter, aucun de ces éléments n’est spécifique à ce projet.

ESP32-CAM avec shield USB-TTL

Adaptateur FTDI USB-TTL

Carte MicroSD 4GB

Lecteur de carte SD

USB data cable

Câble USB de données

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Utilisation des broches de l’ESP32-CAM

L’image suivante montre le brochage de l’ESP32-CAM. LeESP32-Schip sur la carte possède 32 broches GPIO, mais la plupart sont utilisées par la caméra et la PSRAM et ne sont pas accessibles.

Brochage du module ESP32-CAM (source)

Les 10 broches GPIO accessibles (en violet) ne sont pas non plus entièrement libres, car elles sont partagées avec les interfaces carte SD et communication série. Plus précisément, toutes les broches GPIO marquées en jaune (12, 13, 15, 14, 2, 4) sur le côté gauche de la carte sont partagées avec la carte SD. Le schéma suivant montre les lignes de signal utilisées par le connecteur de la carte SD :

Schematic of SD Card Socket
Schéma du connecteur carte SD (source)

Comme vous pouvez le voir, les lignes de données connectées à la carte SD sont tirées en interne vers le haut avec des résistances de 47K. Le tableau ci-dessous indique quelle broche GPIO correspond à quelle ligne de données de l’interface carte SD :

Carte SDESP32-CAM
HS2_CLKGPIO14
HS2_CMDGPIO15
HS2_DATA0GPIO2
HS2_DATA1 / LED flashGPIO4
HS2_DATA2GPIO12
HS2_DATA3GPIO13

Les broches GPIO3 et GPIO1 sur le côté droit de la carte sont nécessaires pour la communication série (U0_RXD, U0_TXD) et la programmation de la carte.

Serial Communication pins on ESP32-CAM
Broches de communication série sur ESP32-CAM

Enfin, GPIO0 est connecté à la broche XCLK de la caméra et doit rester flottant (non connecté) lorsque l’ESP32 fonctionne. En interne, GPIO0 est tiré vers le haut par une résistance de 10KΩ et doit être connecté à la masse pendant le flashage.

Cela vous laisse donc uniquement GPIO16 comme broche librement utilisable si l’interface carte SD est utilisée en mode 4 bits. Si vous avez juste besoin d’une LED de statut, vous pouvez utiliser GPIO33, qui est connecté à une LED rouge à l’arrière de la carte.

GPIO disponibles dans différents scénarios

Regardons différents scénarios d’application pour voir quelles broches GPIO sont disponibles. GPIO16 sera toujours disponible, mais je l’inclus dans les descriptions suivantes pour plus de clarté :

Pas de carte SD utilisée

Si l’interface carte SD n’est pas utilisée, vous avez les GPIO 2, 4, 12, 13, 14, 15 et 16 disponibles. Ce sont les broches marquées en bleu sur l’image suivante :

Free GPIO without SD-Card
GPIO libres sans carte SD

Vous pouvez essayer le code de test suivant pour voir ce qui se passe lorsque vous voulez faire clignoter une LED sur différentes broches en utilisant l’interface carte SD en mode 4 bits, 1 bit ou pas du tout :

#include "SD_MMC.h"

const byte ledPin = 12; // 13, ...

void setup() {
  Serial.begin(115200);
  pinMode(ledPin, OUTPUT);

  // SD_MMC.begin(); // 4-bit Mode
  // SD_MMC.begin("/sdcard", true);  // 1-bit Mode

  for (int i = 0; i < 10; i++) {
    Serial.println("blink");
    digitalWrite(ledPin, HIGH);
    delay(500);
    digitalWrite(ledPin, LOW);
    delay(500);
  }
}

void loop() {
}

Vous trouverez plus de détails sur ces modes dans les sections suivantes. Rappelez-vous simplement que si vous voulez utiliser l’interface carte SD, vous devez insérer une carte SD correctement formatée. Sinon, l’appel SD_MMC.begin()échouera avec une valeur de retour defalse.

Carte SD utilisée en mode 4 bits

Si vous utilisez l’interface carte SD en mode 4 bits (haute vitesse), vous n’aurez que GPIO16 disponible :

Free GPIO with SD-Card (4-bit Mode)
GPIO libre avec carte SD (mode 4 bits)

L’extrait de code suivant montre comment initialiser l’interface carte SD en mode 4 bits par défaut :

#include "SD_MMC.h"

void setup() {
  SD_MMC.begin();
  ...
}

Notez que la LED flash intégrée est connectée à GPIO4, ce qui provoque un clignotement bref de la LED flash lorsque le lecteur de carte SD est utilisé. Vous pouvez éviter cela en initialisant l’interface carte SD en mode 1 bit, que nous aborderons dans la section suivante.

Carte SD utilisée en mode 1 bit

Si vous utilisez l’interface carte SD en mode 1 bit, le transfert de données sera plus lent, mais vous gagnez les broches GPIO12 et GPIO13 comme broches disponibles :

Free GPIOs with SD-Card (1-bit Mode)
GPIO libres avec carte SD (mode 1 bit)

Pour initialiser l’interface carte SD en mode 1 bit, utilisez le code suivant. L’élément important est de définir le deuxième paramètre dans SD_MMC.begin(..., true) à true, ce qui active le mode 1 bit.

#include "SD_MMC.h"

void setup() {
  SD_MMC.begin("/sdcard", true);
  ...
}

Cela vous permet aussi d’éviter le clignotement de la LED flash (sur GPIO4) comme ceci :

#include "SD_MMC.h"

void setup() {
  pinMode(GPIO_NUM_4, OUTPUT);
  digitalWrite(GPIO_NUM_4, LOW);  // switch of flash LED

  SD_MMC.begin("/sdcard", true);  // flash LED remains off
  ...
}

Bien que vous ne puissiez pas utiliser GPIO4 pour d’autres fonctions, vous pouvez au moins allumer et éteindre la LED flash à votre guise, sans interférence avec les opérations de la carte SD. Cependant, ne laissez pas la LED flash allumée plus d’une seconde ! Elle n’a pas de résistance de limitation de courant, chauffe beaucoup et peut griller ! Pour plus de détails, consultez le tutoriel Control ESP32-CAM Flash LED.

Utilisation du deep-sleep

Si vous avez besoin de broches GPIO uniquement pour réveiller l’ESP32-CAM du deep-sleep, par exemple pour prendre une photo lors d’une détection de mouvement, vous pouvez en fait utiliser GPIOs 2, 4, 12, 13, 14 ou 15, même lorsque l’interface carte SD est initialisée en mode 4 bits. Voici un exemple de câblage tiré du tutoriel Motion Activated ESP32-CAM.

Connecting AM312 PIR Sensor to ESP32-CAM
Connexion de v à l’ESP32-CAM

Ajout de GPIOs

Si vous voulez utiliser la carte SD et avez besoin de plus de 3 broches GPIO, la méthode la plus simple est d’ajouter une carte d’extension GPIO utilisant une interface I2C. I2C nécessite seulement deux broches et si vous initialisez la carte SD en mode 1 bit, vous avez trois broches GPIO disponibles (12, 13, 16).

Le schéma de câblage suivant montre comment connecter la MCP23017 GPIO Expander carte via I2C aux GPIO12 et GPIO13 de l’ESP32-CAM :

Connecting the MCP23017 GPIO Expander
Connexion de laMCP23017 GPIO Expander

Voici un exemple de code qui décrit comment initialiser l’extension GPIO et la carte SD :

include "Wire.h"
#include "Adafruit_MCP23X17.h"
#include "SD_MMC.h"

Adafruit_MCP23X17 mcp;

void setup() {
  Serial.begin(115200);

  SD_MMC.begin("/sdcard", true); // 1-bit Mode

  Wire.begin(13, 12); // SDA=13, SCL=12
  if (!mcp.begin_I2C()) {  // Default address 0x20
    Serial.println("MCP23017 not found!");
    while (1);
  }

  // Example: set pin 0 on MCP23017 as output
  mcp.pinMode(0, OUTPUT);
}

void loop() {
  mcp.digitalWrite(0, ...);
  ...

}

Si vous voulez en savoir plus sur l’extension GPIO MCP23017, consultez le tutoriel Using GPIO Expander MCP23017 With Arduino. Notez que vous pouvez chaîner plusieurs puces MCP23017, ce qui vous donne jusqu’à 128 GPIO. Amplement suffisant ; )

Au lieu d’une extension GPIO bidirectionnelle comme le MCP23017, vous pouvez aussi utiliser des registres à décalage pour ajouter plus d’entrées ou sorties. Voir les tutoriels More Inputs With 74HC165 Shift Register et More Arduino Outputs With 74HC595 Shift Register pour plus de détails.

Conclusions

Cet article vous a montré comment obtenir plus de broches GPIO pour votre ESP32-CAM. J’espère que cela vous aidera dans vos projets. Si vous avez des questions, n’hésitez pas à les poser dans la section commentaires.

Bon bricolage 😉