update docu
45
README.md
|
|
@ -8,9 +8,10 @@ This project uses other libraries. It is necessary to install them in the Arduin
|
||||||
- ~~Library [ESPAsyncWebSrv 1.2.7](https://github.com/dvarrel/ESPAsyncWebSrv)~~ To version **1.0.3-rc1**
|
- ~~Library [ESPAsyncWebSrv 1.2.7](https://github.com/dvarrel/ESPAsyncWebSrv)~~ To version **1.0.3-rc1**
|
||||||
- ~~Library [AsyncTCP 1.1.4](https://github.com/dvarrel/AsyncTCP)~~ To version **1.0.3-rc1**
|
- ~~Library [AsyncTCP 1.1.4](https://github.com/dvarrel/AsyncTCP)~~ To version **1.0.3-rc1**
|
||||||
- Library [AsyncTCP 3.1.4](https://github.com/mathieucarbou/AsyncTCP)
|
- Library [AsyncTCP 3.1.4](https://github.com/mathieucarbou/AsyncTCP)
|
||||||
- Library [ESPAsyncWebServer 3.0.3](https://github.com/mathieucarbou/ESPAsyncWebServer)
|
- Library [ESPAsyncWebServer 3.0.6](https://github.com/mathieucarbou/ESPAsyncWebServer)
|
||||||
- Library [ArduinoJson 7.1.0](https://github.com/bblanchon/ArduinoJson)
|
- Library [ArduinoJson 7.1.0](https://github.com/bblanchon/ArduinoJson)
|
||||||
- Library [UniqueID 1.3.0](https://github.com/ricaun/ArduinoUniqueID)
|
- Library [UniqueID 1.3.0](https://github.com/ricaun/ArduinoUniqueID)
|
||||||
|
- Library [DHTnew 0.4.20](https://github.com/RobTillaart/DHTNew)
|
||||||
|
|
||||||
What we need for functionality
|
What we need for functionality
|
||||||
- Supported versions of boards built on **ESP32/ESP32-S3** processors with a camera [here](#supported_boards)
|
- Supported versions of boards built on **ESP32/ESP32-S3** processors with a camera [here](#supported_boards)
|
||||||
|
|
@ -25,19 +26,20 @@ What we need for functionality
|
||||||
- WEB API [here](#rest)
|
- WEB API [here](#rest)
|
||||||
- Video stream [here](#stream)
|
- Video stream [here](#stream)
|
||||||
- Manual camera focus [here](#man_focus)
|
- Manual camera focus [here](#man_focus)
|
||||||
|
- External temperature sensor DHT22/DHT11 [here](#ext_temp)
|
||||||
- Potential issue [here](#issue)
|
- Potential issue [here](#issue)
|
||||||
|
|
||||||
<a name="supported_boards"></a>
|
<a name="supported_boards"></a>
|
||||||
## Supported boards
|
## Supported boards
|
||||||
|
|
||||||
| Board name | Support | Stream | Micro SD | FLASH LED | FW update | Documentation |
|
| Board name | Support | Stream | Micro SD | FLASH LED | FW update | DHT22/DHT11 | Documentation |
|
||||||
|---------------------------|-------------|--------|----------|-----------|-----------|----------------------------------------------|
|
|---------------------------|-------------|--------|----------|-----------|-----------|-------------|----------------------------------------------|
|
||||||
| Ai-Thinker ESP32-cam | Full | Yes | Yes | Board/Ext | Yes | [ here ](doc/AI_Thinker-ESP32-cam/README.md) |
|
| Ai-Thinker ESP32-cam | Full | Yes | Yes | Board/Ext | Yes | Yes | [ here ](doc/AI_Thinker-ESP32-cam/README.md) |
|
||||||
| ESP32-S3-EYE 2.2 | Full | Yes | Yes | External | Yes | [ here ](doc/ESP32-S3-EYE-22/README.md) |
|
| ESP32-S3-EYE 2.2 | Full | Yes | Yes | External | Yes | Yes | [ here ](doc/ESP32-S3-EYE-22/README.md) |
|
||||||
| Freenove ESP32-Wrover cam | Full | Yes | No | External | Yes | [ here ](doc/ESP32-Wrover-dev/README.md) |
|
| Freenove ESP32-Wrover cam | Full | Yes | No | External | Yes | Yes | [ here ](doc/ESP32-Wrover-dev/README.md) |
|
||||||
| ESP32-S3-DEV-CAM | in Progress | | | External | | [ here ](doc/ESP32-S3-DEV-CAM/README.md) |
|
| ESP32-S3-DEV-CAM | in Progress | | | External | | | [ here ](doc/ESP32-S3-DEV-CAM/README.md) |
|
||||||
| Seeed Studio XIAO ESP32S3 | in Progress | | | External | | [ here ](doc/XIAO_ESP32S3/README.md) |
|
| Seeed Studio XIAO ESP32S3 | Full | Yes | Yes | External | Yes | Yes | [ here ](doc/XIAO_ESP32S3/README.md) |
|
||||||
| ESP32-S3-CAM | in Progress | | | Board/Ext | | [ here ](doc/ESP32-S3-CAM/README.md) |
|
| ESP32-S3-CAM | Full | Yes | Yes | Board/Ext | Yes | Yes | [ here ](doc/ESP32-S3-CAM/README.md) |
|
||||||
|
|
||||||
The compiled firmware for each supported board is published with every release.
|
The compiled firmware for each supported board is published with every release.
|
||||||
|
|
||||||
|
|
@ -228,6 +230,8 @@ The camera have a WEB API, allowing several operations to be performed through t
|
||||||
| http://IP/action_reboot | Reboot MCU |
|
| http://IP/action_reboot | Reboot MCU |
|
||||||
| http://IP/get_logs | Get logs from micro SD card |
|
| http://IP/get_logs | Get logs from micro SD card |
|
||||||
| http://IP/saved-photo.jpg | Get last captured photo |
|
| http://IP/saved-photo.jpg | Get last captured photo |
|
||||||
|
| http://IP/get_temp | Get temperature from external sensor |
|
||||||
|
| http://IP/get_hum | Get humidity from external sensor |
|
||||||
|
|
||||||
<a name="stream"></a>
|
<a name="stream"></a>
|
||||||
## Video stream
|
## Video stream
|
||||||
|
|
@ -245,6 +249,29 @@ First, it is necessary to hold the camera with a holder and then put the wrench
|
||||||
|
|
||||||
**WARNING! Manual focusing can permanently damage the camera module!**
|
**WARNING! Manual focusing can permanently damage the camera module!**
|
||||||
|
|
||||||
|
<a name="ext_temp"></a>
|
||||||
|
## External temperature sensor
|
||||||
|
|
||||||
|
The software supports an external temperature sensor **DHT22** or **DHT11**. The sensor needs to be connected according to the manual for the specific version of the board. The temperature and humidity are automatically read every 30 seconds after the enable sensor.
|
||||||
|
|
||||||
|
<img src="doc/Sensori-DHT11-e-DHT22.jpg" width=40% height=40%>
|
||||||
|
|
||||||
|
Information about sensor
|
||||||
|
|
||||||
|
| | DHT11 | DHT22 |
|
||||||
|
|-------------------|--------------|------------------|
|
||||||
|
| Operating voltage | 3-5V | 3-5V |
|
||||||
|
| Max current | 2.5 mA | 2.5mA |
|
||||||
|
| Temperature range | 0-50°C ± 2°C | -40-80°C ± 0.5°C |
|
||||||
|
| Humidity range | 20-80% / 5% | 0-100% / 2-5% |
|
||||||
|
| Sampling rate | 1Hz | 0.5Hz |
|
||||||
|
|
||||||
|
It is necessary to use the **module**, **not the sensor**! The module with the sensor has a **4.7Kohm** resistor soldered onto the PCB, which is necessary for the proper functioning of the **one-wire bus**. If you use the sensor, it is necessary to connect a 4.7K ohm resistor to the one-wire bus as shown in the schematic below. **The module must be powered with 3.3V VCC, otherwise, it may damage the camera board.**
|
||||||
|
|
||||||
|
Here is a typical schematic for the DHT22 or DHT11 sensor:
|
||||||
|
|
||||||
|
<img src="doc/DHT22-Schematic.png" width=40% height=40%>
|
||||||
|
|
||||||
<a name="issue"></a>
|
<a name="issue"></a>
|
||||||
## Potential issue
|
## Potential issue
|
||||||
|
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 65 KiB |
|
|
@ -12,6 +12,7 @@ What we need for functionality
|
||||||
- Issue with FLASH LED on the main board [here](#led_issue)
|
- Issue with FLASH LED on the main board [here](#led_issue)
|
||||||
- External WiFi antenna [here](#ext_wifi)
|
- External WiFi antenna [here](#ext_wifi)
|
||||||
- Power supply [here](#power_supply)
|
- Power supply [here](#power_supply)
|
||||||
|
- External temperature sensor DHT22/DHT11 [here](#ext_sens)
|
||||||
- Potential issue [here](#issue)
|
- Potential issue [here](#issue)
|
||||||
|
|
||||||
<a name="esp32"></a>
|
<a name="esp32"></a>
|
||||||
|
|
@ -233,6 +234,19 @@ The standard ESP32-CAM board utilizes an internal antenna on the PCB. However, t
|
||||||
|
|
||||||
The device requires a 5V power supply, with a maximum current consumption of 2A. Power is supplied via a micro USB connector when using the original programmer.
|
The device requires a 5V power supply, with a maximum current consumption of 2A. Power is supplied via a micro USB connector when using the original programmer.
|
||||||
|
|
||||||
|
<a name="ext_sens"></a>
|
||||||
|
## External temperature sensor DHT22/DHT11
|
||||||
|
|
||||||
|
Below you will find the wiring diagram for the DHT22 or DHT11 sensor.
|
||||||
|
|
||||||
|
| Camera board | DHT22/DHT11 |
|
||||||
|
|--------------|-------------|
|
||||||
|
| 3.3V | VCC |
|
||||||
|
| GND | GND |
|
||||||
|
| IO13 | Data |
|
||||||
|
|
||||||
|
<img src="ESP32-cam dht22_bb.png" width=40% height=40%>
|
||||||
|
|
||||||
<a name="issue"></a>
|
<a name="issue"></a>
|
||||||
## Potential issue with this board
|
## Potential issue with this board
|
||||||
|
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
|
@ -0,0 +1,157 @@
|
||||||
|
#include "esp_camera.h"
|
||||||
|
#include <WiFi.h>
|
||||||
|
|
||||||
|
//
|
||||||
|
// WARNING!!! PSRAM IC required for UXGA resolution and high JPEG quality
|
||||||
|
// Ensure ESP32 Wrover Module or other board with PSRAM is selected
|
||||||
|
// Partial images will be transmitted if image exceeds buffer size
|
||||||
|
//
|
||||||
|
// You must select partition scheme from the board menu that has at least 3MB APP space.
|
||||||
|
// Face Recognition is DISABLED for ESP32 and ESP32-S2, because it takes up from 15
|
||||||
|
// seconds to process single frame. Face Detection is ENABLED if PSRAM is enabled as well
|
||||||
|
|
||||||
|
// ===================
|
||||||
|
// Select camera model
|
||||||
|
// ===================
|
||||||
|
//#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
|
||||||
|
//#define CAMERA_MODEL_ESP_EYE // Has PSRAM
|
||||||
|
#define CAMERA_MODEL_ESP32S3_EYE // Has PSRAM
|
||||||
|
//#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
|
||||||
|
//#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM
|
||||||
|
//#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM
|
||||||
|
//#define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM
|
||||||
|
//#define CAMERA_MODEL_M5STACK_UNITCAM // No PSRAM
|
||||||
|
//#define CAMERA_MODEL_AI_THINKER // Has PSRAM
|
||||||
|
//#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM
|
||||||
|
//#define CAMERA_MODEL_XIAO_ESP32S3 // Has PSRAM
|
||||||
|
// ** Espressif Internal Boards **
|
||||||
|
//#define CAMERA_MODEL_ESP32_CAM_BOARD
|
||||||
|
//#define CAMERA_MODEL_ESP32S2_CAM_BOARD
|
||||||
|
//#define CAMERA_MODEL_ESP32S3_CAM_LCD
|
||||||
|
//#define CAMERA_MODEL_DFRobot_FireBeetle2_ESP32S3 // Has PSRAM
|
||||||
|
//#define CAMERA_MODEL_DFRobot_Romeo_ESP32S3 // Has PSRAM
|
||||||
|
#include "camera_pins.h"
|
||||||
|
|
||||||
|
// ===========================
|
||||||
|
// Enter your WiFi credentials
|
||||||
|
// ===========================
|
||||||
|
const char* ssid = "sparkleiot";
|
||||||
|
const char* password = "12345678";
|
||||||
|
|
||||||
|
void startCameraServer();
|
||||||
|
void setupLedFlash(int pin);
|
||||||
|
|
||||||
|
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_sccb_sda = SIOD_GPIO_NUM;
|
||||||
|
config.pin_sccb_scl = SIOC_GPIO_NUM;
|
||||||
|
config.pin_pwdn = PWDN_GPIO_NUM;
|
||||||
|
config.pin_reset = RESET_GPIO_NUM;
|
||||||
|
config.xclk_freq_hz = 20000000;
|
||||||
|
config.frame_size = FRAMESIZE_QVGA;
|
||||||
|
//config.pixel_format = PIXFORMAT_JPEG; // for streaming
|
||||||
|
config.pixel_format = PIXFORMAT_RGB565; // for face detection/recognition
|
||||||
|
config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
|
||||||
|
config.fb_location = CAMERA_FB_IN_PSRAM;
|
||||||
|
config.jpeg_quality = 12;
|
||||||
|
config.fb_count = 1;
|
||||||
|
|
||||||
|
// if PSRAM IC present, init with UXGA resolution and higher JPEG quality
|
||||||
|
// for larger pre-allocated frame buffer.
|
||||||
|
if(config.pixel_format == PIXFORMAT_JPEG){
|
||||||
|
if(psramFound()){
|
||||||
|
config.jpeg_quality = 10;
|
||||||
|
config.fb_count = 2;
|
||||||
|
config.grab_mode = CAMERA_GRAB_LATEST;
|
||||||
|
} else {
|
||||||
|
// Limit the frame size when PSRAM is not available
|
||||||
|
config.frame_size = FRAMESIZE_SVGA;
|
||||||
|
config.fb_location = CAMERA_FB_IN_DRAM;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Best option for face detection/recognition
|
||||||
|
config.frame_size = FRAMESIZE_QVGA;
|
||||||
|
#if CONFIG_IDF_TARGET_ESP32S3
|
||||||
|
config.fb_count = 2;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#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 brightness just a bit
|
||||||
|
s->set_saturation(s, -2); // lower the saturation
|
||||||
|
}
|
||||||
|
// drop down frame size for higher initial frame rate
|
||||||
|
if(config.pixel_format == PIXFORMAT_JPEG){
|
||||||
|
s->set_framesize(s, FRAMESIZE_QVGA);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(CAMERA_MODEL_M5STACK_WIDE) || defined(CAMERA_MODEL_M5STACK_ESP32CAM)
|
||||||
|
s->set_vflip(s, 1);
|
||||||
|
s->set_hmirror(s, 1);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(CAMERA_MODEL_ESP32S3_EYE)
|
||||||
|
s->set_vflip(s, 1);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Setup LED FLash if LED pin is defined in camera_pins.h
|
||||||
|
#if defined(LED_GPIO_NUM)
|
||||||
|
setupLedFlash(LED_GPIO_NUM);
|
||||||
|
#endif
|
||||||
|
Serial.println("The device needs to be linked to a 2.4G router........");
|
||||||
|
Serial.println("SSSID:sparkleiot");
|
||||||
|
Serial.println("Password:12345678");
|
||||||
|
WiFi.begin(ssid, password);
|
||||||
|
WiFi.setSleep(false);
|
||||||
|
|
||||||
|
while (WiFi.status() != WL_CONNECTED) {
|
||||||
|
delay(500);
|
||||||
|
Serial.print(".");
|
||||||
|
}
|
||||||
|
Serial.println("");
|
||||||
|
Serial.println("WiFi connected");
|
||||||
|
|
||||||
|
startCameraServer();
|
||||||
|
|
||||||
|
Serial.print("Camera Ready! Use 'http://");
|
||||||
|
Serial.print(WiFi.localIP());
|
||||||
|
Serial.println("' to connect");
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
// Do nothing. Everything is done in another task by the web server
|
||||||
|
delay(10000);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,318 @@
|
||||||
|
|
||||||
|
#if defined(CAMERA_MODEL_WROVER_KIT)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM -1
|
||||||
|
#define XCLK_GPIO_NUM 21
|
||||||
|
#define SIOD_GPIO_NUM 26
|
||||||
|
#define SIOC_GPIO_NUM 27
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 35
|
||||||
|
#define Y8_GPIO_NUM 34
|
||||||
|
#define Y7_GPIO_NUM 39
|
||||||
|
#define Y6_GPIO_NUM 36
|
||||||
|
#define Y5_GPIO_NUM 19
|
||||||
|
#define Y4_GPIO_NUM 18
|
||||||
|
#define Y3_GPIO_NUM 5
|
||||||
|
#define Y2_GPIO_NUM 4
|
||||||
|
#define VSYNC_GPIO_NUM 25
|
||||||
|
#define HREF_GPIO_NUM 23
|
||||||
|
#define PCLK_GPIO_NUM 22
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_ESP_EYE)
|
||||||
|
#define PWDN_GPIO_NUM 32
|
||||||
|
#define RESET_GPIO_NUM -1
|
||||||
|
#define XCLK_GPIO_NUM 0
|
||||||
|
#define SIOD_GPIO_NUM 26
|
||||||
|
#define SIOC_GPIO_NUM 27
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 35
|
||||||
|
#define Y8_GPIO_NUM 34
|
||||||
|
#define Y7_GPIO_NUM 39
|
||||||
|
#define Y6_GPIO_NUM 36
|
||||||
|
#define Y5_GPIO_NUM 21
|
||||||
|
#define Y4_GPIO_NUM 19
|
||||||
|
#define Y3_GPIO_NUM 18
|
||||||
|
#define Y2_GPIO_NUM 5
|
||||||
|
#define VSYNC_GPIO_NUM 25
|
||||||
|
#define HREF_GPIO_NUM 23
|
||||||
|
#define PCLK_GPIO_NUM 22
|
||||||
|
|
||||||
|
// 4 for flash led or 33 for normal led
|
||||||
|
#define LED_GPIO_NUM 4
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_M5STACK_PSRAM)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM 15
|
||||||
|
#define XCLK_GPIO_NUM 27
|
||||||
|
#define SIOD_GPIO_NUM 25
|
||||||
|
#define SIOC_GPIO_NUM 23
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 19
|
||||||
|
#define Y8_GPIO_NUM 36
|
||||||
|
#define Y7_GPIO_NUM 18
|
||||||
|
#define Y6_GPIO_NUM 39
|
||||||
|
#define Y5_GPIO_NUM 5
|
||||||
|
#define Y4_GPIO_NUM 34
|
||||||
|
#define Y3_GPIO_NUM 35
|
||||||
|
#define Y2_GPIO_NUM 32
|
||||||
|
#define VSYNC_GPIO_NUM 22
|
||||||
|
#define HREF_GPIO_NUM 26
|
||||||
|
#define PCLK_GPIO_NUM 21
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_M5STACK_V2_PSRAM)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM 15
|
||||||
|
#define XCLK_GPIO_NUM 27
|
||||||
|
#define SIOD_GPIO_NUM 22
|
||||||
|
#define SIOC_GPIO_NUM 23
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 19
|
||||||
|
#define Y8_GPIO_NUM 36
|
||||||
|
#define Y7_GPIO_NUM 18
|
||||||
|
#define Y6_GPIO_NUM 39
|
||||||
|
#define Y5_GPIO_NUM 5
|
||||||
|
#define Y4_GPIO_NUM 34
|
||||||
|
#define Y3_GPIO_NUM 35
|
||||||
|
#define Y2_GPIO_NUM 32
|
||||||
|
#define VSYNC_GPIO_NUM 25
|
||||||
|
#define HREF_GPIO_NUM 26
|
||||||
|
#define PCLK_GPIO_NUM 21
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_M5STACK_WIDE)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM 15
|
||||||
|
#define XCLK_GPIO_NUM 27
|
||||||
|
#define SIOD_GPIO_NUM 22
|
||||||
|
#define SIOC_GPIO_NUM 23
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 19
|
||||||
|
#define Y8_GPIO_NUM 36
|
||||||
|
#define Y7_GPIO_NUM 18
|
||||||
|
#define Y6_GPIO_NUM 39
|
||||||
|
#define Y5_GPIO_NUM 5
|
||||||
|
#define Y4_GPIO_NUM 34
|
||||||
|
#define Y3_GPIO_NUM 35
|
||||||
|
#define Y2_GPIO_NUM 32
|
||||||
|
#define VSYNC_GPIO_NUM 25
|
||||||
|
#define HREF_GPIO_NUM 26
|
||||||
|
#define PCLK_GPIO_NUM 21
|
||||||
|
|
||||||
|
#define LED_GPIO_NUM 2
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_M5STACK_ESP32CAM)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM 15
|
||||||
|
#define XCLK_GPIO_NUM 27
|
||||||
|
#define SIOD_GPIO_NUM 25
|
||||||
|
#define SIOC_GPIO_NUM 23
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 19
|
||||||
|
#define Y8_GPIO_NUM 36
|
||||||
|
#define Y7_GPIO_NUM 18
|
||||||
|
#define Y6_GPIO_NUM 39
|
||||||
|
#define Y5_GPIO_NUM 5
|
||||||
|
#define Y4_GPIO_NUM 34
|
||||||
|
#define Y3_GPIO_NUM 35
|
||||||
|
#define Y2_GPIO_NUM 17
|
||||||
|
#define VSYNC_GPIO_NUM 22
|
||||||
|
#define HREF_GPIO_NUM 26
|
||||||
|
#define PCLK_GPIO_NUM 21
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_M5STACK_UNITCAM)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM 15
|
||||||
|
#define XCLK_GPIO_NUM 27
|
||||||
|
#define SIOD_GPIO_NUM 25
|
||||||
|
#define SIOC_GPIO_NUM 23
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 19
|
||||||
|
#define Y8_GPIO_NUM 36
|
||||||
|
#define Y7_GPIO_NUM 18
|
||||||
|
#define Y6_GPIO_NUM 39
|
||||||
|
#define Y5_GPIO_NUM 5
|
||||||
|
#define Y4_GPIO_NUM 34
|
||||||
|
#define Y3_GPIO_NUM 35
|
||||||
|
#define Y2_GPIO_NUM 32
|
||||||
|
#define VSYNC_GPIO_NUM 22
|
||||||
|
#define HREF_GPIO_NUM 26
|
||||||
|
#define PCLK_GPIO_NUM 21
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_AI_THINKER)
|
||||||
|
#define PWDN_GPIO_NUM 32
|
||||||
|
#define RESET_GPIO_NUM -1
|
||||||
|
#define XCLK_GPIO_NUM 0
|
||||||
|
#define SIOD_GPIO_NUM 26
|
||||||
|
#define SIOC_GPIO_NUM 27
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 35
|
||||||
|
#define Y8_GPIO_NUM 34
|
||||||
|
#define Y7_GPIO_NUM 39
|
||||||
|
#define Y6_GPIO_NUM 36
|
||||||
|
#define Y5_GPIO_NUM 21
|
||||||
|
#define Y4_GPIO_NUM 19
|
||||||
|
#define Y3_GPIO_NUM 18
|
||||||
|
#define Y2_GPIO_NUM 5
|
||||||
|
#define VSYNC_GPIO_NUM 25
|
||||||
|
#define HREF_GPIO_NUM 23
|
||||||
|
#define PCLK_GPIO_NUM 22
|
||||||
|
|
||||||
|
// 4 for flash led or 33 for normal led
|
||||||
|
#define LED_GPIO_NUM 4
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_TTGO_T_JOURNAL)
|
||||||
|
#define PWDN_GPIO_NUM 0
|
||||||
|
#define RESET_GPIO_NUM 15
|
||||||
|
#define XCLK_GPIO_NUM 27
|
||||||
|
#define SIOD_GPIO_NUM 25
|
||||||
|
#define SIOC_GPIO_NUM 23
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 19
|
||||||
|
#define Y8_GPIO_NUM 36
|
||||||
|
#define Y7_GPIO_NUM 18
|
||||||
|
#define Y6_GPIO_NUM 39
|
||||||
|
#define Y5_GPIO_NUM 5
|
||||||
|
#define Y4_GPIO_NUM 34
|
||||||
|
#define Y3_GPIO_NUM 35
|
||||||
|
#define Y2_GPIO_NUM 17
|
||||||
|
#define VSYNC_GPIO_NUM 22
|
||||||
|
#define HREF_GPIO_NUM 26
|
||||||
|
#define PCLK_GPIO_NUM 21
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_XIAO_ESP32S3)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM -1
|
||||||
|
#define XCLK_GPIO_NUM 10
|
||||||
|
#define SIOD_GPIO_NUM 40
|
||||||
|
#define SIOC_GPIO_NUM 39
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 48
|
||||||
|
#define Y8_GPIO_NUM 11
|
||||||
|
#define Y7_GPIO_NUM 12
|
||||||
|
#define Y6_GPIO_NUM 14
|
||||||
|
#define Y5_GPIO_NUM 16
|
||||||
|
#define Y4_GPIO_NUM 18
|
||||||
|
#define Y3_GPIO_NUM 17
|
||||||
|
#define Y2_GPIO_NUM 15
|
||||||
|
#define VSYNC_GPIO_NUM 38
|
||||||
|
#define HREF_GPIO_NUM 47
|
||||||
|
#define PCLK_GPIO_NUM 13
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_ESP32_CAM_BOARD)
|
||||||
|
// The 18 pin header on the board has Y5 and Y3 swapped
|
||||||
|
#define USE_BOARD_HEADER 0
|
||||||
|
#define PWDN_GPIO_NUM 32
|
||||||
|
#define RESET_GPIO_NUM 33
|
||||||
|
#define XCLK_GPIO_NUM 4
|
||||||
|
#define SIOD_GPIO_NUM 18
|
||||||
|
#define SIOC_GPIO_NUM 23
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 36
|
||||||
|
#define Y8_GPIO_NUM 19
|
||||||
|
#define Y7_GPIO_NUM 21
|
||||||
|
#define Y6_GPIO_NUM 39
|
||||||
|
#if USE_BOARD_HEADER
|
||||||
|
#define Y5_GPIO_NUM 13
|
||||||
|
#else
|
||||||
|
#define Y5_GPIO_NUM 35
|
||||||
|
#endif
|
||||||
|
#define Y4_GPIO_NUM 14
|
||||||
|
#if USE_BOARD_HEADER
|
||||||
|
#define Y3_GPIO_NUM 35
|
||||||
|
#else
|
||||||
|
#define Y3_GPIO_NUM 13
|
||||||
|
#endif
|
||||||
|
#define Y2_GPIO_NUM 34
|
||||||
|
#define VSYNC_GPIO_NUM 5
|
||||||
|
#define HREF_GPIO_NUM 27
|
||||||
|
#define PCLK_GPIO_NUM 25
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_ESP32S3_CAM_LCD)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM -1
|
||||||
|
#define XCLK_GPIO_NUM 40
|
||||||
|
#define SIOD_GPIO_NUM 17
|
||||||
|
#define SIOC_GPIO_NUM 18
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 39
|
||||||
|
#define Y8_GPIO_NUM 41
|
||||||
|
#define Y7_GPIO_NUM 42
|
||||||
|
#define Y6_GPIO_NUM 12
|
||||||
|
#define Y5_GPIO_NUM 3
|
||||||
|
#define Y4_GPIO_NUM 14
|
||||||
|
#define Y3_GPIO_NUM 47
|
||||||
|
#define Y2_GPIO_NUM 13
|
||||||
|
#define VSYNC_GPIO_NUM 21
|
||||||
|
#define HREF_GPIO_NUM 38
|
||||||
|
#define PCLK_GPIO_NUM 11
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_ESP32S2_CAM_BOARD)
|
||||||
|
// The 18 pin header on the board has Y5 and Y3 swapped
|
||||||
|
#define USE_BOARD_HEADER 0
|
||||||
|
#define PWDN_GPIO_NUM 1
|
||||||
|
#define RESET_GPIO_NUM 2
|
||||||
|
#define XCLK_GPIO_NUM 42
|
||||||
|
#define SIOD_GPIO_NUM 41
|
||||||
|
#define SIOC_GPIO_NUM 18
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 16
|
||||||
|
#define Y8_GPIO_NUM 39
|
||||||
|
#define Y7_GPIO_NUM 40
|
||||||
|
#define Y6_GPIO_NUM 15
|
||||||
|
#if USE_BOARD_HEADER
|
||||||
|
#define Y5_GPIO_NUM 12
|
||||||
|
#else
|
||||||
|
#define Y5_GPIO_NUM 13
|
||||||
|
#endif
|
||||||
|
#define Y4_GPIO_NUM 5
|
||||||
|
#if USE_BOARD_HEADER
|
||||||
|
#define Y3_GPIO_NUM 13
|
||||||
|
#else
|
||||||
|
#define Y3_GPIO_NUM 12
|
||||||
|
#endif
|
||||||
|
#define Y2_GPIO_NUM 14
|
||||||
|
#define VSYNC_GPIO_NUM 38
|
||||||
|
#define HREF_GPIO_NUM 4
|
||||||
|
#define PCLK_GPIO_NUM 3
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_ESP32S3_EYE)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM -1
|
||||||
|
#define XCLK_GPIO_NUM 15
|
||||||
|
#define SIOD_GPIO_NUM 4
|
||||||
|
#define SIOC_GPIO_NUM 5
|
||||||
|
|
||||||
|
#define Y2_GPIO_NUM 11
|
||||||
|
#define Y3_GPIO_NUM 9
|
||||||
|
#define Y4_GPIO_NUM 8
|
||||||
|
#define Y5_GPIO_NUM 10
|
||||||
|
#define Y6_GPIO_NUM 12
|
||||||
|
#define Y7_GPIO_NUM 18
|
||||||
|
#define Y8_GPIO_NUM 17
|
||||||
|
#define Y9_GPIO_NUM 16
|
||||||
|
|
||||||
|
#define VSYNC_GPIO_NUM 6
|
||||||
|
#define HREF_GPIO_NUM 7
|
||||||
|
#define PCLK_GPIO_NUM 13
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_DFRobot_FireBeetle2_ESP32S3) || defined(CAMERA_MODEL_DFRobot_Romeo_ESP32S3)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM -1
|
||||||
|
#define XCLK_GPIO_NUM 45
|
||||||
|
#define SIOD_GPIO_NUM 1
|
||||||
|
#define SIOC_GPIO_NUM 2
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 48
|
||||||
|
#define Y8_GPIO_NUM 46
|
||||||
|
#define Y7_GPIO_NUM 8
|
||||||
|
#define Y6_GPIO_NUM 7
|
||||||
|
#define Y5_GPIO_NUM 4
|
||||||
|
#define Y4_GPIO_NUM 41
|
||||||
|
#define Y3_GPIO_NUM 40
|
||||||
|
#define Y2_GPIO_NUM 39
|
||||||
|
#define VSYNC_GPIO_NUM 6
|
||||||
|
#define HREF_GPIO_NUM 42
|
||||||
|
#define PCLK_GPIO_NUM 5
|
||||||
|
|
||||||
|
#else
|
||||||
|
#error "Camera model not selected"
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Name, Type, SubType, Offset, Size, Flags
|
||||||
|
nvs, data, nvs, 0x9000, 0x5000,
|
||||||
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
|
app0, app, ota_0, 0x10000, 0x3d0000,
|
||||||
|
fr, data, , 0x3e0000, 0x20000,
|
||||||
|
|
|
@ -0,0 +1,157 @@
|
||||||
|
#include "esp_camera.h"
|
||||||
|
#include <WiFi.h>
|
||||||
|
|
||||||
|
//
|
||||||
|
// WARNING!!! PSRAM IC required for UXGA resolution and high JPEG quality
|
||||||
|
// Ensure ESP32 Wrover Module or other board with PSRAM is selected
|
||||||
|
// Partial images will be transmitted if image exceeds buffer size
|
||||||
|
//
|
||||||
|
// You must select partition scheme from the board menu that has at least 3MB APP space.
|
||||||
|
// Face Recognition is DISABLED for ESP32 and ESP32-S2, because it takes up from 15
|
||||||
|
// seconds to process single frame. Face Detection is ENABLED if PSRAM is enabled as well
|
||||||
|
|
||||||
|
// ===================
|
||||||
|
// Select camera model
|
||||||
|
// ===================
|
||||||
|
//#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
|
||||||
|
//#define CAMERA_MODEL_ESP_EYE // Has PSRAM
|
||||||
|
//define CAMERA_MODEL_ESP32S3_EYE // Has PSRAM
|
||||||
|
//#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
|
||||||
|
//#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM
|
||||||
|
//#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM
|
||||||
|
//#define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM
|
||||||
|
//#define CAMERA_MODEL_M5STACK_UNITCAM // No PSRAM
|
||||||
|
#define CAMERA_MODEL_AI_THINKER // Has PSRAM
|
||||||
|
//#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM
|
||||||
|
//#define CAMERA_MODEL_XIAO_ESP32S3 // Has PSRAM
|
||||||
|
// ** Espressif Internal Boards **
|
||||||
|
//#define CAMERA_MODEL_ESP32_CAM_BOARD
|
||||||
|
//#define CAMERA_MODEL_ESP32S2_CAM_BOARD
|
||||||
|
//#define CAMERA_MODEL_ESP32S3_CAM_LCD
|
||||||
|
//#define CAMERA_MODEL_DFRobot_FireBeetle2_ESP32S3 // Has PSRAM
|
||||||
|
//#define CAMERA_MODEL_DFRobot_Romeo_ESP32S3 // Has PSRAM
|
||||||
|
#include "camera_pins.h"
|
||||||
|
|
||||||
|
// ===========================
|
||||||
|
// Enter your WiFi credentials
|
||||||
|
// ===========================
|
||||||
|
const char* ssid = "sparkleiot";
|
||||||
|
const char* password = "12345678";
|
||||||
|
|
||||||
|
void startCameraServer();
|
||||||
|
void setupLedFlash(int pin);
|
||||||
|
|
||||||
|
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_sccb_sda = SIOD_GPIO_NUM;
|
||||||
|
config.pin_sccb_scl = SIOC_GPIO_NUM;
|
||||||
|
config.pin_pwdn = PWDN_GPIO_NUM;
|
||||||
|
config.pin_reset = RESET_GPIO_NUM;
|
||||||
|
config.xclk_freq_hz = 20000000;
|
||||||
|
config.frame_size = FRAMESIZE_QVGA;
|
||||||
|
//config.pixel_format = PIXFORMAT_JPEG; // for streaming
|
||||||
|
config.pixel_format = PIXFORMAT_RGB565; // for face detection/recognition
|
||||||
|
config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
|
||||||
|
config.fb_location = CAMERA_FB_IN_PSRAM;
|
||||||
|
config.jpeg_quality = 12;
|
||||||
|
config.fb_count = 1;
|
||||||
|
|
||||||
|
// if PSRAM IC present, init with UXGA resolution and higher JPEG quality
|
||||||
|
// for larger pre-allocated frame buffer.
|
||||||
|
if(config.pixel_format == PIXFORMAT_JPEG){
|
||||||
|
if(psramFound()){
|
||||||
|
config.jpeg_quality = 10;
|
||||||
|
config.fb_count = 2;
|
||||||
|
config.grab_mode = CAMERA_GRAB_LATEST;
|
||||||
|
} else {
|
||||||
|
// Limit the frame size when PSRAM is not available
|
||||||
|
config.frame_size = FRAMESIZE_SVGA;
|
||||||
|
config.fb_location = CAMERA_FB_IN_DRAM;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Best option for face detection/recognition
|
||||||
|
config.frame_size = FRAMESIZE_QVGA;
|
||||||
|
#if CONFIG_IDF_TARGET_ESP32S3
|
||||||
|
config.fb_count = 2;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#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 brightness just a bit
|
||||||
|
s->set_saturation(s, -2); // lower the saturation
|
||||||
|
}
|
||||||
|
// drop down frame size for higher initial frame rate
|
||||||
|
if(config.pixel_format == PIXFORMAT_JPEG){
|
||||||
|
s->set_framesize(s, FRAMESIZE_QVGA);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(CAMERA_MODEL_M5STACK_WIDE) || defined(CAMERA_MODEL_M5STACK_ESP32CAM)
|
||||||
|
s->set_vflip(s, 1);
|
||||||
|
s->set_hmirror(s, 1);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(CAMERA_MODEL_ESP32S3_EYE)
|
||||||
|
s->set_vflip(s, 1);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Setup LED FLash if LED pin is defined in camera_pins.h
|
||||||
|
#if defined(LED_GPIO_NUM)
|
||||||
|
setupLedFlash(LED_GPIO_NUM);
|
||||||
|
#endif
|
||||||
|
Serial.println("The device needs to be linked to a 2.4G router........");
|
||||||
|
Serial.println("SSSID:sparkleiot");
|
||||||
|
Serial.println("Password:12345678");
|
||||||
|
WiFi.begin(ssid, password);
|
||||||
|
WiFi.setSleep(false);
|
||||||
|
|
||||||
|
while (WiFi.status() != WL_CONNECTED) {
|
||||||
|
delay(500);
|
||||||
|
Serial.print(".");
|
||||||
|
}
|
||||||
|
Serial.println("");
|
||||||
|
Serial.println("WiFi connected");
|
||||||
|
|
||||||
|
startCameraServer();
|
||||||
|
|
||||||
|
Serial.print("Camera Ready! Use 'http://");
|
||||||
|
Serial.print(WiFi.localIP());
|
||||||
|
Serial.println("' to connect");
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
// Do nothing. Everything is done in another task by the web server
|
||||||
|
delay(10000);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,318 @@
|
||||||
|
|
||||||
|
#if defined(CAMERA_MODEL_WROVER_KIT)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM -1
|
||||||
|
#define XCLK_GPIO_NUM 21
|
||||||
|
#define SIOD_GPIO_NUM 26
|
||||||
|
#define SIOC_GPIO_NUM 27
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 35
|
||||||
|
#define Y8_GPIO_NUM 34
|
||||||
|
#define Y7_GPIO_NUM 39
|
||||||
|
#define Y6_GPIO_NUM 36
|
||||||
|
#define Y5_GPIO_NUM 19
|
||||||
|
#define Y4_GPIO_NUM 18
|
||||||
|
#define Y3_GPIO_NUM 5
|
||||||
|
#define Y2_GPIO_NUM 4
|
||||||
|
#define VSYNC_GPIO_NUM 25
|
||||||
|
#define HREF_GPIO_NUM 23
|
||||||
|
#define PCLK_GPIO_NUM 22
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_ESP_EYE)
|
||||||
|
#define PWDN_GPIO_NUM 32
|
||||||
|
#define RESET_GPIO_NUM -1
|
||||||
|
#define XCLK_GPIO_NUM 0
|
||||||
|
#define SIOD_GPIO_NUM 26
|
||||||
|
#define SIOC_GPIO_NUM 27
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 35
|
||||||
|
#define Y8_GPIO_NUM 34
|
||||||
|
#define Y7_GPIO_NUM 39
|
||||||
|
#define Y6_GPIO_NUM 36
|
||||||
|
#define Y5_GPIO_NUM 21
|
||||||
|
#define Y4_GPIO_NUM 19
|
||||||
|
#define Y3_GPIO_NUM 18
|
||||||
|
#define Y2_GPIO_NUM 5
|
||||||
|
#define VSYNC_GPIO_NUM 25
|
||||||
|
#define HREF_GPIO_NUM 23
|
||||||
|
#define PCLK_GPIO_NUM 22
|
||||||
|
|
||||||
|
// 4 for flash led or 33 for normal led
|
||||||
|
#define LED_GPIO_NUM 4
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_M5STACK_PSRAM)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM 15
|
||||||
|
#define XCLK_GPIO_NUM 27
|
||||||
|
#define SIOD_GPIO_NUM 25
|
||||||
|
#define SIOC_GPIO_NUM 23
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 19
|
||||||
|
#define Y8_GPIO_NUM 36
|
||||||
|
#define Y7_GPIO_NUM 18
|
||||||
|
#define Y6_GPIO_NUM 39
|
||||||
|
#define Y5_GPIO_NUM 5
|
||||||
|
#define Y4_GPIO_NUM 34
|
||||||
|
#define Y3_GPIO_NUM 35
|
||||||
|
#define Y2_GPIO_NUM 32
|
||||||
|
#define VSYNC_GPIO_NUM 22
|
||||||
|
#define HREF_GPIO_NUM 26
|
||||||
|
#define PCLK_GPIO_NUM 21
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_M5STACK_V2_PSRAM)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM 15
|
||||||
|
#define XCLK_GPIO_NUM 27
|
||||||
|
#define SIOD_GPIO_NUM 22
|
||||||
|
#define SIOC_GPIO_NUM 23
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 19
|
||||||
|
#define Y8_GPIO_NUM 36
|
||||||
|
#define Y7_GPIO_NUM 18
|
||||||
|
#define Y6_GPIO_NUM 39
|
||||||
|
#define Y5_GPIO_NUM 5
|
||||||
|
#define Y4_GPIO_NUM 34
|
||||||
|
#define Y3_GPIO_NUM 35
|
||||||
|
#define Y2_GPIO_NUM 32
|
||||||
|
#define VSYNC_GPIO_NUM 25
|
||||||
|
#define HREF_GPIO_NUM 26
|
||||||
|
#define PCLK_GPIO_NUM 21
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_M5STACK_WIDE)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM 15
|
||||||
|
#define XCLK_GPIO_NUM 27
|
||||||
|
#define SIOD_GPIO_NUM 22
|
||||||
|
#define SIOC_GPIO_NUM 23
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 19
|
||||||
|
#define Y8_GPIO_NUM 36
|
||||||
|
#define Y7_GPIO_NUM 18
|
||||||
|
#define Y6_GPIO_NUM 39
|
||||||
|
#define Y5_GPIO_NUM 5
|
||||||
|
#define Y4_GPIO_NUM 34
|
||||||
|
#define Y3_GPIO_NUM 35
|
||||||
|
#define Y2_GPIO_NUM 32
|
||||||
|
#define VSYNC_GPIO_NUM 25
|
||||||
|
#define HREF_GPIO_NUM 26
|
||||||
|
#define PCLK_GPIO_NUM 21
|
||||||
|
|
||||||
|
#define LED_GPIO_NUM 2
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_M5STACK_ESP32CAM)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM 15
|
||||||
|
#define XCLK_GPIO_NUM 27
|
||||||
|
#define SIOD_GPIO_NUM 25
|
||||||
|
#define SIOC_GPIO_NUM 23
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 19
|
||||||
|
#define Y8_GPIO_NUM 36
|
||||||
|
#define Y7_GPIO_NUM 18
|
||||||
|
#define Y6_GPIO_NUM 39
|
||||||
|
#define Y5_GPIO_NUM 5
|
||||||
|
#define Y4_GPIO_NUM 34
|
||||||
|
#define Y3_GPIO_NUM 35
|
||||||
|
#define Y2_GPIO_NUM 17
|
||||||
|
#define VSYNC_GPIO_NUM 22
|
||||||
|
#define HREF_GPIO_NUM 26
|
||||||
|
#define PCLK_GPIO_NUM 21
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_M5STACK_UNITCAM)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM 15
|
||||||
|
#define XCLK_GPIO_NUM 27
|
||||||
|
#define SIOD_GPIO_NUM 25
|
||||||
|
#define SIOC_GPIO_NUM 23
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 19
|
||||||
|
#define Y8_GPIO_NUM 36
|
||||||
|
#define Y7_GPIO_NUM 18
|
||||||
|
#define Y6_GPIO_NUM 39
|
||||||
|
#define Y5_GPIO_NUM 5
|
||||||
|
#define Y4_GPIO_NUM 34
|
||||||
|
#define Y3_GPIO_NUM 35
|
||||||
|
#define Y2_GPIO_NUM 32
|
||||||
|
#define VSYNC_GPIO_NUM 22
|
||||||
|
#define HREF_GPIO_NUM 26
|
||||||
|
#define PCLK_GPIO_NUM 21
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_AI_THINKER)
|
||||||
|
#define PWDN_GPIO_NUM 32
|
||||||
|
#define RESET_GPIO_NUM -1
|
||||||
|
#define XCLK_GPIO_NUM 0
|
||||||
|
#define SIOD_GPIO_NUM 26
|
||||||
|
#define SIOC_GPIO_NUM 27
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 35
|
||||||
|
#define Y8_GPIO_NUM 34
|
||||||
|
#define Y7_GPIO_NUM 39
|
||||||
|
#define Y6_GPIO_NUM 36
|
||||||
|
#define Y5_GPIO_NUM 21
|
||||||
|
#define Y4_GPIO_NUM 19
|
||||||
|
#define Y3_GPIO_NUM 18
|
||||||
|
#define Y2_GPIO_NUM 5
|
||||||
|
#define VSYNC_GPIO_NUM 25
|
||||||
|
#define HREF_GPIO_NUM 23
|
||||||
|
#define PCLK_GPIO_NUM 22
|
||||||
|
|
||||||
|
// 4 for flash led or 33 for normal led
|
||||||
|
#define LED_GPIO_NUM 4
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_TTGO_T_JOURNAL)
|
||||||
|
#define PWDN_GPIO_NUM 0
|
||||||
|
#define RESET_GPIO_NUM 15
|
||||||
|
#define XCLK_GPIO_NUM 27
|
||||||
|
#define SIOD_GPIO_NUM 25
|
||||||
|
#define SIOC_GPIO_NUM 23
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 19
|
||||||
|
#define Y8_GPIO_NUM 36
|
||||||
|
#define Y7_GPIO_NUM 18
|
||||||
|
#define Y6_GPIO_NUM 39
|
||||||
|
#define Y5_GPIO_NUM 5
|
||||||
|
#define Y4_GPIO_NUM 34
|
||||||
|
#define Y3_GPIO_NUM 35
|
||||||
|
#define Y2_GPIO_NUM 17
|
||||||
|
#define VSYNC_GPIO_NUM 22
|
||||||
|
#define HREF_GPIO_NUM 26
|
||||||
|
#define PCLK_GPIO_NUM 21
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_XIAO_ESP32S3)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM -1
|
||||||
|
#define XCLK_GPIO_NUM 10
|
||||||
|
#define SIOD_GPIO_NUM 40
|
||||||
|
#define SIOC_GPIO_NUM 39
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 48
|
||||||
|
#define Y8_GPIO_NUM 11
|
||||||
|
#define Y7_GPIO_NUM 12
|
||||||
|
#define Y6_GPIO_NUM 14
|
||||||
|
#define Y5_GPIO_NUM 16
|
||||||
|
#define Y4_GPIO_NUM 18
|
||||||
|
#define Y3_GPIO_NUM 17
|
||||||
|
#define Y2_GPIO_NUM 15
|
||||||
|
#define VSYNC_GPIO_NUM 38
|
||||||
|
#define HREF_GPIO_NUM 47
|
||||||
|
#define PCLK_GPIO_NUM 13
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_ESP32_CAM_BOARD)
|
||||||
|
// The 18 pin header on the board has Y5 and Y3 swapped
|
||||||
|
#define USE_BOARD_HEADER 0
|
||||||
|
#define PWDN_GPIO_NUM 32
|
||||||
|
#define RESET_GPIO_NUM 33
|
||||||
|
#define XCLK_GPIO_NUM 4
|
||||||
|
#define SIOD_GPIO_NUM 18
|
||||||
|
#define SIOC_GPIO_NUM 23
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 36
|
||||||
|
#define Y8_GPIO_NUM 19
|
||||||
|
#define Y7_GPIO_NUM 21
|
||||||
|
#define Y6_GPIO_NUM 39
|
||||||
|
#if USE_BOARD_HEADER
|
||||||
|
#define Y5_GPIO_NUM 13
|
||||||
|
#else
|
||||||
|
#define Y5_GPIO_NUM 35
|
||||||
|
#endif
|
||||||
|
#define Y4_GPIO_NUM 14
|
||||||
|
#if USE_BOARD_HEADER
|
||||||
|
#define Y3_GPIO_NUM 35
|
||||||
|
#else
|
||||||
|
#define Y3_GPIO_NUM 13
|
||||||
|
#endif
|
||||||
|
#define Y2_GPIO_NUM 34
|
||||||
|
#define VSYNC_GPIO_NUM 5
|
||||||
|
#define HREF_GPIO_NUM 27
|
||||||
|
#define PCLK_GPIO_NUM 25
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_ESP32S3_CAM_LCD)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM -1
|
||||||
|
#define XCLK_GPIO_NUM 40
|
||||||
|
#define SIOD_GPIO_NUM 17
|
||||||
|
#define SIOC_GPIO_NUM 18
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 39
|
||||||
|
#define Y8_GPIO_NUM 41
|
||||||
|
#define Y7_GPIO_NUM 42
|
||||||
|
#define Y6_GPIO_NUM 12
|
||||||
|
#define Y5_GPIO_NUM 3
|
||||||
|
#define Y4_GPIO_NUM 14
|
||||||
|
#define Y3_GPIO_NUM 47
|
||||||
|
#define Y2_GPIO_NUM 13
|
||||||
|
#define VSYNC_GPIO_NUM 21
|
||||||
|
#define HREF_GPIO_NUM 38
|
||||||
|
#define PCLK_GPIO_NUM 11
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_ESP32S2_CAM_BOARD)
|
||||||
|
// The 18 pin header on the board has Y5 and Y3 swapped
|
||||||
|
#define USE_BOARD_HEADER 0
|
||||||
|
#define PWDN_GPIO_NUM 1
|
||||||
|
#define RESET_GPIO_NUM 2
|
||||||
|
#define XCLK_GPIO_NUM 42
|
||||||
|
#define SIOD_GPIO_NUM 41
|
||||||
|
#define SIOC_GPIO_NUM 18
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 16
|
||||||
|
#define Y8_GPIO_NUM 39
|
||||||
|
#define Y7_GPIO_NUM 40
|
||||||
|
#define Y6_GPIO_NUM 15
|
||||||
|
#if USE_BOARD_HEADER
|
||||||
|
#define Y5_GPIO_NUM 12
|
||||||
|
#else
|
||||||
|
#define Y5_GPIO_NUM 13
|
||||||
|
#endif
|
||||||
|
#define Y4_GPIO_NUM 5
|
||||||
|
#if USE_BOARD_HEADER
|
||||||
|
#define Y3_GPIO_NUM 13
|
||||||
|
#else
|
||||||
|
#define Y3_GPIO_NUM 12
|
||||||
|
#endif
|
||||||
|
#define Y2_GPIO_NUM 14
|
||||||
|
#define VSYNC_GPIO_NUM 38
|
||||||
|
#define HREF_GPIO_NUM 4
|
||||||
|
#define PCLK_GPIO_NUM 3
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_ESP32S3_EYE)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM -1
|
||||||
|
#define XCLK_GPIO_NUM 15
|
||||||
|
#define SIOD_GPIO_NUM 4
|
||||||
|
#define SIOC_GPIO_NUM 5
|
||||||
|
|
||||||
|
#define Y2_GPIO_NUM 11
|
||||||
|
#define Y3_GPIO_NUM 9
|
||||||
|
#define Y4_GPIO_NUM 8
|
||||||
|
#define Y5_GPIO_NUM 10
|
||||||
|
#define Y6_GPIO_NUM 12
|
||||||
|
#define Y7_GPIO_NUM 18
|
||||||
|
#define Y8_GPIO_NUM 17
|
||||||
|
#define Y9_GPIO_NUM 16
|
||||||
|
|
||||||
|
#define VSYNC_GPIO_NUM 6
|
||||||
|
#define HREF_GPIO_NUM 7
|
||||||
|
#define PCLK_GPIO_NUM 13
|
||||||
|
|
||||||
|
#elif defined(CAMERA_MODEL_DFRobot_FireBeetle2_ESP32S3) || defined(CAMERA_MODEL_DFRobot_Romeo_ESP32S3)
|
||||||
|
#define PWDN_GPIO_NUM -1
|
||||||
|
#define RESET_GPIO_NUM -1
|
||||||
|
#define XCLK_GPIO_NUM 45
|
||||||
|
#define SIOD_GPIO_NUM 1
|
||||||
|
#define SIOC_GPIO_NUM 2
|
||||||
|
|
||||||
|
#define Y9_GPIO_NUM 48
|
||||||
|
#define Y8_GPIO_NUM 46
|
||||||
|
#define Y7_GPIO_NUM 8
|
||||||
|
#define Y6_GPIO_NUM 7
|
||||||
|
#define Y5_GPIO_NUM 4
|
||||||
|
#define Y4_GPIO_NUM 41
|
||||||
|
#define Y3_GPIO_NUM 40
|
||||||
|
#define Y2_GPIO_NUM 39
|
||||||
|
#define VSYNC_GPIO_NUM 6
|
||||||
|
#define HREF_GPIO_NUM 42
|
||||||
|
#define PCLK_GPIO_NUM 5
|
||||||
|
|
||||||
|
#else
|
||||||
|
#error "Camera model not selected"
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Name, Type, SubType, Offset, Size, Flags
|
||||||
|
nvs, data, nvs, 0x9000, 0x5000,
|
||||||
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
|
app0, app, ota_0, 0x10000, 0x3d0000,
|
||||||
|
fr, data, , 0x3e0000, 0x20000,
|
||||||
|
|
After Width: | Height: | Size: 60 KiB |
|
|
@ -1,5 +1,200 @@
|
||||||
# ESP32-S3-CAM
|
# ESP32-S3-CAM
|
||||||
|
|
||||||
In progress
|
What we need for functionality
|
||||||
|
- ESP32-S3-CAM board with OV2640 camera module [ here ](#esp32)
|
||||||
|
- Supported camera modules [here](#cam_modules)
|
||||||
|
- Module board version [here](#different_mcu)
|
||||||
|
- How to flash binary files to board from Linux/MAC/Windows [ here ](#flash_fw)
|
||||||
|
- How to compile software in the Arduino IDE [ here ](#arduino_cfg)
|
||||||
|
- How to reset the configuration to factory settings [here](#factory_cfg)
|
||||||
|
- Status LED [ here ](#status_led)
|
||||||
|
- Schematic main board is [here](#schematic)
|
||||||
|
- External FLASH LED [here](#led_issue)
|
||||||
|
- Power supply [here](#power_supply)
|
||||||
|
- External temperature sensor DHT22/DHT11 [here](#ext_sens)
|
||||||
|
- Potential issue [here](#issue)
|
||||||
|
|
||||||
<img src="S2a5f9d4b3dd34ff5911a27bccf34fdeci.webp" width=50% height=50%>
|
<a name="esp32"></a>
|
||||||
|
## ESP32-S3-CAM
|
||||||
|
|
||||||
|
Basic informations:
|
||||||
|
- Onboard RGB LED (most likely ws2812b)
|
||||||
|
- Option connecting external FLASH LED
|
||||||
|
- Micro SD card slot
|
||||||
|
- Internal or External WiFi antena
|
||||||
|
- 16MB FLASH and 8MB external PSRAM
|
||||||
|
- 520 KB SRAM
|
||||||
|
- Excellent WiFi signal
|
||||||
|
- There is no official documentation for this module.
|
||||||
|
- Additional HW must be purchased for programming
|
||||||
|
|
||||||
|
This is a module with an ESP32-S3 processor. It is a dimensional copy of the ESP32-CAM board by AiThinker. The board has the same dimensions but features a more powerful ESP32-S3 processor and an RGB LED for illumination. The LED for illumination is likely of the WS2812B type. There is no official documentation or circuit diagram available for this board. The camera module consists of two boards: the main board with the WiFi MCU, camera, micro SD card slot, and LED for illumination, and a second board used for programming that has a micro USB connector. Board pineout it's not same as on the AiThinker ESP32-CAM.
|
||||||
|
|
||||||
|
<img src="board2.png" width=30% height=30%>
|
||||||
|
|
||||||
|
<a name="cam_modules"></a>
|
||||||
|
## Supported camera modules
|
||||||
|
|
||||||
|
It's necessary to use a camera version **OV2640**. If using a different camera, modification of the camera's pinout can be needed, or some camera settings may not work correctly. We recommend to use a camera module with a viewing angle of 120° or 160°.
|
||||||
|
|
||||||
|
These are currently known or tested camera modules:
|
||||||
|
|
||||||
|
| Camera chip | FOV | Resolution | Tested | Works | Description |
|
||||||
|
|-------------|------|------------|--------|-------|------------------------------------------|
|
||||||
|
| OV2640 | 66° | 2MP | Yes | Yes | Recommended. Standard camera module |
|
||||||
|
| OV2640 | 120° | 2MP | Yes | Yes | Recommended |
|
||||||
|
| OV2640 | 160° | 2MP | Yes | Yes | Recommended |
|
||||||
|
|
||||||
|
<a name="flash_fw"></a>
|
||||||
|
## How to flash binary files to board from Linux/MAC/Windows
|
||||||
|
|
||||||
|
#### Partitions table for flashing FW
|
||||||
|
|
||||||
|
However, for uploading the firmware, it's important to use this configuration of addresses and files:
|
||||||
|
|
||||||
|
ZIP file with build binary files: **esp32-s3-cam.zip**
|
||||||
|
|
||||||
|
- address 0x0 - ESP32_PrusaConnectCam.ino.bootloader.bin
|
||||||
|
- address 0x8000 - ESP32_PrusaConnectCam.ino.partitions.bin
|
||||||
|
- address 0x10000 - ESP32_PrusaConnectCam.ino.bin
|
||||||
|
|
||||||
|
**It is important to download the correct binary files! Each type of camera has its own ZIP archive with files for uploading the firmware.**
|
||||||
|
|
||||||
|
#### Linux/MAC
|
||||||
|
|
||||||
|
You must use the console to upload the firmware on the MAC or Linux platform. First, ensure you have installed esptool for Python. You can find it on the manufacturer's website, ESPRESSIF, [here](https://docs.espressif.com/projects/esp-at/en/latest/esp32/Get_Started/Downloading_guide.html#linux-or-macos).
|
||||||
|
|
||||||
|
And command for FLASH FW is here, where **/dev/ttya0** is your serial interface for communication with the ESP32-cam board. This is the command for the first flash FW to MCU.
|
||||||
|
|
||||||
|
```
|
||||||
|
./esptool --chip esp32s3 -p /dev/ttya0 -b 921600 --before default_reset --after hard_reset write_flash --erase-all --flash_mode dio --flash_size 16MB --flash_freq 80m 0x0 ESP32_PrusaConnectCam.ino.bootloader.bin 0x8000 ESP32_PrusaConnectCam.ino.partitions.bin 0x10000 ESP32_PrusaConnectCam.ino.bin
|
||||||
|
```
|
||||||
|
|
||||||
|
This command contains the parameter **--eras-all**, which erases the entire flash in the MCU. So, for just updating the firmware, it is necessary to remove the parameter **--eras-all**; otherwise, the MCU configuration will also be deleted. The basic command list can be found [here](https://docs.espressif.com/projects/esptool/en/latest/esp32s3/esptool/basic-commands.html)
|
||||||
|
|
||||||
|
Here is the command for updating the firmware in the MCU without erasing the MCU configuration
|
||||||
|
|
||||||
|
```
|
||||||
|
./esptool --chip esp32s3 -p /dev/ttya0 -b 921600 --before default_reset --after hard_reset write_flash --flash_mode dio --flash_size 16MB --flash_freq 80m 0x0 ESP32_PrusaConnectCam.ino.bootloader.bin 0x8000 ESP32_PrusaConnectCam.ino.partitions.bin 0x10000 ESP32_PrusaConnectCam.ino.bin
|
||||||
|
```
|
||||||
|
|
||||||
|
Launching the esptool application may be different in different operating systems
|
||||||
|
|
||||||
|
#### Windows
|
||||||
|
|
||||||
|
The driver should be installed automatically by Windows
|
||||||
|
|
||||||
|
In the first step, you need to open the application **flash download tool**, and select MCU version
|
||||||
|
|
||||||
|
<img src="chip_select.jpg" width=25% height=25%>
|
||||||
|
|
||||||
|
Then, select the communication port. It's necessary to erase the FLASH using the **ERASE** button before the first firmware flash.
|
||||||
|
|
||||||
|
<img src="fw_flash.jpg" width=30% height=30%>
|
||||||
|
|
||||||
|
<a name="arduino_cfg"></a>
|
||||||
|
## How to compile software in the Arduino IDE
|
||||||
|
|
||||||
|
Board configuration in the Arduino IDE 2.3.2
|
||||||
|
- Tools -> Board -> ESP32 Arduino -> ESP32S3 Dev Module
|
||||||
|
- Tools -> USB CDC on BOOT -> Disable
|
||||||
|
- Tools -> CPU Frequency -> 240MHz (WiFi/BT)
|
||||||
|
- Tools -> Core debug level -> None
|
||||||
|
- Tools -> USB DFU on BOOT -> Disable
|
||||||
|
- Tools -> Erase all Flash Before Sketch Upload -> Disable (first flash, new board = enable. otherwise = disable)
|
||||||
|
- Tools -> Events Run On -> Core 1
|
||||||
|
- Tools -> Flash Mode -> DIO 80MHz
|
||||||
|
- Tools -> Flash Size -> 16MB
|
||||||
|
- Tools -> Jtag Adapter -> Disable
|
||||||
|
- Tools -> Arduino Runs On -> Core 1
|
||||||
|
- Tools -> USB Firmware MSC On Boot -> Disable
|
||||||
|
- Tools -> Partition scheme -> Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS)
|
||||||
|
- Tools -> PSRAM -> OPI PSRAM
|
||||||
|
- Tools -> Upload Mode -> UART0 / Hardware CDC
|
||||||
|
- Tools -> Upload Speed -> 921600
|
||||||
|
- Tools -> USB Mode -> Hardware CDC and JTAG
|
||||||
|
- Tools -> Zigbee mode -> Disable
|
||||||
|
|
||||||
|
When flashing the firmware to a new, empty ESP32-S3-CAM Sense device for the first time, it is necessary to use the 'Erase' function.
|
||||||
|
|
||||||
|
This can be found under **Tools** -> **Erase all Flash Before Sketch Upload** -> **Enable**.
|
||||||
|
|
||||||
|
After the initial firmware upload to the MCU, it's necessary to disable this option. If you do not disable this option, your camera configuration will continue to be erased from the flash memory after uploading new firmware from the Arduino IDE.
|
||||||
|
|
||||||
|
It is necessary to enable support for the correct board version in the file **mcu_cfg.h** after line 16.
|
||||||
|
|
||||||
|
<a name="factory_cfg"></a>
|
||||||
|
## How to reset configuration to factory settings
|
||||||
|
To reset the settings to factory defaults, follow these instructions:
|
||||||
|
|
||||||
|
<img src="sw_reset.png" width=30% height=30%>
|
||||||
|
|
||||||
|
- Connect PIN **GPIO14** to **ground**.
|
||||||
|
- **Plug in** the power supply.
|
||||||
|
- Wait for **10 seconds**.
|
||||||
|
- After 10 seconds, the **FLASH LED will start flashing**.
|
||||||
|
- **Disconnect** PIN **GPIO14** from **ground** (but don't disconnect the power supply).
|
||||||
|
- After disconnecting **GPIO14** from **ground**, the **FLASH LED** will **stop flashing**, and the MCU will **automatically reboot**.
|
||||||
|
- Now the MCU is in the factory settings.
|
||||||
|
|
||||||
|
<a name="status_led"></a>
|
||||||
|
## Status LED
|
||||||
|
|
||||||
|
On the board, there is a status LED that provides a visual indicator of the module's current status
|
||||||
|
through blinking at defined intervals.
|
||||||
|
|
||||||
|
<img src="status_led.png" width=25% height=25%>
|
||||||
|
|
||||||
|
Upon module activation, the LED illuminates. After processor initialization, the LED exhibits different blinking intervals based on the current mode of the module
|
||||||
|
|
||||||
|
- **Service AP Mode only:** The LED blinks every **400 ms**, indicating the module's availability in service AP mode.
|
||||||
|
- **Connecting to WiFi AP:** While connecting to a WiFi Access Point, the LED blinks at intervals of **800 ms**.
|
||||||
|
- **Connected to WiFi Network:** Upon successful connection to a WiFi network, the LED blinks at intervals of **4000 ms**, signaling a stable connection.
|
||||||
|
- **Problematic State:** If an issue or error occurs, the LED accelerates its blinking to every **100 ms**.
|
||||||
|
|
||||||
|
The approximate boot time of the device is 15-20 seconds.
|
||||||
|
|
||||||
|
<a name="schematic"></a>
|
||||||
|
## Schematic for ESP32-S3-CAM
|
||||||
|
|
||||||
|
For this board, I was unable to find any official documentation or pinout. The following pinout was determined from PCB analysis.
|
||||||
|
|
||||||
|
Pinout
|
||||||
|
|
||||||
|
<img src="pinout.drawio.png" width=50% height=50%>
|
||||||
|
|
||||||
|
<a name="led_issue"></a>
|
||||||
|
## FLASH LED
|
||||||
|
|
||||||
|
This board version have RGB **FLASH LED** on the board (most likely ws2812b). It is still possible to connect an external LED for illumination. The wiring is shown in the image below.
|
||||||
|
|
||||||
|
<img src="relay_flash_bb.png" width=30% height=30%>
|
||||||
|
|
||||||
|
For the external LED is in the SW used **GPIO pin 47**.
|
||||||
|
|
||||||
|
<img src="ext_led_pins.png" width=30% height=30%>
|
||||||
|
|
||||||
|
However, a 5mm LED can also be connected directly. **CAUTION**: The digital GPIO output from the ESP32-S3-CAM board has a current limitation of a **maximum of 40mA**! Therefore, it is recommended to switch the LED using a **transistor** rather than directly through the GPIO pin. Improper use of the GPIO pin can lead to permanent damage.
|
||||||
|
|
||||||
|
<a name="power_supply"></a>
|
||||||
|
## Power Supply
|
||||||
|
|
||||||
|
The device requires a 5V power supply, with a maximum current consumption of 2A. Power is supplied via a micro USB connector when using the original programmer.
|
||||||
|
|
||||||
|
<a name="ext_sens"></a>
|
||||||
|
## External temperature sensor DHT22/DHT11
|
||||||
|
|
||||||
|
Below you will find the wiring diagram for the DHT22 or DHT11 sensor.
|
||||||
|
|
||||||
|
| Camera board | DHT22/DHT11 |
|
||||||
|
|--------------|-------------|
|
||||||
|
| 3.3V | VCC |
|
||||||
|
| GND | GND |
|
||||||
|
| GPIO20 | Data |
|
||||||
|
|
||||||
|
<img src="ESP32-cam dht22_bb.png" width=40% height=40%>
|
||||||
|
|
||||||
|
<a name="issue"></a>
|
||||||
|
## Potential issue with this board
|
||||||
|
|
||||||
|
- Slow WEB page loading during first 1 minutes after MCU start
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 538 KiB |
|
After Width: | Height: | Size: 675 KiB |
|
After Width: | Height: | Size: 297 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 524 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
|
@ -0,0 +1,116 @@
|
||||||
|
ESP-ROM:esp32s3-20210327
|
||||||
|
Build:Mar 27 2021
|
||||||
|
rst:0x1 (POWERON),boot:0x2a (SPI_FAST_FLASH_BOOT)
|
||||||
|
SPIWP:0xee
|
||||||
|
mode:DIO, clock div:1
|
||||||
|
load:0x3fcd0108,len:0x15c8
|
||||||
|
load:0x403b6000,len:0x8c8
|
||||||
|
load:0x403ba000,len:0x2c04
|
||||||
|
entry 0x403b61c4
|
||||||
|
[0;32mI (25) boot: ESP-IDF v4.4-dev-2594-ga20df743f1-dirty 2nd stage bootloader[0m
|
||||||
|
[0;32mI (25) boot: compile time 16:57:21[0m
|
||||||
|
[0;32mI (25) boot: chip revision: 0[0m
|
||||||
|
[0;32mI (29) boot.esp32s3: SPI Speed : 80MHz[0m
|
||||||
|
[0;32mI (33) boot.esp32s3: SPI Mode : DIO[0m
|
||||||
|
[0;32mI (38) boot.esp32s3: SPI Flash Size : 2MB[0m
|
||||||
|
[0;32mI (43) boot: Enabling RNG early entropy source...[0m
|
||||||
|
[0;33mW (48) bootloader_random: RNG for ESP32-S3 not currently supported[0m
|
||||||
|
[0;32mI (55) boot: Partition Table:[0m
|
||||||
|
[0;32mI (59) boot: ## Label Usage Type ST Offset Length[0m
|
||||||
|
[0;32mI (66) boot: 0 nvs WiFi data 01 02 00009000 00006000[0m
|
||||||
|
[0;32mI (73) boot: 1 phy_init RF data 01 01 0000f000 00001000[0m
|
||||||
|
[0;32mI (81) boot: 2 factory factory app 00 00 00010000 00100000[0m
|
||||||
|
[0;32mI (88) boot: End of partition table[0m
|
||||||
|
[0;32mI (93) esp_image: segment 0: paddr=00010020 vaddr=3c020020 size=090e0h ( 37088) map[0m
|
||||||
|
[0;32mI (108) esp_image: segment 1: paddr=00019108 vaddr=3fc90dd0 size=0253ch ( 9532) load[0m
|
||||||
|
[0;32mI (111) esp_image: segment 2: paddr=0001b64c vaddr=40374000 size=049cch ( 18892) load[0m
|
||||||
|
[0;32mI (122) esp_image: segment 3: paddr=00020020 vaddr=42000020 size=1b660h (112224) map[0m
|
||||||
|
[0;32mI (147) esp_image: segment 4: paddr=0003b688 vaddr=403789cc size=08404h ( 33796) load[0m
|
||||||
|
[0;32mI (155) esp_image: segment 5: paddr=00043a94 vaddr=50000000 size=00010h ( 16) load[0m
|
||||||
|
[0;32mI (160) boot: Loaded app from partition at offset 0x10000[0m
|
||||||
|
[0;32mI (160) boot: Disabling RNG early entropy source...[0m
|
||||||
|
[0;33mW (164) bootloader_random: RNG for ESP32-S3 not currently supported[0m
|
||||||
|
[0;32mI (182) cpu_start: Pro cpu up.[0m
|
||||||
|
[0;32mI (182) cpu_start: Starting app cpu, entry point is 0x40375104[0m
|
||||||
|
[0;32mI (0) cpu_start: App cpu up.[0m
|
||||||
|
[0;32mI (196) cpu_start: Pro cpu start user code[0m
|
||||||
|
[0;32mI (196) cpu_start: cpu freq: 160000000[0m
|
||||||
|
[0;32mI (199) cpu_start: Project name: led_strip[0m
|
||||||
|
[0;32mI (204) cpu_start: App version: 1[0m
|
||||||
|
[0;32mI (209) cpu_start: Compile time: Aug 17 2021 17:09:47[0m
|
||||||
|
[0;32mI (215) cpu_start: ELF file SHA256: bda59acbde3f7a0e...[0m
|
||||||
|
[0;32mI (221) cpu_start: ESP-IDF: v4.4-dev-2594-ga20df743f1-dirty[0m
|
||||||
|
[0;32mI (228) heap_init: Initializing. RAM available for dynamic allocation:[0m
|
||||||
|
[0;32mI (235) heap_init: At 3FC94220 len 0004BDE0 (303 KiB): D/IRAM[0m
|
||||||
|
[0;32mI (241) heap_init: At 3FCE0000 len 0000EE34 (59 KiB): STACK/DRAM[0m
|
||||||
|
[0;32mI (248) heap_init: At 3FCF0000 len 00008000 (32 KiB): DRAM[0m
|
||||||
|
[0;32mI (255) spi_flash: detected chip: generic[0m
|
||||||
|
[0;32mI (259) spi_flash: flash io: dio[0m
|
||||||
|
[0;33mW (263) spi_flash: Detected size(16384k) larger than the size in the binary image header(2048k). Using the size in the binary image header.[0m
|
||||||
|
[0;32mI (277) cpu_start: Starting scheduler on PRO CPU.[0m
|
||||||
|
[0;32mI (0) cpu_start: Starting scheduler on APP CPU.[0m
|
||||||
|
[0;32mI (308) example: LED Rainbow Chase Start[0m
|
||||||
|
[0;32mI (308) example: USB initialization[0m
|
||||||
|
[0;32mI (308) tusb_desc:
|
||||||
|
┌─────────────────────────────────┐
|
||||||
|
│ USB Device Descriptor Summary │
|
||||||
|
├───────────────────┬─────────────┤
|
||||||
|
│bDeviceClass │ 239 │
|
||||||
|
├───────────────────┼─────────────┤
|
||||||
|
│bDeviceSubClass │ 2 │
|
||||||
|
├───────────────────┼─────────────┤
|
||||||
|
│bDeviceProtocol │ 1 │
|
||||||
|
├───────────────────┼─────────────┤
|
||||||
|
│bMaxPacketSize0 │ 64 │
|
||||||
|
├───────────────────┼─────────────┤
|
||||||
|
│idVendor │ 0x303a │
|
||||||
|
├───────────────────┼─────────────┤
|
||||||
|
│idProduct │ 0x4001 │
|
||||||
|
├───────────────────┼─────────────┤
|
||||||
|
│bcdDevice │ 0x100 │
|
||||||
|
├───────────────────┼─────────────┤
|
||||||
|
│iManufacturer │ 0x1 │
|
||||||
|
├───────────────────┼─────────────┤
|
||||||
|
│iProduct │ 0x2 │
|
||||||
|
├───────────────────┼─────────────┤
|
||||||
|
│iSerialNumber │ 0x3 │
|
||||||
|
├───────────────────┼─────────────┤
|
||||||
|
│bNumConfigurations │ 0x1 │
|
||||||
|
└───────────────────┴─────────────┘[0m
|
||||||
|
[0;32mI (478) TinyUSB: TinyUSB Driver installed[0m
|
||||||
|
[0;32mI (488) example: USB initialization DONE[0m
|
||||||
|
[0;32mI (1388) example: log -> UART[0m
|
||||||
|
example: print -> stdout
|
||||||
|
example: print -> stderr
|
||||||
|
[0;32mI (2888) example: log -> UART[0m
|
||||||
|
example: print -> stdout
|
||||||
|
example: print -> stderr
|
||||||
|
[0;32mI (4388) example: log -> UART[0m
|
||||||
|
example: print -> stdout
|
||||||
|
example: print -> stderr
|
||||||
|
[0;32mI (5888) example: log -> UART[0m
|
||||||
|
example: print -> stdout
|
||||||
|
example: print -> stderr
|
||||||
|
[0;32mI (7388) example: log -> UART[0m
|
||||||
|
example: print -> stdout
|
||||||
|
example: print -> stderr
|
||||||
|
[0;32mI (8888) example: log -> UART[0m
|
||||||
|
example: print -> stdout
|
||||||
|
example: print -> stderr
|
||||||
|
[0;32mI (10388) example: log -> UART[0m
|
||||||
|
example: print -> stdout
|
||||||
|
example: print -> stderr
|
||||||
|
[0;32mI (11888) example: log -> UART[0m
|
||||||
|
example: print -> stdout
|
||||||
|
example: print -> stderr
|
||||||
|
[0;32mI (13388) example: log -> UART[0m
|
||||||
|
example: print -> stdout
|
||||||
|
example: print -> stderr
|
||||||
|
[0;32mI (14888) example: log -> UART[0m
|
||||||
|
example: print -> stdout
|
||||||
|
example: print -> stderr
|
||||||
|
[0;32mI (16388) example: log -> UART[0m
|
||||||
|
example: print -> stdout
|
||||||
|
example: print -> stderr
|
||||||
|
[0;32mI (17888) example: log -> UART[0m
|
||||||
|
example: print -> stdout
|
||||||
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 704 KiB |
|
After Width: | Height: | Size: 117 KiB |
|
After Width: | Height: | Size: 512 KiB |
|
After Width: | Height: | Size: 520 KiB |
|
|
@ -10,6 +10,7 @@ What we need for functionality
|
||||||
- Schematic main board is [here](#schematic)
|
- Schematic main board is [here](#schematic)
|
||||||
- FLASH LED issue [here](#flash-led-issue)
|
- FLASH LED issue [here](#flash-led-issue)
|
||||||
- Power supply [here](#power_supply)
|
- Power supply [here](#power_supply)
|
||||||
|
- External temperature sensor DHT22/DHT11 [here](#ext_sens)
|
||||||
- Potential issue [here](#issue)
|
- Potential issue [here](#issue)
|
||||||
|
|
||||||
<a name="esp32"></a>
|
<a name="esp32"></a>
|
||||||
|
|
@ -22,6 +23,7 @@ Basic informations:
|
||||||
- Internal WiFi antenna
|
- Internal WiFi antenna
|
||||||
- no additional HW is needed for programming
|
- no additional HW is needed for programming
|
||||||
- 8MB FLASH and 8MB external PSRAM
|
- 8MB FLASH and 8MB external PSRAM
|
||||||
|
- Excellent WiFi signal
|
||||||
|
|
||||||
This is a more expensive version with a more powerful ESP32-S3 processor. The board is sold with an OV2640 camera module. No additional hardware is required for programming. The ESP32-S3 processor is programmed via the processor's USB interface.
|
This is a more expensive version with a more powerful ESP32-S3 processor. The board is sold with an OV2640 camera module. No additional hardware is required for programming. The ESP32-S3 processor is programmed via the processor's USB interface.
|
||||||
|
|
||||||
|
|
@ -179,6 +181,18 @@ The board does not have an LED that could serve as a camera flash. However, ther
|
||||||
|
|
||||||
The device requires a 5V power supply, with a maximum current consumption of 2A. Power is supplied via a micro USB connector when using the original programmer.
|
The device requires a 5V power supply, with a maximum current consumption of 2A. Power is supplied via a micro USB connector when using the original programmer.
|
||||||
|
|
||||||
|
<a name="ext_sens"></a>
|
||||||
|
## External temperature sensor DHT22/DHT11
|
||||||
|
Below you will find the wiring diagram for the DHT22 or DHT11 sensor.
|
||||||
|
|
||||||
|
| Camera board | DHT22/DHT11 |
|
||||||
|
|--------------|-------------|
|
||||||
|
| 3.3V (red) | VCC |
|
||||||
|
| GND (blue) | GND |
|
||||||
|
| IO46 (green) | Data |
|
||||||
|
|
||||||
|
<img src="esp32-s3-eye-dht22.png" width=30% height=30%>
|
||||||
|
|
||||||
<a name="issue"></a>
|
<a name="issue"></a>
|
||||||
## Potential issue with this board
|
## Potential issue with this board
|
||||||
|
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 168 KiB |
|
After Width: | Height: | Size: 166 KiB |
|
|
@ -11,6 +11,7 @@ What we need for functionality
|
||||||
- Board schematic [here](#schematic)
|
- Board schematic [here](#schematic)
|
||||||
- External FLASH LED [here](#led_issue)
|
- External FLASH LED [here](#led_issue)
|
||||||
- Power supply [here](#power_supply)
|
- Power supply [here](#power_supply)
|
||||||
|
- External temperature sensor DHT22/DHT11 [here](#ext_sens)
|
||||||
- Potential issue [here](#issue)
|
- Potential issue [here](#issue)
|
||||||
|
|
||||||
<a name="esp32"></a>
|
<a name="esp32"></a>
|
||||||
|
|
@ -24,6 +25,7 @@ Basic informations:
|
||||||
- no additional HW is needed for programming
|
- no additional HW is needed for programming
|
||||||
- 4MB FLASH and 4MB external PSRAM
|
- 4MB FLASH and 4MB external PSRAM
|
||||||
- 520 KB SRAM
|
- 520 KB SRAM
|
||||||
|
- Excellent WiFi signal
|
||||||
|
|
||||||
This board version is built on the same processor, ESP32, as the AiThinker ESP32-CAM. However, a different module with the processor is used in this version. The board missing a LED for FLASH and a Micro SD card slot. The board has an internal WiFi antenna, which has better WiFi signal quality than the AiThinker ESP32-CAM board.
|
This board version is built on the same processor, ESP32, as the AiThinker ESP32-CAM. However, a different module with the processor is used in this version. The board missing a LED for FLASH and a Micro SD card slot. The board has an internal WiFi antenna, which has better WiFi signal quality than the AiThinker ESP32-CAM board.
|
||||||
|
|
||||||
|
|
@ -188,6 +190,19 @@ However, a 5mm LED can also be connected directly. **CAUTION**: The digital GPIO
|
||||||
|
|
||||||
The device requires a 5V power supply, with a maximum current consumption of 2A. Power is supplied via a micro USB connector when using the original programmer.
|
The device requires a 5V power supply, with a maximum current consumption of 2A. Power is supplied via a micro USB connector when using the original programmer.
|
||||||
|
|
||||||
|
<a name="ext_sens"></a>
|
||||||
|
## External temperature sensor DHT22/DHT11
|
||||||
|
|
||||||
|
Below you will find the wiring diagram for the DHT22 or DHT11 sensor.
|
||||||
|
|
||||||
|
| Camera board | DHT22/DHT11 |
|
||||||
|
|--------------|-------------|
|
||||||
|
| 3.3V | VCC |
|
||||||
|
| GND | GND |
|
||||||
|
| IO13 | Data |
|
||||||
|
|
||||||
|
<img src="dht22_bb.png" width=40% height=40%>
|
||||||
|
|
||||||
<a name="issue"></a>
|
<a name="issue"></a>
|
||||||
## Potential issue with this board
|
## Potential issue with this board
|
||||||
- This version does not have a slot for a Micro SD card, so it may be complicated to obtain logs from it.
|
- This version does not have a slot for a Micro SD card, so it may be complicated to obtain logs from it.
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
|
@ -1,5 +1,222 @@
|
||||||
# Seeed Studio XIAO ESP32S3 sense cam
|
# Seeed Studio XIAO ESP32S3 sense cam
|
||||||
|
|
||||||
In progress
|
What we need for functionality
|
||||||
|
- XIAO ESP32-S3 Sense board with OV2640 camera module [ here ](#esp32)
|
||||||
|
- Supported camera modules [here](#cam_modules)
|
||||||
|
- Module board version [here](#different_mcu)
|
||||||
|
- How to flash binary files to board from Linux/MAC/Windows [ here ](#flash_fw)
|
||||||
|
- How to compile software in the Arduino IDE [ here ](#arduino_cfg)
|
||||||
|
- How to reset the configuration to factory settings [here](#factory_cfg)
|
||||||
|
- Status LED [ here ](#status_led)
|
||||||
|
- Schematic main board is [here](#schematic)
|
||||||
|
- Issue with FLASH LED on the main board [here](#led_issue)
|
||||||
|
- External WiFi antenna [here](#ext_wifi)
|
||||||
|
- Power supply [here](#power_supply)
|
||||||
|
- External temperature sensor DHT22/DHT11 [here](#ext_sens)
|
||||||
|
- Potential issue [here](#issue)
|
||||||
|
|
||||||
|
<a name="esp32"></a>
|
||||||
|
## XIAO ESP32S3 sense board
|
||||||
|
|
||||||
|
Basic informations:
|
||||||
|
- Option connecting external FLASH LED
|
||||||
|
- Micro SD card slot
|
||||||
|
- External WiFi antena
|
||||||
|
- 8MB FLASH and 8MB external PSRAM
|
||||||
|
- 520 KB SRAM
|
||||||
|
- Small dimension 21 x 17.5 x 15mm (with expansion board)
|
||||||
|
- Potential overheating issue. Possibility to attach a small aluminum heatsink to the back.
|
||||||
|
- Excellent WiFi signal
|
||||||
|
|
||||||
|
This is a small module with an ESP32-S3 processor. The camera consists of two boards: a base board with the processor and an expansion board with the camera and a slot for a micro SD card. The board uses a USB-C connector. The small size of the board is an advantage, but it can also cause overheating. To improve cooling, a small aluminum heatsink can be attached to the back of the base board.
|
||||||
|
|
||||||
|
<img src="seeed-studio-xiao-esp32s3-sense.png" width=30% height=30%>
|
||||||
|
|
||||||
|
Since the camera consists of two boards and the camera part with the micro SD card is connected via a connector, potential problems with detecting the camera or SD card may arise due to poor connector engagement between the boards.
|
||||||
|
|
||||||
|
<img src="boards.jpg" width=30% height=30%>
|
||||||
|
|
||||||
|
<a name="cam_modules"></a>
|
||||||
|
## Supported camera modules
|
||||||
|
|
||||||
|
It's necessary to use a camera version **OV2640**. If using a different camera, modification of the camera's pinout can be needed, or some camera settings may not work correctly. We recommend to use a camera module with a viewing angle of 120° or 160°.
|
||||||
|
|
||||||
|
These are currently known or tested camera modules:
|
||||||
|
|
||||||
|
| Camera chip | FOV | Resolution | Tested | Works | Description |
|
||||||
|
|-------------|------|------------|--------|-------|------------------------------------------|
|
||||||
|
| OV2640 | 66° | 2MP | Yes | Yes | Recommended. Standard camera module |
|
||||||
|
| OV2640 | 120° | 2MP | Yes | Yes | Recommended |
|
||||||
|
| OV2640 | 160° | 2MP | Yes | Yes | Recommended |
|
||||||
|
|
||||||
|
<a name="flash_fw"></a>
|
||||||
|
## How to flash binary files to board from Linux/MAC/Windows
|
||||||
|
|
||||||
|
#### Partitions table for flashing FW
|
||||||
|
|
||||||
|
However, for uploading the firmware, it's important to use this configuration of addresses and files:
|
||||||
|
|
||||||
|
ZIP file with build binary files: **xiao-esp32-s3.zip**
|
||||||
|
|
||||||
|
- address 0x0 - ESP32_PrusaConnectCam.ino.bootloader.bin
|
||||||
|
- address 0x8000 - ESP32_PrusaConnectCam.ino.partitions.bin
|
||||||
|
- address 0x10000 - ESP32_PrusaConnectCam.ino.bin
|
||||||
|
|
||||||
|
**It is important to download the correct binary files! Each type of camera has its own ZIP archive with files for uploading the firmware.**
|
||||||
|
|
||||||
|
#### Linux/MAC
|
||||||
|
|
||||||
|
You must use the console to upload the firmware on the MAC or Linux platform. First, ensure you have installed esptool for Python. You can find it on the manufacturer's website, ESPRESSIF, [here](https://docs.espressif.com/projects/esp-at/en/latest/esp32/Get_Started/Downloading_guide.html#linux-or-macos).
|
||||||
|
|
||||||
|
And command for FLASH FW is here, where **/dev/ttya0** is your serial interface for communication with the ESP32-cam board. This is the command for the first flash FW to MCU.
|
||||||
|
|
||||||
|
```
|
||||||
|
./esptool --chip esp32s3 -p /dev/ttya0 -b 921600 --before default_reset --after hard_reset write_flash --erase-all --flash_mode qio --flash_size 8MB --flash_freq 80m 0x0 ESP32_PrusaConnectCam.ino.bootloader.bin 0x8000 ESP32_PrusaConnectCam.ino.partitions.bin 0x10000 ESP32_PrusaConnectCam.ino.bin
|
||||||
|
```
|
||||||
|
|
||||||
|
This command contains the parameter **--eras-all**, which erases the entire flash in the MCU. So, for just updating the firmware, it is necessary to remove the parameter **--eras-all**; otherwise, the MCU configuration will also be deleted. The basic command list can be found [here](https://docs.espressif.com/projects/esptool/en/latest/esp32s3/esptool/basic-commands.html)
|
||||||
|
|
||||||
|
Here is the command for updating the firmware in the MCU without erasing the MCU configuration
|
||||||
|
|
||||||
|
```
|
||||||
|
./esptool --chip esp32s3 -p /dev/ttya0 -b 921600 --before default_reset --after hard_reset write_flash --flash_mode qio --flash_size 8MB --flash_freq 80m 0x0 ESP32_PrusaConnectCam.ino.bootloader.bin 0x8000 ESP32_PrusaConnectCam.ino.partitions.bin 0x10000 ESP32_PrusaConnectCam.ino.bin
|
||||||
|
```
|
||||||
|
|
||||||
|
Launching the esptool application may be different in different operating systems
|
||||||
|
|
||||||
|
#### Windows
|
||||||
|
|
||||||
|
The driver should be installed automatically by Windows
|
||||||
|
|
||||||
|
In the first step, you need to open the application **flash download tool**, and select MCU version
|
||||||
|
|
||||||
|
<img src="chip_select.jpg" width=25% height=25%>
|
||||||
|
|
||||||
|
Then, select the communication port. It's necessary to erase the FLASH using the **ERASE** button before the first firmware flash.
|
||||||
|
|
||||||
|
Before erasing the FLASH memory, it is necessary to switch the board to bootloader mode. Hold down the BOOT button (red arrow), press the RESET button (green arrow), wait for 1 second, and release the BOOT button. Then, you can erase the FLASH memory using the ERASE button. After a successful erase, the status will change to FINISH.
|
||||||
|
|
||||||
|
<img src="flash_button.png" width=30% height=30%>
|
||||||
|
|
||||||
|
Then is possible upload FW to MCU. It is necessary again switch the board to bootloader mode. Hold down the BOOT button (red arrow), press the RESET button (green arrow), wait for 1 second, and release the BOOT button. Then, you can erase the FLASH memory using the ERASE button.
|
||||||
|
|
||||||
|
<img src="flash.jpg" width=30% height=30%>
|
||||||
|
|
||||||
|
<a name="arduino_cfg"></a>
|
||||||
|
## How to compile software in the Arduino IDE
|
||||||
|
|
||||||
|
Board configuration in the Arduino IDE 2.3.2
|
||||||
|
- Tools -> Board -> ESP32 Arduino -> XIAO_ESP32S3
|
||||||
|
- Tools -> USB CDC on BOOT -> Enabled
|
||||||
|
- Tools -> CPU Frequency -> 240MHz (WiFi)
|
||||||
|
- Tools -> Core debug level -> None
|
||||||
|
- Tools -> USB DFU on BOOT -> Disable
|
||||||
|
- Tools -> Erase all Flash Before Sketch Upload -> Disable **(first flash, new board = enable. otherwise = disable)**
|
||||||
|
- Tools -> Events Run On -> Core 1
|
||||||
|
- Tools -> Flash Mode -> QIO 80MHz
|
||||||
|
- Tools -> Flash Size -> 8MB
|
||||||
|
- Tools -> Jtag Adapter -> Disable
|
||||||
|
- Tools -> Arduino Runs On -> Core 1
|
||||||
|
- Tools -> USB Firmware MSC On Boot -> Disable
|
||||||
|
- Tools -> Partition scheme -> 3MB APP/1.5MB SPIFFS
|
||||||
|
- Tools -> PSRAM -> OPI PSRAM
|
||||||
|
- Tools -> Upload Mode -> UART0 / Hardware CDC
|
||||||
|
- Tools -> Upload Speed -> 921600
|
||||||
|
- Tools -> USB Mode -> Hardware CDC and JTAG
|
||||||
|
|
||||||
|
When flashing the firmware to a new, empty XIAO ESP32-S3 Sense device for the first time, it is necessary to use the 'Erase' function.
|
||||||
|
|
||||||
|
This can be found under **Tools** -> **Erase all Flash Before Sketch Upload** -> **Enable**.
|
||||||
|
|
||||||
|
After the initial firmware upload to the MCU, it's necessary to disable this option. If you do not disable this option, your camera configuration will continue to be erased from the flash memory after uploading new firmware from the Arduino IDE.
|
||||||
|
|
||||||
|
It is necessary to enable support for the correct board version in the file **mcu_cfg.h** after line 16.
|
||||||
|
|
||||||
|
<a name="factory_cfg"></a>
|
||||||
|
## How to reset configuration to factory settings
|
||||||
|
To reset the settings to factory defaults, follow these instructions:
|
||||||
|
|
||||||
|
<img src="factory_cfg.png" width=30% height=30%>
|
||||||
|
|
||||||
|
- Connect PIN **GPIO2** to **ground**.
|
||||||
|
- **Plug in** the power supply.
|
||||||
|
- Wait for **10 seconds**.
|
||||||
|
- After 10 seconds, the **FLASH LED will start flashing**.
|
||||||
|
- **Disconnect** PIN **GPIO2** from **ground** (but don't disconnect the power supply).
|
||||||
|
- After disconnecting **GPIO2** from **ground**, the **FLASH LED** will **stop flashing**, and the MCU will **automatically reboot**.
|
||||||
|
- Now the MCU is in the factory settings.
|
||||||
|
|
||||||
|
<a name="status_led"></a>
|
||||||
|
## Status LED
|
||||||
|
|
||||||
|
On the board, there is a status LED that provides a visual indicator of the module's current status
|
||||||
|
through blinking at defined intervals.
|
||||||
|
|
||||||
|
<img src="status_led.png" width=25% height=25%>
|
||||||
|
|
||||||
|
Upon module activation, the LED illuminates. After processor initialization, the LED exhibits different blinking intervals based on the current mode of the module
|
||||||
|
|
||||||
|
- **Service AP Mode only:** The LED blinks every **400 ms**, indicating the module's availability in service AP mode.
|
||||||
|
- **Connecting to WiFi AP:** While connecting to a WiFi Access Point, the LED blinks at intervals of **800 ms**.
|
||||||
|
- **Connected to WiFi Network:** Upon successful connection to a WiFi network, the LED blinks at intervals of **4000 ms**, signaling a stable connection.
|
||||||
|
- **Problematic State:** If an issue or error occurs, the LED accelerates its blinking to every **100 ms**.
|
||||||
|
|
||||||
|
The approximate boot time of the device is 15-20 seconds.
|
||||||
|
|
||||||
|
<a name="schematic"></a>
|
||||||
|
## Schematic for XIAO ESP32-S3 Sense
|
||||||
|
|
||||||
|
<img src="schematic.png" width=70% height=70%>
|
||||||
|
|
||||||
|
The scheme main board is available [here](XIAO_ESP32S3_ExpBoard_v1.0_SCH.pdf) in PDF format
|
||||||
|
|
||||||
|
The scheme extension board is available [here](XIAO_ESP32S3_SCH_v1.1.pdf) in PDF format
|
||||||
|
|
||||||
|
Pinout
|
||||||
|
|
||||||
|
<img src="pinoutF.png" width=50% height=50%>
|
||||||
|
|
||||||
|
<img src="pinoutB.png" width=50% height=50%>
|
||||||
|
|
||||||
|
<a name="led_issue"></a>
|
||||||
|
## FLASH LED issue
|
||||||
|
|
||||||
|
This board version don't have **FLASH LED** on the board. Therefore, if a FLASH LED is needed, a GPIO 4 pin should be used to connect an external LED for FLASH. The FLASH LED can be connected, for example, as an LED strip using a relay.
|
||||||
|
|
||||||
|
<img src="led strip_bb.png" width=30% height=30%>
|
||||||
|
|
||||||
|
For the external LED is in the SW used **GPIO pin 4**.
|
||||||
|
|
||||||
|
<img src="ext_led_pins.png" width=30% height=30%>
|
||||||
|
|
||||||
|
However, a 5mm LED can also be connected directly. **CAUTION**: The digital GPIO output from the XIAO ESP32-S3 board has a current limitation of a **maximum of 40mA**! Therefore, it is recommended to switch the LED using a **transistor** rather than directly through the GPIO pin. Improper use of the GPIO pin can lead to permanent damage.
|
||||||
|
|
||||||
|
<a name="power_supply"></a>
|
||||||
|
## Power Supply
|
||||||
|
|
||||||
|
The device requires a 5V power supply, with a maximum current consumption of 2A. Power is supplied via a micro USB connector when using the original programmer.
|
||||||
|
|
||||||
|
<a name="power_supply"></a>
|
||||||
|
## Power Supply
|
||||||
|
|
||||||
|
The device requires a 5V power supply, with a maximum current consumption of 2A. Power is supplied via a micro USB connector when using the original programmer.
|
||||||
|
|
||||||
|
<a name="ext_sens"></a>
|
||||||
|
## External temperature sensor DHT22/DHT11
|
||||||
|
|
||||||
|
Below you will find the wiring diagram for the DHT22 or DHT11 sensor.
|
||||||
|
|
||||||
|
| Camera board | DHT22/DHT11 |
|
||||||
|
|--------------|-------------|
|
||||||
|
| 3.3V | VCC |
|
||||||
|
| GND | GND |
|
||||||
|
| GPIO1 | Data |
|
||||||
|
|
||||||
|
<img src="dht22_bb.png" width=40% height=40%>
|
||||||
|
|
||||||
|
<a name="issue"></a>
|
||||||
|
## Potential issue with this board
|
||||||
|
|
||||||
|
- Overheating main board
|
||||||
|
- Slow WEB page loading during first 1 minutes after MCU start
|
||||||
|
|
||||||
<img src="seeed-studio-xiao-esp32s3-sense.png" width=50% height=50%>
|
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 243 KiB |
|
After Width: | Height: | Size: 241 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 231 KiB |
|
After Width: | Height: | Size: 233 KiB |
|
After Width: | Height: | Size: 531 KiB |