Thanks for producing the book. In a short time I got FTP camera images to work thanks to the book.
e#include "sdkconfig.h" // used for log printing #include "esp_system.h" #include "freertos/FreeRTOS.h" //freeRTOS items to be used #include "freertos/task.h" #include "certs.h" #include "esp_camera.h" #include "soc/soc.h" #include "soc/rtc_cntl_reg.h" #include "driver/rtc_io.h" #include <WiFi.h> #include <WiFiClient.h> #include "ESP32_FTPClient.h" // WiFiClient wifiClient; // do the WiFi instantiation thing ESP32_FTPClient ftp (ftp_server, ftp_user, ftp_pass, 5000, 2); // // Pin definition for CAMERA_MODEL_AI_THINKER // Change pin definition if you're using another ESP32 with camera module #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 //// void IRAM_ATTR WiFiEvent(WiFiEvent_t event) { switch (event) { case SYSTEM_EVENT_STA_CONNECTED: log_i("Connected to WiFi access point"); break; case SYSTEM_EVENT_STA_DISCONNECTED: log_i("Disconnected from WiFi access point"); break; case SYSTEM_EVENT_AP_STADISCONNECTED: log_i("WiFi client disconnected"); break; default: break; } } // void IRAM_ATTR WiFiEvent(WiFiEvent_t event) //// void setup() { WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector //// configInitCamera(); // xTaskCreatePinnedToCore( capturePhoto_sendFTP, "capturePhoto_sendFTP", 20000, NULL, 3, NULL, 1 ); } // void setup() //// void capturePhoto_sendFTP( void *pvParameters ) { TickType_t xLastWakeTime = xTaskGetTickCount(); const TickType_t xFrequency = 1000 * 15; //delay for mS for (;;) { log_i( "tick"); if ( WiFi.status() == WL_CONNECTED ) { camera_fb_t * fb = NULL; // pointer fb = esp_camera_fb_get(); if (!fb) { log_i( "Camera capture failed" ); } else { ftp.OpenConnection(); // try open FTP if ( ftp.isConnected() ) { //try send file ftp to RPi ftp.ChangeWorkDir( ftp_path ); // Delete existing file, create the new file, and send the image to the file ftp.DeleteFile( ftp_file_name ); ftp.InitFile( ftp_file_type ); ftp.NewFile( ftp_file_name ); log_i( "length %d", fb->len ); //void WriteData (unsigned char * data, int dataLength); //Convert image to unsigned character data format for sending FTP ftp.WriteData( (unsigned char *)fb->buf, fb->len ); ftp.CloseFile(); ftp.CloseConnection(); } esp_camera_fb_return(fb); //return the frame buffer back to the driver for reuse } } else { log_i( "In capturePhoto_sendFTP found WiFi not connected "); connectToWiFi(); } xLastWakeTime = xTaskGetTickCount(); vTaskDelayUntil( &xLastWakeTime, xFrequency ); } vTaskDelete( NULL ); } //void capturePhoto_sendFTP( void *pvParameters ) //// void configInitCamera() { // Stores the camera configuration parameters camera_config_t config; config.ledc_channel = LEDC_CHANNEL_0; config.ledc_timer = LEDC_TIMER_0; config.pin_d0 = Y2_GPIO_NUM; config.pin_d1 = Y3_GPIO_NUM; config.pin_d2 = Y4_GPIO_NUM; config.pin_d3 = Y5_GPIO_NUM; config.pin_d4 = Y6_GPIO_NUM; config.pin_d5 = Y7_GPIO_NUM; config.pin_d6 = Y8_GPIO_NUM; config.pin_d7 = Y9_GPIO_NUM; config.pin_xclk = XCLK_GPIO_NUM; config.pin_pclk = PCLK_GPIO_NUM; config.pin_vsync = VSYNC_GPIO_NUM; config.pin_href = HREF_GPIO_NUM; config.pin_sscb_sda = SIOD_GPIO_NUM; config.pin_sscb_scl = SIOC_GPIO_NUM; config.pin_pwdn = PWDN_GPIO_NUM; config.pin_reset = RESET_GPIO_NUM; config.xclk_freq_hz = 20000000; config.pixel_format = PIXFORMAT_JPEG; // Select lower framesize if the camera doesn't support PSRAM if (psramFound()) { config.frame_size = FRAMESIZE_UXGA; // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA config.jpeg_quality = 10; //0-63 lower number means higher quality config.fb_count = 2; } else { config.frame_size = FRAMESIZE_SVGA; config.jpeg_quality = 12; config.fb_count = 1; } // Initialize the Camera esp_err_t err = esp_camera_init(&config); if (err != ESP_OK) { log_i("Camera init failed with error 0x%x", err); return; } } //void configInitCamera() //// void connectToWiFi() { int TryCount = 0; while ( WiFi.status() != WL_CONNECTED ) { TryCount++; WiFi.disconnect(); WiFi.begin( SSID, PASSWORD ); vTaskDelay( 4000 ); if ( TryCount == 10 ) { ESP.restart(); } } WiFi.onEvent( WiFiEvent ); } //// void loop() {}
I share my code and hope another may find it useful. Again Thanks for producing the book.
1 Answers
Hi.
That’s great!
Thanks for sharing.
If you use Facebook, can you post it in our Facebook group? It may reach more people.
Here’s the link to the group: https://www.facebook.com/groups/RandomNerdTutorials/
Thank you so much.
Regards,
Sara