Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Нужна помощь Помогите с LIGHT_SLEEP и пробуждением по таймеру

Тема в разделе "ESP8266 Arduino IDE", создана пользователем Bobrius, 20 сен 2019.

  1. Bobrius

    Bobrius Новичок

    Сообщения:
    18
    Симпатии:
    0
    Делаю часы, понимаю что выбрал не самый лучший микроконтроллер, но хочу его заставить работать.
    Дело в том, что не могу заставить esp8266 выйти из сна на 150ms (или чуть больше или чуть меньше). Причем deep_sleep использовать нельзя.
    В режиме light_sleep пробуждение происходит только по внещним GPIO.

    Для засыпания использую следующую функцию:
    Код (C):
    1.  
    2. void driver_powerManager_GoSleep(uint16_t time) {
    3.             wifi_set_opmode_current(NULL_MODE);
    4.             wifi_fpm_set_sleep_type(LIGHT_SLEEP_T);
    5.             wifi_fpm_open();
    6.            
    7.             PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U,
    8.             gpio_pin_wakeup_enable(btns_pins[0], GPIO_PIN_INTR_HILEVEL);  
    9.             gpio_pin_wakeup_enable(btns_pins[1], GPIO_PIN_INTR_HILEVEL);  
    10.             gpio_pin_wakeup_enable(btns_pins[2], GPIO_PIN_INTR_HILEVEL);  
    11.  
    12.             wifi_fpm_set_wakeup_cb(wake_cb);
    13.            
    14.             wifi_fpm_do_sleep(time*1000);
    15.             delay (time+1);
    16.            
    17.             #ifdef debug
    18.               Serial.println("Going to sleep");
    19.               Serial.println(millis());
    20.             #endif
    21.  
    22.         }
    23.  
    Все работает отлично, потребление полностью устраивает с одним "но" - микроконтроллер не просыпается по истечению uint16_t time. А значит не проснется через 150ms и не проверить акселерометр или другой датчик. Просыпание происходит только по нажатиям на кнопки.

    Уже сижу и думаю встроить в плату attiny, которая будет по таймеру слать импульсы для пробуждения esp8266, но это костыль. Подскажите как заставить esp просыпаться самому.
     
  2. nikolz

    nikolz Гуру

    Сообщения:
    4.903
    Симпатии:
    453
    вместо кнопки ставите конденсатор
    перед сном его заряжаете так чтобы разрядился через 150 мс
    он разрядится и нажмет на пин
    и будет вам счастье
     
  3. Bobrius

    Bobrius Новичок

    Сообщения:
    18
    Симпатии:
    0
    Спасибо. Идея хорошая, попробую.
    Видимо никак не обойтись без внешнего RTC. Если по внутренним часам еще можно было +- погрешность определить время в сутках, то с конденсатором никак не отследить продолжительность сна
     
  4. nikolz

    nikolz Гуру

    Сообщения:
    4.903
    Симпатии:
    453
    я так делаю
     
  5. Bobrius

    Bobrius Новичок

    Сообщения:
    18
    Симпатии:
    0
    Используете внешний RTC?
     
  6. nikolz

    nikolz Гуру

    Сообщения:
    4.903
    Симпатии:
    453
    использую емкость.
     
  7. nikolz

    nikolz Гуру

    Сообщения:
    4.903
    Симпатии:
    453
    не понятно зачем спать 150 мс.
     
  8. Bobrius

    Bobrius Новичок

    Сообщения:
    18
    Симпатии:
    0
    Чтобы снизить энергопотребление. Примерно через 150 нужно проверять данные акселерометра для шагомера
     
  9. nikolz

    nikolz Гуру

    Сообщения:
    4.903
    Симпатии:
    453
    а вы отключите Wifi если не надо и потребление снизится в 5 раз
     
  10. nikolz

    nikolz Гуру

    Сообщения:
    4.903
    Симпатии:
    453
    для шагомера используют BLE
    и чип типа TLSR или NRF
     
  11. Bobrius

    Bobrius Новичок

    Сообщения:
    18
    Симпатии:
    0
    Уже все отключил, удалось добиться 15мА, а это только 33 часа работы максимум от 500мАh аккумулятора.
    С light_sleep можно добиться результата в 30 раз лучше
     
  12. nikolz

    nikolz Гуру

    Сообщения:
    4.903
    Симпатии:
    453
    А нельзя ли завести шагомер по прерыванию?
     
  13. Bobrius

    Bobrius Новичок

    Сообщения:
    18
    Симпатии:
    0
    Да, придется переходить на другой чип, но раз уж развел плату, вытравил все, то рушил попробовать добить до конца esp
     
  14. nikolz

    nikolz Гуру

    Сообщения:
    4.903
    Симпатии:
    453
    тогда либо прерывания либо дополнительный чип либо BLE чип
    либо сон глубокий
     
  15. Bobrius

    Bobrius Новичок

    Сообщения:
    18
    Симпатии:
    0
    Обидно что производители не довеля до нормальной работы легкий сон.
    С глубоким сном тоже все сложно, сохранять данные и восстанавливать по несколько раз секунду совсем не дело. Придется костылями обходиться наверное
     
  16. nikolz

    nikolz Гуру

    Сообщения:
    4.903
    Симпатии:
    453
    вы почитайте управление питанием в документации на SDK
     
  17. nikolz

    nikolz Гуру

    Сообщения:
    4.903
    Симпатии:
    453
  18. nikolz

    nikolz Гуру

    Сообщения:
    4.903
    Симпатии:
    453
    Bobrius,
    почитайте это 3.7 стр 69
     

    Вложения:

  19. Bobrius

    Bobrius Новичок

    Сообщения:
    18
    Симпатии:
    0
    Спасибо, посмотрел, но в документах явно указано что пробуждению происходит только по пину. По таймеру только для MODEN_SLEEP_T или DEEP_SLEEP. Хотя время и передается. Обидно, что SDK не допилили до идеала. Попробовал подключить керамический конденсатор + подобрать сопротивление, чтобы вышло 0.1-0.2. Пока это лучший вариант, не надо никаких внешних микроконтроллеров. Но время сна надо будет получать из RTC, ведь время сна зависит от слишком большого количества случайных велечин
     
  20. Bobrius

    Bobrius Новичок

    Сообщения:
    18
    Симпатии:
    0
    И точное потребление выяснить не получилось, все мои амперметры показывают около максимальную силу тока. Видимо слишком часто происходит смена сна и работы для измерения. Тут буду считать за сколько часов сядет аккумулятор
     

Поделиться этой страницей