@iisfaq: I followed your guide and was now able to select the DFRobot Firebeetle C6 board and run your code example.
Unfortunately, regardless of what I try, the board never wakes up (just as you describe). Even worse, I cannot use deep sleep either.
I tried the suggestion from @boarchuz and moved the esp_sleep_timer_wakeup. I also tried adding the delay after digitalWrite(LED_BUILTIN, HIGH). Nothing seems to work. Behaviour is the same on the smaller Beetle C6.
The same code runs without problems on a DFRobot Firebeetle ESP32-E.
I wonder if anyone has a functioning example using sleep modes on the Firebeetle C6 or on any other ESP32-C6 board. I could not find anything in the web. Espressif examples are generic and (for me) too time consuming to test.
For now, I give up and continue with the Firebeetle ESP32-E. The C6 variants are nice and affordable but useless for me without low power functions.
@lbernstone: the Firebeetle C6 is not on Jason2866's list. I will check back from time to time.
Thanks to both of you for your promt replies!
ESP32-C6 Low Power hanging device?
-
- Posts: 829
- Joined: Mon Jul 22, 2019 3:20 pm
Re: ESP32-C6 Low Power hanging device?
This is a snip from a deep sleep app on esp32-c6
Code: Select all
log_v("to sleep");
rtc_gpio_pullup_en(PIN_DN);
rtc_gpio_pulldown_dis(PIN_DN);
rtc_gpio_pullup_en(PIN_UP);
rtc_gpio_pulldown_dis(PIN_UP);
rtc_gpio_pullup_dis(PIN_IR);
rtc_gpio_pulldown_dis(PIN_IR);
uint64_t wakeup_pins = (1ULL<<PIN_IR) | (1ULL<<PIN_UP) | (1ULL<<PIN_DN);
esp_sleep_enable_ext1_wakeup(wakeup_pins, ESP_EXT1_WAKEUP_ANY_LOW);
uint64_t slp = TIME_SLEEP-micros();
esp_sleep_enable_timer_wakeup(slp);
Serial.printf("sleep: %llu\n", slp);
Serial.flush();
esp_sleep_enable_timer_wakeup(slp);
esp_deep_sleep_start();
Re: ESP32-C6 Low Power hanging device?
@lbernstone: that did the trick - thanks again for getting me on track. I can now use my DFRobot Beetle ESP32-C6 in low power mode.
[slightly off topic]
In case anyone is interested: here is my code for a motion detector sending alarms via ESP NOW.
I expect a runtime of several days with a 500mAh LiPo battery (power consumption Beetle + radar ~3.5 mA in deep sleep mode).
As the project is a children's toy to play detective, I guess this is sufficient
Environment: Arduino IDE 1.8.19 with the hints from @iisfaq to include board definitions.
[slightly off topic]
In case anyone is interested: here is my code for a motion detector sending alarms via ESP NOW.
I expect a runtime of several days with a 500mAh LiPo battery (power consumption Beetle + radar ~3.5 mA in deep sleep mode).
As the project is a children's toy to play detective, I guess this is sufficient
Environment: Arduino IDE 1.8.19 with the hints from @iisfaq to include board definitions.
Code: Select all
//
// Detect motion using doppler radar module RWCL-0516 and send alarm via ESP NOW.
// Tested with DFRobot Beetle ESP32-C6. The radar module can be run on 3.3V (connecting Beetle 3.3V to RWCL-0516 3.3V).
// RWCL-0516 output is connected to GPIO 6.
//
// WiFi interferes with RWCL-0516. If ESP32 is mounted near the radar module, reliable readings are only possible when WiFi is off.
// This is considered here: WiFi is only active while the RWCL-0516 alarm is HIGH anyway.
//
// After each alarm, the first sleep phase waits for the alarm signal to end.
// In the second sleep phase, the system is "armed" and waits for the next alarm.
//
#include "WiFi.h"
#include <esp_now.h>
uint8_t receiverAddress[] = {0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF};
esp_now_peer_info_t peerInfo;
bool blSendSuccessful;
unsigned long start = 0;
unsigned long diff = 0;
void GoToSleep(bool blAlarm) {
uint64_t wakeup_pins = (1ULL << GPIO_NUM_6); // several pins possible, e.g. "(1ULL<<GPIO_NUM_6) | (1ULL<<GPIO_NUM_13)"
if (blAlarm) { // Alarm on: sleep and wait for end of alarm pulse
esp_sleep_enable_ext1_wakeup(wakeup_pins, ESP_EXT1_WAKEUP_ANY_LOW);
}
else { // Alarm off: sleep and wait for next alarm
esp_sleep_enable_ext1_wakeup(wakeup_pins, ESP_EXT1_WAKEUP_ANY_HIGH);
}
esp_deep_sleep_start();
}
// Check send success (callback when ESP NOW data is sent)
void OnDataSent(const uint8_t *receiverAddress, esp_now_send_status_t status) {
blSendSuccessful = !status; // somewhat dubious conversion enum ==> bool, but works as expected.
}
void setup() {
// Alarm active?
bool blAlarm;
pinMode(GPIO_NUM_6, INPUT);
blAlarm = digitalRead(GPIO_NUM_6);
if (!blAlarm) {GoToSleep(blAlarm)}; // Alarm off: go to sleep and wait for new alarm
// Alarm active: flash onboard LED
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH); delay(10); digitalWrite(LED_BUILTIN, LOW);
// Prepare ESP NOW to send alarm
WiFi.mode(WIFI_STA);
esp_now_init();
esp_now_register_send_cb(OnDataSent);
memcpy(peerInfo.peer_addr, receiverAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
esp_now_add_peer(&peerInfo);
// Send alarm (as receiver sleeps up to 600ms, repeat for 600ms + extra 50ms, allowing for one missed packet)
start = millis();
diff = 0;
while ((diff <= 650) && (!blSendSuccessful)) { // stop sending if message could be delivered
char message[6];
sprintf( message, "%6u", diff ); // for tests: send ms until successful send
esp_now_send(receiverAddress, (uint8_t *) message, sizeof(message));
delay(50); // receiver is online for 70 ms so alarm should not be missed if sent every 50 ms
diff = millis() - start;
}
GoToSleep(blAlarm); // sleep and wait for end of alarm signal
}
void loop() {
}
-
- Posts: 1
- Joined: Wed Jun 05, 2024 10:19 am
Re: ESP32-C6 Low Power hanging device?
Hello. I have the same board and the deep sleep doesn't work, it would just disconnect the serial port but the current consumption remains as if it's active. How did u get it to work?
Re: ESP32-C6 Low Power hanging device?
@fakhrullahs: could you post yor code and some information about your environment? Perhaps we can then find what's wrong.
Who is online
Users browsing this forum: BerndN and 68 guests