ARDUINO
LA CARTE ESP32-CAM

Introduction

L'ESP32-CAM est une carte de développement dotée de capacités Wi-Fi et Bluetooth, comprenant une petite caméra, un lecteur de carte micro SD, un flash.

Quelques caractéristiques

La carte ESP32-CAM possède :

Cette carte ESP32-CAM peut se programmer via :

Alimentation de la carte

Cette carte s'alimente en 5 V et peut consommer jusqu'à 2 A.

Premiers pas

Configuration de l'EDI

Il s'agit d'ajouter le module adéquat.

  1. Ouvrir l’EDI Arduino, aller dans Fichier / Préférences.
  2. Dans URL de gestionnaire de cartes supplémentaires, entrer :
         https://dl.espressif.com/dl/package_esp32_index.json
  3. Cliquer sur OK.
  4. Aller ensuite dans Outils / Type de carte / Gestionnaire de carte.
  5. Installer esp32.
  6. Dans le menu Outils, sélectionner la carte Al Thinker ESP32-CAM, penser également à vérifier le port.

Repérage des connecteurs

Les repères des connecteurs sont indiqués sur le dessin ci-dessous.

Complément

Modes de fonctionnement

La carte branchée sur son adaptateur fonctionne selon deux modes différents :

Démarrer l’ESP32-CAM en mode Transfert

Passer au mode normal d’exécution de programme

Test de fonctionnement

La carte comporte une DEL rouge associée à la sortie 33. Pour la faire clignoter :

void setup() {
  pinMode(33, OUTPUT);
}
void loop() {
  digitalWrite(33, HIGH);
  delay(1500);
  digitalWrite(33, LOW);
  delay(500);
}

Pour que clignote la DEL servant de flash :

void setup() {
  pinMode(4, OUTPUT);
}
void loop() {
  digitalWrite(4, HIGH);
  delay(1500);
  digitalWrite(4, LOW);
  delay(500);
}

Test de la caméra

Connexion à un point d'accès Wi-Fi

  1. Récupérer l'exemple proposé par l'EDI Arduino :
  2. Commenter la ligne 10, décommenter la ligne 14, compléter les lignes 18 et 19.
  3. Transférer le programme sur la carte, lire l'adresse IP du serveur web à l'aide du moniteur série.

Configuration en point d'accès Wi-Fi

Ici, la carte se comporte en point d'accès Wi-Fi, au lieu de se connecter à un point d'accès Wi-Fi comme précédemment. L'exemple est repris et modifié, sont changées les lignes 18 à 19 et 87 à 94. Le mot de passe défini à la ligne 19 comporte 8 caractères au minimum.

#include "esp_camera.h"
#include <WiFi.h>

//
// WARNING!!! Make sure that you have either selected ESP32 Wrover Module,
//            or another board which has PSRAM enabled
//

// Select camera model
//define CAMERA_MODEL_WROVER_KIT
//#define CAMERA_MODEL_ESP_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE
#define CAMERA_MODEL_AI_THINKER

#include "camera_pins.h"

const char* ssid = "Robot";
const char* password = "123456789";
IPAddress local_ip(192,168,0,111);
IPAddress gateway(192,168,0,111);
IPAddress subnet(255,255,255,0);

void startCameraServer();

void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println();

  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
  //init with high specs to pre-allocate larger buffers
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }

#if defined(CAMERA_MODEL_ESP_EYE)
  pinMode(13, INPUT_PULLUP);
  pinMode(14, INPUT_PULLUP);
#endif

  // camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }

  sensor_t * s = esp_camera_sensor_get();
  //initial sensors are flipped vertically and colors are a bit saturated
  if (s->id.PID == OV3660_PID) {
    s->set_vflip(s, 1);//flip it back
    s->set_brightness(s, 1);//up the blightness just a bit
    s->set_saturation(s, -2);//lower the saturation
  }
  //drop down frame size for higher initial frame rate
  s->set_framesize(s, FRAMESIZE_QVGA);

#if defined(CAMERA_MODEL_M5STACK_WIDE)
  s->set_vflip(s, 1);
  s->set_hmirror(s, 1);
#endif

  Serial.println("");
  Serial.print("Configuration en point d'accès Wifi ... ");
  WiFi.mode(WIFI_AP);
  WiFi.softAPConfig(local_ip, gateway, subnet);
  WiFi.softAP(ssid, password);
  Serial.print("Adresse IP du point d'accès Wifi : ");
  Serial.println(WiFi.softAPIP());

  startCameraServer();

}

void loop() {
  // put your main code here, to run repeatedly:
  delay(10000);
}

Affichage obtenu

Taper l'adresse IP du serveur web dans la barre d'adresse d'un navigateur.

Penser à cliquer sur le bouton Start Stream en bas à gauche de la page web...

La vidéo s'affiche seule en tapant http://192.168.0.111:81/stream.

Quelques liens

Documentation

Exemples de projets