{"id":94745,"date":"2020-03-09T11:27:07","date_gmt":"2020-03-09T11:27:07","guid":{"rendered":"https:\/\/randomnerdtutorials.com\/?p=94745"},"modified":"2020-04-30T10:30:41","modified_gmt":"2020-04-30T10:30:41","slug":"esp32-cam-ov2640-camera-settings","status":"publish","type":"post","link":"https:\/\/randomnerdtutorials.com\/esp32-cam-ov2640-camera-settings\/","title":{"rendered":"Change ESP32-CAM OV2640 Camera Settings: Brightness, Resolution, Quality, Contrast, and More"},"content":{"rendered":"\n<p>This guide shows how to change the <a rel=\"noreferrer noopener\" aria-label=\"ESP32-CAM OV2640 (opens in a new tab)\" href=\"https:\/\/makeradvisor.com\/tools\/esp32-cam\/\" target=\"_blank\">ESP32-CAM OV2640<\/a> camera settings such as contrast, brightness, resolution, quality, saturation and more using Arduino IDE.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" fetchpriority=\"high\" decoding=\"async\" width=\"1200\" height=\"675\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-Settings.jpg?resize=1200%2C675&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"How to Change ESP32-CAM Camera Settings contrast brightness resolution quality saturation exposure\" class=\"wp-image-94751\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-Settings.jpg?w=1280&amp;quality=100&amp;strip=all&amp;ssl=1 1280w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-Settings.jpg?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-Settings.jpg?resize=1024%2C576&amp;quality=100&amp;strip=all&amp;ssl=1 1024w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-Settings.jpg?resize=768%2C432&amp;quality=100&amp;strip=all&amp;ssl=1 768w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure><\/div>\n\n\n\n<p>The instructions in this tutorial work for any ESP32 camera development board as long as it comes with the OV2640 camera.<\/p>\n\n\n\n<p><strong>You may like reading:<\/strong> <a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/makeradvisor.com\/esp32-camera-cam-boards-review-comparison\/\" target=\"_blank\">Best ESP32 Camera Development Board<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installing the ESP32 add-on<\/h2>\n\n\n\n<p>We\u2019ll program the ESP32 board using Arduino IDE. So, you need the Arduino IDE installed as well as the ESP32 add-on:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/randomnerdtutorials.com\/installing-the-esp32-board-in-arduino-ide-windows-instructions\/\">Installing the ESP32 Board in Arduino IDE (Windows, Mac OS X, Linux)<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">OV2640 Camera Settings<\/h2>\n\n\n\n<p>In the <a href=\"https:\/\/randomnerdtutorials.com\/esp32-cam-video-streaming-face-recognition-arduino-ide\/\">ESP32 Camera Web Server project<\/a>, the web server provided a lot of options to change the image settings. Take a look at the following screenshot &#8211; there are sliders that you can move to change the image settings. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"750\" height=\"407\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/03\/ESP32-CAM-video-streaming-example.jpg?resize=750%2C407&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"OV2640 Camera Settings ESP32-CAM AI Thinker\" class=\"wp-image-82436\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/03\/ESP32-CAM-video-streaming-example.jpg?w=750&amp;quality=100&amp;strip=all&amp;ssl=1 750w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/03\/ESP32-CAM-video-streaming-example.jpg?resize=300%2C163&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n\n<p>In this tutorial we&#8217;ll show you how to implement those changes on your code regardless of the project you&#8217;re building: taking photos or streaming video.<\/p>\n\n\n\n<p>We recommend that you follow the <a href=\"https:\/\/randomnerdtutorials.com\/esp32-cam-video-streaming-face-recognition-arduino-ide\/\">Camera Web Server project<\/a> first and play with the image settings to see what each setting does:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/randomnerdtutorials.com\/esp32-cam-video-streaming-face-recognition-arduino-ide\/\">ESP32-CAM Video Streaming and Face Recognition with Arduino IDE<\/a><\/li><\/ul>\n\n\n\n<p>Depending on where your camera is located, you may want to change some settings to get a better picture. Playing with that web server gives you an idea of what you need to change and what values you need to set to get a better picture. Once you know the best settings for your camera, you may want to apply them in your other projects.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Changing ESP32-CAM Camera Settings Arduino Sketch<\/h2>\n\n\n\n<p> To change the image settings, after initializing the camera, use the following lines:<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>sensor_t * s = esp_camera_sensor_get()\n\ns->set_brightness(s, 0);     \/\/ -2 to 2\ns->set_contrast(s, 0);       \/\/ -2 to 2\ns->set_saturation(s, 0);     \/\/ -2 to 2\ns->set_special_effect(s, 0); \/\/ 0 to 6 (0 - No Effect, 1 - Negative, 2 - Grayscale, 3 - Red Tint, 4 - Green Tint, 5 - Blue Tint, 6 - Sepia)\ns->set_whitebal(s, 1);       \/\/ 0 = disable , 1 = enable\ns->set_awb_gain(s, 1);       \/\/ 0 = disable , 1 = enable\ns->set_wb_mode(s, 0);        \/\/ 0 to 4 - if awb_gain enabled (0 - Auto, 1 - Sunny, 2 - Cloudy, 3 - Office, 4 - Home)\ns->set_exposure_ctrl(s, 1);  \/\/ 0 = disable , 1 = enable\ns->set_aec2(s, 0);           \/\/ 0 = disable , 1 = enable\ns->set_ae_level(s, 0);       \/\/ -2 to 2\ns->set_aec_value(s, 300);    \/\/ 0 to 1200\ns->set_gain_ctrl(s, 1);      \/\/ 0 = disable , 1 = enable\ns->set_agc_gain(s, 0);       \/\/ 0 to 30\ns->set_gainceiling(s, (gainceiling_t)0);  \/\/ 0 to 6\ns->set_bpc(s, 0);            \/\/ 0 = disable , 1 = enable\ns->set_wpc(s, 1);            \/\/ 0 = disable , 1 = enable\ns->set_raw_gma(s, 1);        \/\/ 0 = disable , 1 = enable\ns->set_lenc(s, 1);           \/\/ 0 = disable , 1 = enable\ns->set_hmirror(s, 0);        \/\/ 0 = disable , 1 = enable\ns->set_vflip(s, 0);          \/\/ 0 = disable , 1 = enable\ns->set_dcw(s, 1);            \/\/ 0 = disable , 1 = enable\ns->set_colorbar(s, 0);       \/\/ 0 = disable , 1 = enable<\/code><\/pre>\n\n\n\n<p>The following table shows each function and the values accepted:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Function<\/strong><\/td><td><strong>Meaning<\/strong><\/td><td><strong>Values<\/strong><\/td><\/tr><tr><td>set_brightness()<\/td><td>Set brightness<\/td><td>-2 to 2<\/td><\/tr><tr><td>set_contrast()<\/td><td>Set contrast<\/td><td>-2 to 2 <\/td><\/tr><tr><td>set_saturation()<\/td><td>Set saturation<\/td><td>-2 to 2 <\/td><\/tr><tr><td>set_special_effect()<\/td><td>Set a special effect<\/td><td>0 &#8211; No Effect<br>1 &#8211; Negative<br>2 &#8211; Grayscale<br>3 &#8211; Red Tint<br>4 &#8211; Green Tint<br>5 &#8211; Blue Tint<br>6 &#8211; Sepia<\/td><\/tr><tr><td>set_whitebal()<\/td><td>Set white balance<\/td><td>0 &#8211; disable<br>1 &#8211; enable<\/td><\/tr><tr><td>set_awb_gain()<\/td><td>Set white balance gain<\/td><td>0 &#8211; disable<br>1 &#8211; enable <\/td><\/tr><tr><td>set_wb_mode()<\/td><td>Set white balance mode<\/td><td>0 &#8211; Auto<br>1 &#8211; Sunny<br>2 &#8211; Cloudy<br>3 &#8211; Office<br>4 &#8211; Home<\/td><\/tr><tr><td>set_exposure_ctrl()<\/td><td>Set exposure control<\/td><td>0 &#8211; disable<br>1 &#8211; enable<\/td><\/tr><tr><td>set_aec2()<\/td><td><\/td><td>0 &#8211; disable<br>1 &#8211; enable<\/td><\/tr><tr><td>set_ae_level()<\/td><td><\/td><td>-2 to 2<\/td><\/tr><tr><td>set_aec_value()<\/td><td><\/td><td>0 to 1200<\/td><\/tr><tr><td>set_gain_ctrl()<\/td><td><\/td><td>0 &#8211; disable<br>1 &#8211; enable<\/td><\/tr><tr><td>set_agc_gain()<\/td><td><\/td><td>0 to 30<\/td><\/tr><tr><td>set_gainceiling()<\/td><td><\/td><td>0 to 6<\/td><\/tr><tr><td>set_bpc()<\/td><td><\/td><td>0 &#8211; disable<br>1 &#8211; enable<\/td><\/tr><tr><td>set_wpc()<\/td><td><\/td><td>0 &#8211; disable<br>1 &#8211; enable<\/td><\/tr><tr><td>set_raw_gma()<\/td><td><\/td><td>0 &#8211; disable<br>1 &#8211; enable<\/td><\/tr><tr><td>set_lenc()<\/td><td>Set lens correction<\/td><td>0 &#8211; disable<br>1 &#8211; enable<\/td><\/tr><tr><td>set_hmirror()<\/td><td>Horizontal mirror<\/td><td>0 &#8211; disable<br>1 &#8211; enable<\/td><\/tr><tr><td>set_vflip()<\/td><td>Vertical flip<\/td><td>0 &#8211; disable<br>1 &#8211; enable<\/td><\/tr><tr><td>set_dcw()<\/td><td><\/td><td>0 &#8211; disable<br>1 &#8211; enable <\/td><\/tr><tr><td>set_colorbar()<\/td><td>Set a colorbar<\/td><td>0 &#8211; disable<br>1 &#8211; enable<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>As you can see, changing the camera settings is pretty straightforward. You just need to use those lines of code after initializing the camera. After that, you can use the usual functions and code to control the camera. To better understand how to use them, you can follow the next example.<\/p>\n\n\n\n<p>The functions in the table appear in the same order as in the <a href=\"https:\/\/randomnerdtutorials.com\/esp32-cam-video-streaming-face-recognition-arduino-ide\/\">Camera Web Server example<\/a> so that it is easier to identify which functions and values you should use to get a better image in your scenario.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Changing ESP32-CAM Camera Settings Example<\/h2>\n\n\n\n<p>To show you how to apply the image settings in your code, we&#8217;ve built a simple example. The following code takes a photo every 10 seconds and saves it in the microSD card. There&#8217;s a section in the code that allows you to change the camera settings.<\/p>\n\n\n<pre style=\"max-height: 40em; margin-bottom: 20px;\"><code class=\"language-c\">\/*********\n  Rui Santos\n  Complete project details at https:\/\/RandomNerdTutorials.com\/esp32-cam-ov2640-camera-settings\/\n*********\/\n\n#include &quot;esp_camera.h&quot;\n#include &quot;FS.h&quot;                \/\/ SD Card ESP32\n#include &quot;SD_MMC.h&quot;            \/\/ SD Card ESP32\n#include &quot;soc\/soc.h&quot;           \/\/ Disable brownout problems\n#include &quot;soc\/rtc_cntl_reg.h&quot;  \/\/ Disable brownout problems\n#include &quot;driver\/rtc_io.h&quot;\n\n\/\/ Pin definition for CAMERA_MODEL_AI_THINKER\n\/\/ Change pin definition if you're using another ESP32 with camera module\n#define PWDN_GPIO_NUM     32\n#define RESET_GPIO_NUM    -1\n#define XCLK_GPIO_NUM      0\n#define SIOD_GPIO_NUM     26\n#define SIOC_GPIO_NUM     27\n#define Y9_GPIO_NUM       35\n#define Y8_GPIO_NUM       34\n#define Y7_GPIO_NUM       39\n#define Y6_GPIO_NUM       36\n#define Y5_GPIO_NUM       21\n#define Y4_GPIO_NUM       19\n#define Y3_GPIO_NUM       18\n#define Y2_GPIO_NUM        5\n#define VSYNC_GPIO_NUM    25\n#define HREF_GPIO_NUM     23\n#define PCLK_GPIO_NUM     22\n\n\/\/ Keep track of number of pictures\nunsigned int pictureNumber = 0;\n\n\/\/Stores the camera configuration parameters\ncamera_config_t config;\n\nvoid setup() {\n  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); \/\/disable brownout detector\n \n  Serial.begin(115200);\n  \n  \/\/Initialize the camera  \n  Serial.print(&quot;Initializing the camera module...&quot;);\n  configInitCamera();\n  Serial.println(&quot;Ok!&quot;);\n \n  \/\/Initialize MicroSD\n  Serial.print(&quot;Initializing the MicroSD card module... &quot;);\n  initMicroSDCard();\n}\n\nvoid loop() {\n  \/\/Path where new picture will be saved in SD Card\n  String path = &quot;\/picture&quot; + String(pictureNumber) +&quot;.jpg&quot;;  \n  Serial.printf(&quot;Picture file name: %s\\n&quot;, path.c_str());\n\n  \/\/Take and Save Photo\n  takeSavePhoto(path);\n  pictureNumber++;\n  delay(10000); \n}\n\nvoid configInitCamera(){\n  config.ledc_channel = LEDC_CHANNEL_0;\n  config.ledc_timer = LEDC_TIMER_0;\n  config.pin_d0 = Y2_GPIO_NUM;\n  config.pin_d1 = Y3_GPIO_NUM;\n  config.pin_d2 = Y4_GPIO_NUM;\n  config.pin_d3 = Y5_GPIO_NUM;\n  config.pin_d4 = Y6_GPIO_NUM;\n  config.pin_d5 = Y7_GPIO_NUM;\n  config.pin_d6 = Y8_GPIO_NUM;\n  config.pin_d7 = Y9_GPIO_NUM;\n  config.pin_xclk = XCLK_GPIO_NUM;\n  config.pin_pclk = PCLK_GPIO_NUM;\n  config.pin_vsync = VSYNC_GPIO_NUM;\n  config.pin_href = HREF_GPIO_NUM;\n  config.pin_sccb_sda = SIOD_GPIO_NUM;\n  config.pin_sccb_scl = SIOC_GPIO_NUM;\n  config.pin_pwdn = PWDN_GPIO_NUM;\n  config.pin_reset = RESET_GPIO_NUM;\n  config.xclk_freq_hz = 20000000;\n  config.pixel_format = PIXFORMAT_JPEG; \/\/YUV422,GRAYSCALE,RGB565,JPEG\n\n  \/\/ Select lower framesize if the camera doesn't support PSRAM\n  if(psramFound()){\n    config.frame_size = FRAMESIZE_UXGA; \/\/ FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA\n    config.jpeg_quality = 10; \/\/10-63 lower number means higher quality\n    config.fb_count = 2;\n  } else {\n    config.frame_size = FRAMESIZE_SVGA;\n    config.jpeg_quality = 12;\n    config.fb_count = 1;\n  }\n  \n  \/\/ Initialize the Camera\n  esp_err_t err = esp_camera_init(&amp;config);\n  if (err != ESP_OK) {\n    Serial.printf(&quot;Camera init failed with error 0x%x&quot;, err);\n    return;\n  }\n\n  sensor_t * s = esp_camera_sensor_get();\n  s-&gt;set_brightness(s, 0);     \/\/ -2 to 2\n  s-&gt;set_contrast(s, 0);       \/\/ -2 to 2\n  s-&gt;set_saturation(s, 0);     \/\/ -2 to 2\n  s-&gt;set_special_effect(s, 0); \/\/ 0 to 6 (0 - No Effect, 1 - Negative, 2 - Grayscale, 3 - Red Tint, 4 - Green Tint, 5 - Blue Tint, 6 - Sepia)\n  s-&gt;set_whitebal(s, 1);       \/\/ 0 = disable , 1 = enable\n  s-&gt;set_awb_gain(s, 1);       \/\/ 0 = disable , 1 = enable\n  s-&gt;set_wb_mode(s, 0);        \/\/ 0 to 4 - if awb_gain enabled (0 - Auto, 1 - Sunny, 2 - Cloudy, 3 - Office, 4 - Home)\n  s-&gt;set_exposure_ctrl(s, 1);  \/\/ 0 = disable , 1 = enable\n  s-&gt;set_aec2(s, 0);           \/\/ 0 = disable , 1 = enable\n  s-&gt;set_ae_level(s, 0);       \/\/ -2 to 2\n  s-&gt;set_aec_value(s, 300);    \/\/ 0 to 1200\n  s-&gt;set_gain_ctrl(s, 1);      \/\/ 0 = disable , 1 = enable\n  s-&gt;set_agc_gain(s, 0);       \/\/ 0 to 30\n  s-&gt;set_gainceiling(s, (gainceiling_t)0);  \/\/ 0 to 6\n  s-&gt;set_bpc(s, 0);            \/\/ 0 = disable , 1 = enable\n  s-&gt;set_wpc(s, 1);            \/\/ 0 = disable , 1 = enable\n  s-&gt;set_raw_gma(s, 1);        \/\/ 0 = disable , 1 = enable\n  s-&gt;set_lenc(s, 1);           \/\/ 0 = disable , 1 = enable\n  s-&gt;set_hmirror(s, 0);        \/\/ 0 = disable , 1 = enable\n  s-&gt;set_vflip(s, 0);          \/\/ 0 = disable , 1 = enable\n  s-&gt;set_dcw(s, 1);            \/\/ 0 = disable , 1 = enable\n  s-&gt;set_colorbar(s, 0);       \/\/ 0 = disable , 1 = enable\n}\n\nvoid initMicroSDCard(){\n  \/\/ Start Micro SD card\n  Serial.println(&quot;Starting SD Card&quot;);\n  if(!SD_MMC.begin()){\n    Serial.println(&quot;SD Card Mount Failed&quot;);\n    return;\n  }\n  uint8_t cardType = SD_MMC.cardType();\n  if(cardType == CARD_NONE){\n    Serial.println(&quot;No SD Card attached&quot;);\n    return;\n  }\n}\n\nvoid takeSavePhoto(String path){\n  \/\/ Take Picture with Camera\n  camera_fb_t  * fb = esp_camera_fb_get();\n\n  \n  \n  if(!fb) {\n    Serial.println(&quot;Camera capture failed&quot;);\n    return;\n  }\n\n  \/\/ Save picture to microSD card\n  fs::FS &amp;fs = SD_MMC; \n  File file = fs.open(path.c_str(), FILE_WRITE);\n  if(!file){\n    Serial.println(&quot;Failed to open file in writing mode&quot;);\n  } \n  else {\n    file.write(fb-&gt;buf, fb-&gt;len); \/\/ payload (image), payload length\n    Serial.printf(&quot;Saved file to path: %s\\n&quot;, path.c_str());\n  }\n  file.close();\n  \n  \/\/return the frame buffer back to the driver for reuse\n  esp_camera_fb_return(fb); \n}\n<\/code><\/pre>\n\t<p style=\"text-align:center\"><a class=\"rntwhite\" href=\"https:\/\/github.com\/RuiSantosdotme\/ESP32-CAM-Arduino-IDE\/raw\/master\/ESP32-CAM-Change-Settings\/ESP32-CAM-Change-Settings.ino\" target=\"_blank\">View raw code<\/a><\/p>\n\n\n\n<p>To makes things simpler, we&#8217;ve created a function called <span class=\"rnthl rntliteral\">configInitCamera()<\/span> that contains all the commands to initialize the camera.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Assigning OV2640 GPIOs<\/h3>\n\n\n\n<p>First, it starts by assigning the GPIOs.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>config.ledc_channel = LEDC_CHANNEL_0;\nconfig.ledc_timer = LEDC_TIMER_0;\nconfig.pin_d0 = Y2_GPIO_NUM;\nconfig.pin_d1 = Y3_GPIO_NUM;\nconfig.pin_d2 = Y4_GPIO_NUM;\nconfig.pin_d3 = Y5_GPIO_NUM;\nconfig.pin_d4 = Y6_GPIO_NUM;\nconfig.pin_d5 = Y7_GPIO_NUM;\nconfig.pin_d6 = Y8_GPIO_NUM;\nconfig.pin_d7 = Y9_GPIO_NUM;\nconfig.pin_xclk = XCLK_GPIO_NUM;\nconfig.pin_pclk = PCLK_GPIO_NUM;\nconfig.pin_vsync = VSYNC_GPIO_NUM;\nconfig.pin_href = HREF_GPIO_NUM;\nconfig.pin_sscb_sda = SIOD_GPIO_NUM;\nconfig.pin_sscb_scl = SIOC_GPIO_NUM;\nconfig.pin_pwdn = PWDN_GPIO_NUM;\nconfig.pin_reset = RESET_GPIO_NUM;<\/code><\/pre>\n\n\n\n<p>The camera frequency:<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>config.xclk_freq_hz = 20000000;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">OV2640 image format, quality, and frame size<\/h3>\n\n\n\n<p>The image format:<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>config.pixel_format = PIXFORMAT_JPEG; \/\/YUV422,GRAYSCALE,RGB565,JPEG<\/code><\/pre>\n\n\n\n<p>The image format can be one of the following options:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><span class=\"rnthl rntliteral\">PIXFORMAT_YUV422<\/span><\/li><li><span class=\"rnthl rntliteral\">PIXFORMAT_GRAYSCALE<\/span><\/li><li><span class=\"rnthl rntliteral\">PIXFORMAT_RGB565<\/span><\/li><li><span class=\"rnthl rntliteral\">PIXFORMAT_JPEG<\/span><\/li><\/ul>\n\n\n\n<p>Then, set the frame size, jpeg quality and framebuffer count. We select different settings depending if you&#8217;re using a camera with PSRAM or without PSRAM.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>\/\/ Select lower framesize if the camera doesn't support PSRAM\nif(psramFound()){\n  config.frame_size = FRAMESIZE_UXGA; \/\/ FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA\n  config.jpeg_quality = 10; \/\/10-63 lower number means higher quality\n  config.fb_count = 2;\n} else {\n  config.frame_size = FRAMESIZE_SVGA;\n  config.jpeg_quality = 12;\n  config.fb_count = 1;\n}<\/code><\/pre>\n\n\n\n<p>The frame size can be set to one of these options:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><span class=\"rnthl rntliteral\">FRAMESIZE_UXGA<\/span> (1600 x 1200)<\/li><li><span class=\"rnthl rntliteral\">FRAMESIZE_QVGA<\/span> (320 x 240)<\/li><li><span class=\"rnthl rntliteral\">FRAMESIZE_CIF<\/span> (352 x 288)<\/li><li><span class=\"rnthl rntliteral\">FRAMESIZE_VGA<\/span> (640 x 480)<\/li><li><span class=\"rnthl rntliteral\">FRAMESIZE_SVGA<\/span> (800 x 600)<\/li><li><span class=\"rnthl rntliteral\">FRAMESIZE_XGA<\/span> (1024 x 768)<\/li><li><span class=\"rnthl rntliteral\">FRAMESIZE_SXGA<\/span> (1280 x 1024)<\/li><\/ul>\n\n\n\n<p>The image quality (<span class=\"rnthl rntliteral\">jpeg_quality<\/span>) can be a number between 0 and 63. A lower number means a higher quality. However, very low numbers for image quality, specially at higher resolution can make the ESP32-CAM to crash or it may not be able to take the photos properly.<\/p>\n\n\n\n<p>So, if you notice that the images taken with the ESP32-CAM are cut in half, or with strange colors, that\u2019s probably a sign that you need to lower the quality (select a higher number).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Initialize OV2640 camera<\/h3>\n\n\n\n<p>The following lines initialize the camera:<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>\/\/ Initialize the Camera\nesp_err_t err = esp_camera_init(&amp;config);\nif (err != ESP_OK) {\n  Serial.printf(\"Camera init failed with error 0x%x\", err);\n  return;\n}<\/code><\/pre>\n\n\n\n<p>After this, you can add the lines of code we&#8217;ve shown you previously to change the image settings.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">OV2640 settings: brightness, contrast, saturation, white balance, exposure, and more<\/h3>\n\n\n\n<p>The values set on the following lines are the default values, you can change them to change the image settings.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>sensor_t * s = esp_camera_sensor_get();\ns->set_brightness(s, 0);     \/\/ -2 to 2\ns->set_contrast(s, 0);       \/\/ -2 to 2\ns->set_saturation(s, 0);     \/\/ -2 to 2\ns->set_special_effect(s, 0); \/\/ 0 to 6 (0 - No Effect, 1 - Negative, 2 - Grayscale, 3 - Red Tint, 4 - Green Tint, 5 - Blue Tint, 6 - Sepia)\ns->set_whitebal(s, 1);       \/\/ 0 = disable , 1 = enable\ns->set_awb_gain(s, 1);       \/\/ 0 = disable , 1 = enable\ns->set_wb_mode(s, 0);        \/\/ 0 to 4 - if awb_gain enabled (0 - Auto, 1 - Sunny, 2 - Cloudy, 3 - Office, 4 - Home)\ns->set_exposure_ctrl(s, 1);  \/\/ 0 = disable , 1 = enable\ns->set_aec2(s, 0);           \/\/ 0 = disable , 1 = enable\ns->set_ae_level(s, 0);       \/\/ -2 to 2\ns->set_aec_value(s, 300);    \/\/ 0 to 1200\ns->set_gain_ctrl(s, 1);      \/\/ 0 = disable , 1 = enable\ns->set_agc_gain(s, 0);       \/\/ 0 to 30\ns->set_gainceiling(s, (gainceiling_t)0);  \/\/ 0 to 6\ns->set_bpc(s, 0);            \/\/ 0 = disable , 1 = enable\ns->set_wpc(s, 1);            \/\/ 0 = disable , 1 = enable\ns->set_raw_gma(s, 1);        \/\/ 0 = disable , 1 = enable\ns->set_lenc(s, 1);           \/\/ 0 = disable , 1 = enable\ns->set_hmirror(s, 0);        \/\/ 0 = disable , 1 = enable\ns->set_vflip(s, 0);          \/\/ 0 = disable , 1 = enable\ns->set_dcw(s, 1);            \/\/ 0 = disable , 1 = enable\ns->set_colorbar(s, 0);       \/\/ 0 = disable , 1 = enable<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Demonstration<\/h2>\n\n\n\n<p>Change the camera settings in the code to adjust the image. Then, <a href=\"https:\/\/randomnerdtutorials.com\/program-upload-code-esp32-cam\/\">upload the code to your ESP32-CAM<\/a>.<\/p>\n\n\n\n<p>Press the ESP32-CAM RST button, and it will start taking photos. Then, grab the microSD card to see the photos.<\/p>\n\n\n\n<p>Below you can see several images taken with different settings. <\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-3 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-grayscale.jpg?resize=1024%2C768&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"\" data-id=\"94754\" data-full-url=\"https:\/\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-grayscale.jpg\" data-link=\"https:\/\/randomnerdtutorials.com\/?attachment_id=94754#main\" class=\"wp-image-94754\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-grayscale.jpg?resize=1024%2C768&amp;quality=100&amp;strip=all&amp;ssl=1 1024w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-grayscale.jpg?resize=300%2C225&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-grayscale.jpg?resize=768%2C576&amp;quality=100&amp;strip=all&amp;ssl=1 768w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-grayscale.jpg?resize=1536%2C1152&amp;quality=100&amp;strip=all&amp;ssl=1 1536w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-grayscale.jpg?w=1600&amp;quality=100&amp;strip=all&amp;ssl=1 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"blocks-gallery-item__caption\"> ESP32-CAM Photo with Grayscale effect enabled<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-brightness2.jpg?resize=1024%2C768&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"\" data-id=\"94752\" data-full-url=\"https:\/\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-brightness2.jpg\" data-link=\"https:\/\/randomnerdtutorials.com\/?attachment_id=94752#main\" class=\"wp-image-94752\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-brightness2.jpg?resize=1024%2C768&amp;quality=100&amp;strip=all&amp;ssl=1 1024w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-brightness2.jpg?resize=300%2C225&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-brightness2.jpg?resize=768%2C576&amp;quality=100&amp;strip=all&amp;ssl=1 768w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-brightness2.jpg?resize=1536%2C1152&amp;quality=100&amp;strip=all&amp;ssl=1 1536w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-brightness2.jpg?w=1600&amp;quality=100&amp;strip=all&amp;ssl=1 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"blocks-gallery-item__caption\">ESP32-CAM Photo with Brightness set to 2<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-contrast-saturation.jpg?resize=1024%2C768&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"\" data-id=\"94753\" data-full-url=\"https:\/\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-contrast-saturation.jpg\" data-link=\"https:\/\/randomnerdtutorials.com\/?attachment_id=94753#main\" class=\"wp-image-94753\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-contrast-saturation.jpg?resize=1024%2C768&amp;quality=100&amp;strip=all&amp;ssl=1 1024w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-contrast-saturation.jpg?resize=300%2C225&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-contrast-saturation.jpg?resize=768%2C576&amp;quality=100&amp;strip=all&amp;ssl=1 768w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-contrast-saturation.jpg?resize=1536%2C1152&amp;quality=100&amp;strip=all&amp;ssl=1 1536w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-contrast-saturation.jpg?w=1600&amp;quality=100&amp;strip=all&amp;ssl=1 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"blocks-gallery-item__caption\">ESP32-CAM with Contrast set to 2 and Saturation to -2<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-settings.jpg?resize=1024%2C768&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"\" data-id=\"94755\" data-full-url=\"https:\/\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-settings.jpg\" data-link=\"https:\/\/randomnerdtutorials.com\/?attachment_id=94755#main\" class=\"wp-image-94755\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-settings.jpg?resize=1024%2C768&amp;quality=100&amp;strip=all&amp;ssl=1 1024w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-settings.jpg?resize=300%2C225&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-settings.jpg?resize=768%2C576&amp;quality=100&amp;strip=all&amp;ssl=1 768w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-settings.jpg?resize=1536%2C1152&amp;quality=100&amp;strip=all&amp;ssl=1 1536w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-camera-change-settings.jpg?w=1600&amp;quality=100&amp;strip=all&amp;ssl=1 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"blocks-gallery-item__caption\">ESP32-CAM Photo with Default Settings<\/figcaption><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p>In my opinion, in these conditions, the best settings for a better picture are: contrast set to 2 and saturation set to -2.<\/p>\n\n\n\t\t<div data-elementor-type=\"section\" data-elementor-id=\"94673\" class=\"elementor elementor-94673\" data-elementor-post-type=\"elementor_library\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2689e44b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2689e44b\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7490d123\" data-id=\"7490d123\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-35934f78 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"35934f78\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-3de108d9\" data-id=\"3de108d9\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5aca63ab elementor-widget elementor-widget-image\" data-id=\"5aca63ab\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/randomnerdtutorials.com\/esp32-cam-projects-ebook\/\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"334\" height=\"334\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-eBook-334.jpg?fit=334%2C334&amp;quality=100&amp;strip=all&amp;ssl=1\" class=\"attachment-full size-full wp-image-94555\" alt=\"\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-eBook-334.jpg?w=334&amp;quality=100&amp;strip=all&amp;ssl=1 334w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-eBook-334.jpg?resize=300%2C300&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-eBook-334.jpg?resize=150%2C150&amp;quality=100&amp;strip=all&amp;ssl=1 150w\" sizes=\"(max-width: 334px) 100vw, 334px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-4bd084e0\" data-id=\"4bd084e0\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-517cf0fa elementor-widget elementor-widget-heading\" data-id=\"517cf0fa\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/randomnerdtutorials.com\/esp32-cam-projects-ebook\/\">[eBook] Build ESP32-CAM Projects using Arduino IDE<\/a><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3438ea70 elementor-hidden-phone elementor-widget elementor-widget-text-editor\" data-id=\"3438ea70\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Learn how to program and build 17 projects with the ESP32-CAM using Arduino IDE\u00a0<strong><a href=\"https:\/\/randomnerdtutorials.com\/esp32-cam-projects-ebook\/\" rel=\"noopener\">DOWNLOAD \u00bb<\/a><\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-674524a5 elementor-hidden-desktop elementor-hidden-tablet elementor-widget elementor-widget-text-editor\" data-id=\"674524a5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Learn how to program and build 17 projects with the ESP32-CAM using Arduino IDE <strong><a href=\"https:\/\/randomnerdtutorials.com\/esp32-cam-projects-ebook\/\" rel=\"noopener\">DOWNLOAD \u00bb<\/a><\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\n\n\n\n<h2 class=\"wp-block-heading\">Wrapping Up<\/h2>\n\n\n\n<p>In this tutorial, you\u2019ve learned how to change the camera settings to adjust the image you get with the OV2640 camera. <\/p>\n\n\n\n<p>This can be useful because depending on where you place your camera you may need to change the settings to get a better image. <\/p>\n\n\n\n<p>You can use the functions we\u2019ve shown you here in any of your projects with the ESP32-CAM to adjust the settings. We have several projects with the ESP32-CAM that you may like:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a rel=\"noreferrer noopener\" href=\"https:\/\/randomnerdtutorials.com\/esp32-cam-video-streaming-face-recognition-arduino-ide\/\" target=\"_blank\">Video Streaming, Face Detection and Face Recognition<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/randomnerdtutorials.com\/esp32-cam-video-streaming-web-server-camera-home-assistant\/\" target=\"_blank\">ESP32 IP CAM \u2013 Video Streaming (Home Assistant and Node-RED)<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/randomnerdtutorials.com\/esp32-cam-take-photo-save-microsd-card\/\" target=\"_blank\">Take Photo and Save to MicroSD Card<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/randomnerdtutorials.com\/esp32-cam-pir-motion-detector-photo-capture\/\" target=\"_blank\">PIR Motion Detector with Photo Capture<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/randomnerdtutorials.com\/esp32-cam-take-photo-display-web-server\/\" target=\"_blank\">Take Photo, Save to SPIFFS and Display in Web Server<\/a><\/li><li><a href=\"https:\/\/randomnerdtutorials.com\/esp32-cam-projects-ebook\/\"><strong>Build ESP32-CAM Projects (eBook)<\/strong><\/a><\/li><li><a href=\"https:\/\/randomnerdtutorials.com\/projects-esp32-cam\/\"><strong>Read all our ESP32-CAM Projects, Tutorials and Guides<\/strong><\/a><\/li><\/ul>\n\n\n\n<p>Thanks for reading.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This guide shows how to change the ESP32-CAM OV2640 camera settings such as contrast, brightness, resolution, quality, saturation and more using Arduino IDE. The instructions in this tutorial work for &#8230; <\/p>\n<p class=\"read-more-container\"><a title=\"Change ESP32-CAM OV2640 Camera Settings: Brightness, Resolution, Quality, Contrast, and More\" class=\"read-more button\" href=\"https:\/\/randomnerdtutorials.com\/esp32-cam-ov2640-camera-settings\/#more-94745\" aria-label=\"Read more about Change ESP32-CAM OV2640 Camera Settings: Brightness, Resolution, Quality, Contrast, and More\">CONTINUE READING \u00bb<\/a><\/p>\n","protected":false},"author":5,"featured_media":94751,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[281,276,277,319,264],"tags":[],"class_list":["post-94745","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esp32-project","category-esp32","category-esp32-arduino-ide","category-esp32-cam","category-project"],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/03\/ESP32-CAM-Settings.jpg?fit=1280%2C720&quality=100&strip=all&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts\/94745","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/comments?post=94745"}],"version-history":[{"count":0,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts\/94745\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/media\/94751"}],"wp:attachment":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/media?parent=94745"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/categories?post=94745"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/tags?post=94745"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}