<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[AtomS3R Camera &amp; esp_camera.h example]]></title><description><![CDATA[<p dir="auto">Hi all, I can upload and run the camera.ino Arduino sketch on <a href="https://github.com/m5stack/M5AtomS3/blob/main/examples/Basics/camera/camera.ino" target="_blank" rel="noopener noreferrer nofollow ugc">GitHub</a> setting OPI PSRAM in tools menu in Arduino IDE 2.3.4.</p>
<p dir="auto">I wolud like now to try this project <a href="https://randomnerdtutorials.com/esp32-cam-take-photo-display-web-server/" target="_blank" rel="noopener noreferrer nofollow ugc">ESP32-CAM Take Photo and Display in Web Server</a> but without any joy!!</p>
<pre><code>/*********
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp32-cam-take-photo-display-web-server/
  
  IMPORTANT!!! 
   - Select Board "AI Thinker ESP32-CAM"
   - GPIO 0 must be connected to GND to upload a sketch
   - After connecting GPIO 0 to GND, press the ESP32-CAM on-board RESET button to put your board in flashing mode
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*********/

#include "WiFi.h"
#include "esp_camera.h"
#include "esp_timer.h"
#include "img_converters.h"
#include "Arduino.h"
#include "soc/soc.h"           // Disable brownour problems
#include "soc/rtc_cntl_reg.h"  // Disable brownour problems
#include "driver/rtc_io.h"
#include &lt;ESPAsyncWebServer.h&gt;
#include &lt;SPIFFS.h&gt;
#include &lt;FS.h&gt;

// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Create AsyncWebServer object on port 80
AsyncWebServer server(80);

boolean takeNewPhoto = false;

// Photo File Name to save in SPIFFS
#define FILE_PHOTO "/photo.jpg"

// OV2640 camera module pins (CAMERA_MODEL_AI_THINKER)
#define PWDN_GPIO_NUM     -1
#define RESET_GPIO_NUM    -1
#define XCLK_GPIO_NUM     21
#define SIOD_GPIO_NUM     12
#define SIOC_GPIO_NUM     9
#define Y9_GPIO_NUM       13
#define Y8_GPIO_NUM       11
#define Y7_GPIO_NUM       17
#define Y6_GPIO_NUM       4
#define Y5_GPIO_NUM       48
#define Y4_GPIO_NUM       46
#define Y3_GPIO_NUM       42
#define Y2_GPIO_NUM        3
#define VSYNC_GPIO_NUM    10
#define HREF_GPIO_NUM     14
#define PCLK_GPIO_NUM     40

const char index_html[] PROGMEM = R"rawliteral(
&lt;!DOCTYPE HTML&gt;&lt;html&gt;
&lt;head&gt;
  &lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;
  &lt;style&gt;
    body { text-align:center; }
    .vert { margin-bottom: 10%; }
    .hori{ margin-bottom: 0%; }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div id="container"&gt;
    &lt;h2&gt;ESP32-CAM Last Photo&lt;/h2&gt;
    &lt;p&gt;It might take more than 5 seconds to capture a photo.&lt;/p&gt;
    &lt;p&gt;
      &lt;button onclick="rotatePhoto();"&gt;ROTATE&lt;/button&gt;
      &lt;button onclick="capturePhoto()"&gt;CAPTURE PHOTO&lt;/button&gt;
      &lt;button onclick="location.reload();"&gt;REFRESH PAGE&lt;/button&gt;
    &lt;/p&gt;
  &lt;/div&gt;
  &lt;div&gt;&lt;img src="saved-photo" id="photo" width="70%"&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;script&gt;
  var deg = 0;
  function capturePhoto() {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', "/capture", true);
    xhr.send();
  }
  function rotatePhoto() {
    var img = document.getElementById("photo");
    deg += 90;
    if(isOdd(deg/90)){ document.getElementById("container").className = "vert"; }
    else{ document.getElementById("container").className = "hori"; }
    img.style.transform = "rotate(" + deg + "deg)";
  }
  function isOdd(n) { return Math.abs(n % 2) == 1; }
&lt;/script&gt;
&lt;/html&gt;)rawliteral";

void setup() {
  // Serial port for debugging purposes
  Serial.begin(115200);

  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  if (!SPIFFS.begin(true)) {
    Serial.println("An Error has occurred while mounting SPIFFS");
    ESP.restart();
  }
  else {
    delay(500);
    Serial.println("SPIFFS mounted successfully");
  }

  // Print ESP32 Local IP Address
  Serial.print("IP Address: http://");
  Serial.println(WiFi.localIP());

  // Turn-off the 'brownout detector'
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);

  // OV2640 camera module
  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.pixel_format = PIXFORMAT_JPEG;

  if (psramFound()) {
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }
  // Camera init
  esp_err_t err = esp_camera_init(&amp;config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    ESP.restart();
  }

  // Route for root / web page
  server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
    request-&gt;send(200, "text/html", index_html);
  });

  server.on("/capture", HTTP_GET, [](AsyncWebServerRequest * request) {
    takeNewPhoto = true;
    request-&gt;send(200, "text/plain", "Taking Photo");
  });

  server.on("/saved-photo", HTTP_GET, [](AsyncWebServerRequest * request) {
    request-&gt;send(SPIFFS, FILE_PHOTO, "image/jpg", false);
  });

  // Start server
  server.begin();

}

void loop() {
  if (takeNewPhoto) {
    capturePhotoSaveSpiffs();
    takeNewPhoto = false;
  }
  delay(1);
}

// Check if photo capture was successful
bool checkPhoto( fs::FS &amp;fs ) {
  File f_pic = fs.open( FILE_PHOTO );
  unsigned int pic_sz = f_pic.size();
  return ( pic_sz &gt; 100 );
}

// Capture Photo and Save it to SPIFFS
void capturePhotoSaveSpiffs( void ) {
  camera_fb_t * fb = NULL; // pointer
  bool ok = 0; // Boolean indicating if the picture has been taken correctly

  do {
    // Take a photo with the camera
    Serial.println("Taking a photo...");

    fb = esp_camera_fb_get();
    if (!fb) {
      Serial.println("Camera capture failed");
      return;
    }

    // Photo file name
    Serial.printf("Picture file name: %s\n", FILE_PHOTO);
    File file = SPIFFS.open(FILE_PHOTO, FILE_WRITE);

    // Insert the data in the photo file
    if (!file) {
      Serial.println("Failed to open file in writing mode");
    }
    else {
      file.write(fb-&gt;buf, fb-&gt;len); // payload (image), payload length
      Serial.print("The picture has been saved in ");
      Serial.print(FILE_PHOTO);
      Serial.print(" - Size: ");
      Serial.print(file.size());
      Serial.println(" bytes");
    }
    // Close the file
    file.close();
    esp_camera_fb_return(fb);

    // check if file has been correctly saved in SPIFFS
    ok = checkPhoto(SPIFFS);
  } while ( !ok );
}
</code></pre>
<p dir="auto">I copied and pasted settings from the camera_pins.h tab but atom cam crash..</p>
<pre><code>load:0x403cb700,len:0x30e4
entry 0x403c88ac
Connecting to WiFi...
SPIFFS mounted successfully
IP Address: http://192.168.1.97ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0x3 (RTC_SW_SYS_RST),boot:0x18 (SPI_FAST_FLASH_BOOT)
Saved PC:0x40376b24
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce2820,len:0x1188
load:0x403c8700,len:0x4
load:0x403c8704,len:0xbf0
load:0x403cb700,len:0x30e4
entry 0x403c88ac
Connecting to WiFi...
SPIFFS mounted successfully
IP Address: http://192.168.1.97
ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0x3 (RTC_SW_SYS_RST),boot:0x18 (SPI_FAST_FLASH_BOOT)
Saved PC:0x40376b24
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce2820,len:0x1188
load:0x403c8700,len:0x4
load:0x403c8704,len:0xbf0
load:0x403cb700,len:0x30e4
entry 0x403c88ac
Connecting to WiFi...
SPIFFS mounted successfully
IP Address: http://192.168.1.97
ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0x3 (RTC_SW_SYS_RST),boot:0x18 (SPI_FAST_FLASH_BOOT)
Saved PC:0x40376b24
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce2820,len:0x1188
load:0x403c8700,len:0x4
load:0x403c8704,len:0xbf0
load:0x403cb700,len:0x30e4
entry 0x403c88ac
</code></pre>
<p dir="auto">I know this example is made for AI Thinker ESP32-CAM but changing camera_pins is not enough...</p>
<p dir="auto">some tips?</p>
<p dir="auto">best regards</p>
]]></description><link>https://community.m5stack.com/topic/7325/atoms3r-camera-esp_camera-h-example</link><generator>RSS for Node</generator><lastBuildDate>Fri, 06 Mar 2026 14:43:48 GMT</lastBuildDate><atom:link href="https://community.m5stack.com/topic/7325.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 25 Feb 2025 08:32:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to AtomS3R Camera &amp; esp_camera.h example on Thu, 27 Mar 2025 07:05:10 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/168201">@kuriko</a> thanks for the reply, as I wrote on post n. 1,</p>
<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/935">@cepics</a> said in <a href="/post/28328">AtomS3R Camera &amp; esp_camera.h example</a>:</p>
<blockquote>
<p dir="auto">I can upload and run the camera.ino</p>
</blockquote>
<p dir="auto">for my project I need to take picture and display it in a web page....</p>
]]></description><link>https://community.m5stack.com/post/28679</link><guid isPermaLink="true">https://community.m5stack.com/post/28679</guid><dc:creator><![CDATA[cepics]]></dc:creator><pubDate>Thu, 27 Mar 2025 07:05:10 GMT</pubDate></item><item><title><![CDATA[Reply to AtomS3R Camera &amp; esp_camera.h example on Tue, 11 Mar 2025 02:51:41 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/935">@cepics</a><br />
why don't you try this example? <a href="https://github.com/m5stack/M5AtomS3/blob/main/examples/Basics/camera/camera.ino" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/m5stack/M5AtomS3/blob/main/examples/Basics/camera/camera.ino</a></p>
]]></description><link>https://community.m5stack.com/post/28452</link><guid isPermaLink="true">https://community.m5stack.com/post/28452</guid><dc:creator><![CDATA[kuriko]]></dc:creator><pubDate>Tue, 11 Mar 2025 02:51:41 GMT</pubDate></item><item><title><![CDATA[Reply to AtomS3R Camera &amp; esp_camera.h example on Fri, 07 Mar 2025 10:37:55 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/935">@cepics</a> nobody?</p>
]]></description><link>https://community.m5stack.com/post/28424</link><guid isPermaLink="true">https://community.m5stack.com/post/28424</guid><dc:creator><![CDATA[cepics]]></dc:creator><pubDate>Fri, 07 Mar 2025 10:37:55 GMT</pubDate></item></channel></rss>