Xiao esp32s3 sense camera sleep current

Hi there
I would say Yes , but already D11 & D12 are on there OPEN so that could be considered , or the mic GPIO’s two :v:
It just always seems half baked… anything LOW power would or should be able to turn OFF.
just makes sense to me NO pun intended… :face_with_peeking_eye:
GL :slight_smile: PJ
:v:

Well, as the design of the Camera Sense board currently stands, it is difficult to see a practical application for the board. The power requirements of the camera are very significant and it gets hot too. Maybe you could build it into the head of a mains power plug.

I can think of a way of powering the entire board on\off and waking up using a seperate RTC, the board then behaving like an ESP32S3 in deep sleep, though you loose the ability to save stuff in the ESP32S3 RTC RAM. Then there might be applications for such a small remote camera.

But so much easier if the design were modified.

Hi there,
Preaching to the Quire here, I agree in the present form it’s more of a Novelty device.
I don’t see the point of the SD card on there no advantage at all over an add on one.
and LOL add it to the round display and you have TWO (well one doesn’t work, when you do that)
It’s cool that such things exists as demo though. Also some folks are having better luck with the Heatsink on the back as well as other camera models .
HTH
GL :slight_smile: PJ

i think this was a good R&D project to see what they could do, and in that regard it is a success, we learned about the new fast SD channel … but the camera does not have a flash or IR backlight, it was more of a proof of concept, trying to find a market for the S3 Additional IO

I have also been bashing my head against this wall for a while. The ESP32Cam provided hardware support to cut power to the OV2640 during deep sleep which allows it to achieve the lower current drain it does. Seeedstudio did not provide any means in the Sense design to cut power nor to drive the POWERDWN pin so there are no hardware options open to us. However, the spec for the OV2640 does talk about putting it into a software standby mode by setting bit 4 of register 0x109 to 1. I and others have tried this: see OV2640 standby support · Issue #101 · espressif/esp32-camera · GitHub but it doesn’t work. Perhaps there is some clever bit twiddling that will make it work but I haven’t found it yet. My conclusion is that the OV2640 has a silicon bug that we can’t work around which makes the Xiao Sense useless for battery-powered applications as supplied.

The good news is that the OV3660 is plug-and-play compatible with the Sense connector, has a better sensor and the software standby command works. See OV2640 standby support · Issue #672 · espressif/esp32-camera · GitHub

Taking a picture every minute and putting the OV3660 camera into software standby mode between pics I’m getting a current draw of around 20mA.

Or you can put the camera into standby mode and then deep sleep the cpu for a current draw of less than 5mA which is the smallest I can measure.

Current draw in deep sleep is just less than 1mA

2 Likes

That sounds very promising, and worth a try TVM.

Sorry I’m late. Need some clarification here. The wiki shows the difference in low power consumption values for different peripherals. The intention is to illustrate how much the actual impact on low power consumption can vary when connecting different peripherals, so that users can decide whether to connect hardware based on the extent of this impact.

This means that when we measure low power consumption, it is tested in a scenario where the camera or SD card functionality is not initialized in the code, but the hardware expansion board module is connected. The power reference provided does not accurately reflect the power consumption when actually using features like the camera and SD card

That Github issue suggests that you can execute;

sensor->set_reg(sensor, 0x3008, 0x40, enable ? 0x40 : 0x00);

How do you actually achieve that in the Arduino IDE examples for the XIAO ESP32S3 sense board provided by SEEED such as ‘take_photos.ino’, there is a compile error;

’sensor’ was not declared in this scope

And set_reg( is not recognized too.

Sorry - I left out obtaining the sensor pointer. Once you have that it should resolve sensor->set_reg(…) ok :
sensor_t* sensor = esp_camera_sensor_get();

NB the enable parameter enables camera standby mode so set it to false to start the camera up again

TVM.

So to enable standby you should use;

sensor_t* sensor = esp_camera_sensor_get();
sensor->set_reg(sensor, 0x3008, 0x40, true ? 0x40 : 0x00);

And to disable it;

sensor_t* sensor = esp_camera_sensor_get();
sensor->set_reg(sensor, 0x3008, 0x40, false ? 0x40 : 0x00);

Yes. This worked for me using a Xiao ESP32S3 Sense with OV3660 camera fitted. The registers on the OV5640 appear to be the same so I expect it will work on that too. I understand that OV5640 runs so hot that it needs a heatsink. Putting it into software standby using this trick when not required might make it useable for still photos. I’d be interested to know if it works. I have avoided the OV5640 so far because of the overheating issue.

The;

sensor_t* sensor = esp_camera_sensor_get();
sensor->set_reg(sensor, 0x3008, 0x40, true ? 0x40 : 0x00);

Does enable standby on an OV3660, the current consumption of the board drops from about 135mA to 50mA when the standby command is issued.

However, if you then attempt to cancel standby mode the camera appears to stop working, all I get is images which are a pink screen.

And re-initialising the camera results in an error; 'Camera probe failed with error 0x103.

It would be really good if you could just light sleep the ESP32S3 so that the sketch can just pause rather than do complete restart as with deep sleep, with an OV3660 fitted the current used then drops to 4.7mA in light sleep.

Using the register shutdown option I just compared the deep sleep battery current on the 3 cameras, sketch takes a picture and goes into deep sleep;

No register shutdown OV2640 22.3mA
No register shutdown OV3360 37.8mA
No register shutdown OV5640 104mA

With register shutdown OV2640 22.3mA
With register shutdown OV3360 1.45mA
With register shutdown OV5640 1.4mA

That wasn’t my experience. I agree that you cannot reinitialise. Unfortunately I don’t seem to have saved the sketch in which I experimented. I think you may need to take 2 or 3 pics after coming out of standby to re-establish the white balance but the camera did work. You do need to reinitialise the camera after a deep sleep.
I will be returning to this topic later this month when i have got my Image library working.

Great to see that the standby trick works on OV5640 too

OK thanks for the tip, I will try taking several pics.

I re-tried the light sleep modification I had added to the ‘take_photos.ino’ example with an OV3660 camera.

I set it to take 4 pictures at every wake;

#define uS_TO_S_FACTOR 1000000ULL                 //Conversion factor for micro seconds to seconds

void loop()
{
  uint8_t index;
  sensor_t* sensor = esp_camera_sensor_get();

  if (camera_sign && sd_sign)
  {
    char filename[32];
    for (index = 1; index <= pictures; index++)
    {
      sprintf(filename, "/image%d.jpg", imageCount);
      photo_save(filename);
      Serial.printf("Saved picture: %s\r\n", filename);
      imageCount++;
      delay(500);
    }
  }

  sensor->set_reg(sensor, 0x3008, 0xFF, 0x42);   //camera to standby
  delay(1000);
  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
  esp_light_sleep_start();
  Serial.println();
  Serial.println();
  Serial.println(F("Awake !"));
  sensor->set_reg(sensor, 0x3008, 0xFF, 0x02);   //camera to ready
  delay(2000);
}

I let it run a while, it took over 100 pictures, all were fine.

Light sleep current was 4mA.

2 Likes

Man “light SLEEP” = dead battery. IMO. way too high seeed.
my .02
GL :slight_smile: PJ :v:

Is that some form of code saying you think the light sleep current is too high ?