From 7be3dbfeef2cdf5cbea3e450923a4c04ef8d8de1 Mon Sep 17 00:00:00 2001 From: Hpsaturn Date: Tue, 14 May 2024 21:48:05 +0200 Subject: [PATCH] added AI-Thinker samples. Some warnnings fixed --- README.md | 2 + .../esp32cam-basic-sender.ino | 60 +++++++++++++++++++ examples/esp32cam-basic-sender/platformio.ini | 26 ++++++++ .../esp32cam-p2p-sender.cpp | 60 +++++++++++++++++++ platformio.ini | 8 ++- src/drivers/CamAIThinker.h | 10 ++-- src/drivers/CamTJournal.h | 4 +- 7 files changed, 162 insertions(+), 8 deletions(-) create mode 100644 examples/esp32cam-basic-sender/esp32cam-basic-sender.ino create mode 100644 examples/esp32cam-basic-sender/platformio.ini create mode 100644 examples/esp32cam-p2p-sender/esp32cam-p2p-sender.cpp diff --git a/README.md b/README.md index 2b9c499..2a242c8 100644 --- a/README.md +++ b/README.md @@ -164,6 +164,7 @@ more details in the sample [xiao-internal-jpg-sender](examples/xiao-internal-jpg | custom-camera-sender | Custom settings - optional PSRAM | QVGA | STABLE | | tjournal-espnow-sender | NOPSRAM, 1FB, internal JPG | QVGA | STABLE | | m5cores3-espnow-sender | PSRAM, 2FB, JPG built-in camera | QVGA | STABLE | +| esp32cam-p2p-sender | PSRAM, 1FB, IDF-JPG | QVGA | UNTESTED | ### Receivers samples @@ -225,6 +226,7 @@ The library was tested on the next devices: - [x] M5CoreS3 (builtin Camera) - [x] XIAO ESP32S3 Sense Camera - [x] M5UnitCamS3 +- [ ] ESP32Cam AI-Thinker (untested. Help wanted) **Receivers:** diff --git a/examples/esp32cam-basic-sender/esp32cam-basic-sender.ino b/examples/esp32cam-basic-sender/esp32cam-basic-sender.ino new file mode 100644 index 0000000..f431f1b --- /dev/null +++ b/examples/esp32cam-basic-sender/esp32cam-basic-sender.ino @@ -0,0 +1,60 @@ +/************************************************** + * ESP32Cam AI-Thinker Transmitter + * by @hpsaturn Copyright (C) 2024 + * This file is part ESPNowCam project: + * https://github.com/hpsaturn/ESPNowCam +**************************************************/ + +// N O T E: +// ------- +// Don't forget first install NanoPb library! +// and also review the README.md file. + +#include +#include +#include + +CamAIThinker Camera; +ESPNowCam radio; + +void processFrame() { + if (Camera.get()) { + uint8_t *out_jpg = NULL; + size_t out_jpg_len = 0; + frame2jpg(Camera.fb, 12, &out_jpg, &out_jpg_len); + radio.sendData(out_jpg, out_jpg_len); + free(out_jpg); + Camera.free(); + } +} + +void setup() { + Serial.begin(115200); + Serial.setDebugOutput(true); + Serial.println(); + + delay(1000); // only for debugging. + + if(psramFound()){ + size_t psram_size = esp_spiram_get_size() / 1048576; + Serial.printf("PSRAM size: %dMb\r\n", psram_size); + } + + // M5Core2 receiver target (P2P or 1:1 mode) + // uint8_t macRecv[6] = {0xB8,0xF0,0x09,0xC6,0x0E,0xCC}; + // radio.setTarget(macRecv); + radio.init(); + + // You are able to change the Camera config E.g: + // Camera.config.fb_count = 2; + // Camera.config.frame_size = FRAMESIZE_QQVGA; + + if (!Camera.begin()) { + Serial.println("Camera Init Fail"); + } + delay(500); +} + +void loop() { + processFrame(); +} diff --git a/examples/esp32cam-basic-sender/platformio.ini b/examples/esp32cam-basic-sender/platformio.ini new file mode 100644 index 0000000..f2b484b --- /dev/null +++ b/examples/esp32cam-basic-sender/platformio.ini @@ -0,0 +1,26 @@ +; ESPNowCam Freenove ESP32S3CAM +; https://github.com/hpsaturn/esp32s3-cam +; @Hpsaturn 2024 + +[platformio] +src_dir = ./ + +[env] +platform = espressif32 +framework = arduino +monitor_speed = 115200 +monitor_filters = + esp32_exception_decoder + time +build_flags = + -D CORE_DEBUG_LEVEL=3 + -D BOARD_HAS_PSRAM=1 + +[esp32common] +extends = env +board = esp32dev + +[env:freenove-basic-sender] +extends = esp32common +lib_deps = + hpsaturn/EspNowCam@^0.1.12 diff --git a/examples/esp32cam-p2p-sender/esp32cam-p2p-sender.cpp b/examples/esp32cam-p2p-sender/esp32cam-p2p-sender.cpp new file mode 100644 index 0000000..2fe2a34 --- /dev/null +++ b/examples/esp32cam-p2p-sender/esp32cam-p2p-sender.cpp @@ -0,0 +1,60 @@ +/************************************************** + * ESP32Cam AI-Thinker Transmitter + * by @hpsaturn Copyright (C) 2024 + * This file is part ESPNowCam project: + * https://github.com/hpsaturn/ESPNowCam +**************************************************/ + +// N O T E: +// ------- +// Don't forget first install NanoPb library! +// and also review the README.md file. + +#include +#include +#include + +CamAIThinker Camera; +ESPNowCam radio; + +void processFrame() { + if (Camera.get()) { + uint8_t *out_jpg = NULL; + size_t out_jpg_len = 0; + frame2jpg(Camera.fb, 12, &out_jpg, &out_jpg_len); + radio.sendData(out_jpg, out_jpg_len); + free(out_jpg); + Camera.free(); + } +} + +void setup() { + Serial.begin(115200); + Serial.setDebugOutput(true); + Serial.println(); + + delay(1000); // only for debugging. + + if(psramFound()){ + size_t psram_size = esp_spiram_get_size() / 1048576; + Serial.printf("PSRAM size: %dMb\r\n", psram_size); + } + + // M5Core2 receiver target (P2P or 1:1 mode) + uint8_t macRecv[6] = {0xB8,0xF0,0x09,0xC6,0x0E,0xCC}; + radio.setTarget(macRecv); + radio.init(); + + // You are able to change the Camera config E.g: + // Camera.config.fb_count = 2; + // Camera.config.frame_size = FRAMESIZE_QQVGA; + + if (!Camera.begin()) { + Serial.println("Camera Init Fail"); + } + delay(500); +} + +void loop() { + processFrame(); +} diff --git a/platformio.ini b/platformio.ini index 1eed717..343ddc4 100644 --- a/platformio.ini +++ b/platformio.ini @@ -17,7 +17,7 @@ build_flags = ; -Wall ; -Wextra ; -Werror - -D CORE_DEBUG_LEVEL=0 + -D CORE_DEBUG_LEVEL=3 -D BOARD_HAS_PSRAM=1 lib_deps = nanopb/Nanopb@0.4.8 @@ -102,6 +102,12 @@ extends = env board = esp32dev build_src_filter = -<*> -<*common*> + +[env:esp32cam-p2p-sender] +platform = espressif32 +extends = env +board = esp32dev +build_src_filter = -<*> -<*common*> + + [env:m5cores3-espnow-sender] extends = m5cores3_common build_src_filter = -<*> + diff --git a/src/drivers/CamAIThinker.h b/src/drivers/CamAIThinker.h index 7fbdf97..19f75fc 100644 --- a/src/drivers/CamAIThinker.h +++ b/src/drivers/CamAIThinker.h @@ -13,8 +13,8 @@ class CamAIThinker : public CameraBase { CamAIThinker(){ config.pin_reset = -1; config.pin_xclk = 0; - config.pin_sscb_sda = 26; - config.pin_sscb_scl = 27; + config.pin_sccb_sda = 26; + config.pin_sccb_scl = 27; config.pin_d7 = 35; config.pin_d6 = 34; config.pin_d5 = 39; @@ -29,11 +29,11 @@ class CamAIThinker : public CameraBase { config.xclk_freq_hz = 20000000; config.ledc_timer = LEDC_TIMER_0; config.ledc_channel = LEDC_CHANNEL_0; - config.pixel_format = PIXFORMAT_JPEG; + config.pixel_format = PIXFORMAT_RGB565; config.frame_size = FRAMESIZE_QVGA; config.jpeg_quality = 12; - config.fb_count = 1; - config.fb_location = CAMERA_FB_IN_DRAM; + config.fb_count = 2; + config.fb_location = CAMERA_FB_IN_PSRAM; config.grab_mode = CAMERA_GRAB_WHEN_EMPTY; } }; diff --git a/src/drivers/CamTJournal.h b/src/drivers/CamTJournal.h index 077ff08..ea8fdcc 100644 --- a/src/drivers/CamTJournal.h +++ b/src/drivers/CamTJournal.h @@ -13,8 +13,8 @@ class CamTJournal : public CameraBase { CamTJournal(){ config.pin_reset = 15; config.pin_xclk = 27; - config.pin_sscb_sda = 25; - config.pin_sscb_scl = 23; + config.pin_sccb_sda = 25; + config.pin_sccb_scl = 23; config.pin_d7 = 19; config.pin_d6 = 36; config.pin_d5 = 18;