ESP32 et WEBCAM

AttentionCette carte nécessite un adaptateur USB FTDI

Pour le temps du téléchargement, il faut relier IOO et GND (source)

Complément

https://github.com/rzeldent/esp32cam-rtsp

Mise en route ESP32-cam

  1. Dans l'IDE arduino, ajouter si nécessaire https://dl.espressif.com/dl/package_esp32_index.json (séparer par des , si d'autres packages)

  2. Choisir la carte ESP32 wrover module

  3. Régler la partition schéma sur HUGE APP

  4. Ouvrir Exemples /ESP32 / Camera / camera webserver

  5. Dans le code, ajuster les propriétés de votre wifi, et chercher la bonne camera entre les lignes 9 et 14)

Un exemple de code à travailler, ce code permet de prendre deux photos sur une carte sd, puis et placer l'ESP32 en mode veille .

1
/*********
2
  Rui Santos
3
  Complete project details at https://RandomNerdTutorials.com/esp32-cam-take-photo-save-microsd-card
4
  
5
  IMPORTANT!!! 
6
   - Select Board "AI Thinker ESP32-CAM"
7
   - GPIO 0 must be connected to GND to upload a sketch
8
   - After connecting GPIO 0 to GND, press the ESP32-CAM on-board RESET button to put your board in flashing mode
9
  
10
  Permission is hereby granted, free of charge, to any person obtaining a copy
11
  of this software and associated documentation files.
12
  The above copyright notice and this permission notice shall be included in all
13
  copies or substantial portions of the Software.
14
*********/
15
16
#include "esp_camera.h"
17
#include "Arduino.h"
18
#include "FS.h"                // SD Card ESP32
19
#include "SD_MMC.h"            // SD Card ESP32
20
#include "soc/soc.h"           // Disable brownour problems
21
#include "soc/rtc_cntl_reg.h"  // Disable brownour problems
22
#include "driver/rtc_io.h"
23
#include <EEPROM.h>            // read and write from flash memory
24
25
// define the number of bytes you want to access
26
#define EEPROM_SIZE 1
27
28
// Pin definition for CAMERA_MODEL_AI_THINKER
29
#define PWDN_GPIO_NUM     32
30
#define RESET_GPIO_NUM    -1
31
#define XCLK_GPIO_NUM      0
32
#define SIOD_GPIO_NUM     26
33
#define SIOC_GPIO_NUM     27
34
35
#define Y9_GPIO_NUM       35
36
#define Y8_GPIO_NUM       34
37
#define Y7_GPIO_NUM       39
38
#define Y6_GPIO_NUM       36
39
#define Y5_GPIO_NUM       21
40
#define Y4_GPIO_NUM       19
41
#define Y3_GPIO_NUM       18
42
#define Y2_GPIO_NUM        5
43
#define VSYNC_GPIO_NUM    25
44
#define HREF_GPIO_NUM     23
45
#define PCLK_GPIO_NUM     22
46
47
int pictureNumber = 0;
48
49
void setup() {
50
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
51
 
52
  Serial.begin(115200);
53
  //Serial.setDebugOutput(true);
54
  //Serial.println();
55
  
56
  camera_config_t config;
57
  config.ledc_channel = LEDC_CHANNEL_0;
58
  config.ledc_timer = LEDC_TIMER_0;
59
  config.pin_d0 = Y2_GPIO_NUM;
60
  config.pin_d1 = Y3_GPIO_NUM;
61
  config.pin_d2 = Y4_GPIO_NUM;
62
  config.pin_d3 = Y5_GPIO_NUM;
63
  config.pin_d4 = Y6_GPIO_NUM;
64
  config.pin_d5 = Y7_GPIO_NUM;
65
  config.pin_d6 = Y8_GPIO_NUM;
66
  config.pin_d7 = Y9_GPIO_NUM;
67
  config.pin_xclk = XCLK_GPIO_NUM;
68
  config.pin_pclk = PCLK_GPIO_NUM;
69
  config.pin_vsync = VSYNC_GPIO_NUM;
70
  config.pin_href = HREF_GPIO_NUM;
71
  config.pin_sscb_sda = SIOD_GPIO_NUM;
72
  config.pin_sscb_scl = SIOC_GPIO_NUM;
73
  config.pin_pwdn = PWDN_GPIO_NUM;
74
  config.pin_reset = RESET_GPIO_NUM;
75
  config.xclk_freq_hz = 20000000;
76
  config.pixel_format = PIXFORMAT_JPEG; 
77
  
78
  if(psramFound()){
79
    config.frame_size = FRAMESIZE_UXGA; // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA
80
    config.jpeg_quality = 10;
81
    config.fb_count = 2;
82
  } else {
83
    config.frame_size = FRAMESIZE_SVGA;
84
    config.jpeg_quality = 12;
85
    config.fb_count = 1;
86
  }
87
  
88
  // Init Camera
89
  esp_err_t err = esp_camera_init(&config);
90
  if (err != ESP_OK) {
91
    Serial.printf("Camera init failed with error 0x%x", err);
92
    return;
93
  }
94
  
95
  //Serial.println("Starting SD Card");
96
  if(!SD_MMC.begin()){
97
    Serial.println("SD Card Mount Failed");
98
    return;
99
  }
100
  
101
  uint8_t cardType = SD_MMC.cardType();
102
  if(cardType == CARD_NONE){
103
    Serial.println("No SD Card attached");
104
    return;
105
  }
106
    
107
  camera_fb_t * fb = NULL;
108
  
109
  // Take Picture with Camera
110
  fb = esp_camera_fb_get();  
111
  if(!fb) {
112
    Serial.println("Camera capture failed");
113
    return;
114
  }
115
  // initialize EEPROM with predefined size
116
  EEPROM.begin(EEPROM_SIZE);
117
  pictureNumber = EEPROM.read(0) + 1;
118
119
  // Path where new picture will be saved in SD Card
120
  String path = "/picture" + String(pictureNumber) +".jpg";
121
122
  fs::FS &fs = SD_MMC; 
123
  Serial.printf("Picture file name: %s\n", path.c_str());
124
  
125
  File file = fs.open(path.c_str(), FILE_WRITE);
126
  if(!file){
127
    Serial.println("Failed to open file in writing mode");
128
  } 
129
  else {
130
    file.write(fb->buf, fb->len); // payload (image), payload length
131
    Serial.printf("Saved file to path: %s\n", path.c_str());
132
    EEPROM.write(0, pictureNumber);
133
    EEPROM.commit();
134
  }
135
  file.close();
136
  esp_camera_fb_return(fb); 
137
  
138
  // Turns off the ESP32-CAM white on-board LED (flash) connected to GPIO 4
139
  pinMode(4, OUTPUT);
140
  digitalWrite(4, LOW);
141
  rtc_gpio_hold_en(GPIO_NUM_4);
142
  
143
  delay(2000);
144
  Serial.println("Going to sleep now");
145
  delay(2000);
146
  esp_deep_sleep_start();
147
  Serial.println("This will never be printed");
148
}
149
150
void loop() {
151
  
152
}