commit
efe8f786c4
4 changed files with 3298 additions and 0 deletions
@ -0,0 +1,187 @@ |
|||||||
|
#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
|
||||||
|
#define PIN_BOARD_LED 33 // Board LED (small red)
|
||||||
|
// Define I2C Pins for I2C. Remap from default pins 21 and 22.
|
||||||
|
#define I2C_SDA 14 |
||||||
|
#define I2C_SCL 15 |
||||||
|
#include <Arduino.h> |
||||||
|
#include <GyverOLED.h> |
||||||
|
GyverOLED<SSD1306_128x64> oled(0x3C); |
||||||
|
|
||||||
|
// ===================
|
||||||
|
// 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 = "Extender_9613F5"; |
||||||
|
const char* password = "repytwjd"; |
||||||
|
|
||||||
|
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_UXGA; |
||||||
|
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.frame_size = FRAMESIZE_SVGA;
|
||||||
|
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_SVGA;
|
||||||
|
config.frame_size = FRAMESIZE_240X240; |
||||||
|
#if CONFIG_IDF_TARGET_ESP32S3 |
||||||
|
config.fb_count = 2; |
||||||
|
#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_SVGA); |
||||||
|
s->set_vflip(s, 1); |
||||||
|
s->set_hmirror(s, 1); |
||||||
|
} |
||||||
|
|
||||||
|
#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 |
||||||
|
|
||||||
|
|
||||||
|
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"); |
||||||
|
Wire.setPins(I2C_SDA, I2C_SCL); // Map SDA and SCL to new pins
|
||||||
|
oled.init(); // инициализация
|
||||||
|
oled.clear(); // очистить дисплей (или буфер)
|
||||||
|
oled.update(); // обновить. Только для режима с буфером! OLED_BUFFER
|
||||||
|
|
||||||
|
oled.home(); // курсор в 0,0
|
||||||
|
oled.println("Hello!"); // печатай что угодно: числа, строки, float, как Serial!
|
||||||
|
oled.setContrast(10); // яркость 0..255
|
||||||
|
oled.update(); |
||||||
|
|
||||||
|
oled.println(WiFi.localIP()); |
||||||
|
oled.update(); |
||||||
|
} |
||||||
|
|
||||||
|
void loop()
|
||||||
|
{ |
||||||
|
oled.clear(); // очистить дисплей (или буфер)
|
||||||
|
oled.home(); // курсор в 0,0
|
||||||
|
oled.print("IP: "); |
||||||
|
oled.println(WiFi.localIP()); // печатай что угодно: числа, строки, float, как Serial!
|
||||||
|
oled.print("RSSI: "); |
||||||
|
oled.println(WiFi.RSSI()); // печатай что угодно: числа, строки, float, как Serial!
|
||||||
|
oled.update(); |
||||||
|
delay(1000); |
||||||
|
|
||||||
|
// tmr = millis();
|
||||||
|
// static uint32_t tmr;
|
||||||
|
// if (millis() - tmr >= 1000)
|
||||||
|
// {
|
||||||
|
// }
|
||||||
|
} |
||||||
@ -0,0 +1,27 @@ |
|||||||
|
|
||||||
|
#if 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 |
||||||
|
|
||||||
|
|
||||||
|
#else |
||||||
|
#error "Camera model not selected" |
||||||
|
#endif |
||||||
Loading…
Reference in new issue