• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Deepsleep

kissste

Member
Hi there,

I'm playing with deepsleep, using the lastest version of @pvvx SDK 3.5.2 from github

1/ this work well - by timer
deepsleep_ex(DSLEEP_WAKEUP_BY_TIMER, sleep_ms);

with the exception of the LED shining....

2/ but this one DSLEEP_WAKEUP_BY_GPIO | DSLEEP_WAKEUP_BY_TIMER appears to hanging forever
deepsleep_ex(DSLEEP_WAKEUP_BY_GPIO | DSLEEP_WAKEUP_BY_TIMER, sleep_ms);

Any suggestions?

Thank you

void fATDS(int argc, char *argv[]) // Deep sleep
{
printf("DS0\n");
uint32 sleep_ms = 10000;
if(argc > 1) sleep_ms = atoi(argv[1]);
#if 1
printf("DS1: %d\n", sleep_ms);
// turn off log uart
sys_log_uart_off();
// initialize wakeup pin at PB_1
gpio_t gpio_wake;
gpio_init(&gpio_wake, PB_1);
gpio_dir(&gpio_wake, PIN_INPUT);
gpio_mode(&gpio_wake, PullDown);

// enter deep sleep
deepsleep_ex(DSLEEP_WAKEUP_BY_GPIO | DSLEEP_WAKEUP_BY_TIMER, sleep_ms);
#else
printf("DS2: %d\n", sleep_ms);
deepsleep_ex(DSLEEP_WAKEUP_BY_TIMER, sleep_ms);
#endif
}

Pin чипа PB_0 включен к светодиоду, а при входе в режим deep_sleep отключается внутреннее питание на I/O и на выводе получается около 1В - через внутренний диод чипа, в отключенное питание, не в полную силу загорается заботливо включенный китайцами светодиод и жрет к 0.5 mA...
Чтобы его отключить требуется отломать крышку модуля...
 

kissste

Member
// deep sleep can only be waked up by GPIOB_1 and GTimer
#define GPIO_WAKE_PIN PB_1

I have tried PB_0 too, does not work.

//does not work - even the timer portion of this does not work, does not wake up after sleep_ms
deepsleep_ex(DSLEEP_WAKEUP_BY_GPIO | DSLEEP_WAKEUP_BY_TIMER, sleep_ms);

//works
deepsleep_ex(DSLEEP_WAKEUP_BY_TIMER, sleep_ms);

//does not work
deepsleep_ex(DSLEEP_WAKEUP_BY_GPIO, sleep_ms);
 

pvvx

Активный участник сообщества
All Work. PB_1 set low, before launching Deep-Sleep!
Код:
/*
*  16 bytes FIFO ... 16*11/38400 = 0.004583 sec
*  (0.005/5)*166666666 = 166666.666 Tcpu
*/
LOCAL void loguart_wait_tx_fifo_empty(void) {
    if (HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & BIT_SOC_LOG_UART_EN) {
        int x = 16384;
        while ((!(HAL_UART_READ32(UART_LINE_STATUS_REG_OFF) & LSR_TEMT)) && x--);
    };
}

void fATDS(int argc, char *argv[])     // Deep sleep
{
    uint32 sleep_ms = 10000;
    if(argc > 1) sleep_ms = atoi(argv[1]);
    if(argc > 2) {
            printf("%u ms waiting low level on PB_1 before launching Deep-Sleep...\n", sleep_ms);
            // turn off log uart
            HalDeinitLogUart(); // sys_log_uart_off();
           // initialize wakeup pin

           gpio_t gpio_wake;
           gpio_init(&gpio_wake, PB_1);
           gpio_dir(&gpio_wake, PIN_INPUT); //
           gpio_mode(&gpio_wake, PullDown); // PullUp/PullDown
           TickType_t sttime = xTaskGetTickCount();

           do {
              if(gpio_read(&gpio_wake) == 0) {
                   // Enter deep sleep... Wait give rising edge at PB_1 to wakeup system.
                   deepsleep_ex(DSLEEP_WAKEUP_BY_GPIO, 0);
              };
              vTaskDelay(1);
           } while(xTaskGetTickCount() - sttime < sleep_ms);
           HalInitLogUart(); // sys_log_uart_on();
            printf("No set pin low in deep sleep!\n");
    }
    else {
        printf("Deep-Sleep %u ms\n", sleep_ms);
        loguart_wait_tx_fifo_empty();
       deepsleep_ex(DSLEEP_WAKEUP_BY_TIMER, sleep_ms);
    }
}
 
Последнее редактирование:

pvvx

Активный участник сообщества
Сверху Снизу