• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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

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