Последние новости о Spotify в мае этого года могут порадовать многих пользователей Spotify Android тем, что функции Sleep Timer наконец-то появились в Spotify Apps. Другими словами, любители Spotify Android могут установить таймер сна так же просто, как пользователи iPhone в настоящее время на своем мобильном телефоне, что делает его более приятным, даже когда он засыпает. Теперь давайте посмотрим, как сделать это на ваших устройствах Android. Имейте в виду, что вынимайте свои устройства Android, чтобы следовать полным учебникам ниже.

Вы можете любить:

Лучший загрузчик плейлистов Spotify: загрузите плейлисты Spotify в MP3 бесплатно

Spotify Ripper — как копировать музыку из Spotify как MP3 (320 Kbps)

Содержание

  • 1 Режим глубокого сна: пробуждение при помощи таймера 1.1 Справочная информация 1.1.1 Режим глубокого сна в ESP32
  • 1.1.2 Почему именно режим глубокого сна?
  • 1.1.3 Контакты RTC_GPIO
  • 1.1.4 Способы пробуждения ESP32 из режима глубокого сна
  • 1.1.5 Написание скетча, использующего режим глубокого сна
  • 1.2 Как работает этот код
      1.2.1 Задаем время сна
  • 1.2.2 Сохраняем данные в RTC-память
  • 1.2.3 Сообщаем причину пробуждения
  • 1.2.4 setup()
  • 1.2.5 loop()
  • 1.2.6 Проверка проекта-примера
  • 1.3 Необходимое оборудование
  • 1.4 Схема
  • 1.5 Код
  • 2 См.также
  • 3 Внешние ссылки
  • Плату ESP32 можно переключить в режим глубокого сна, а затем разбудить через определенное время. Эта функция особенно полезна, если ваш проект завязан на времени (например, выполняет ежедневные задачи) и требует низкого энергопотребления.

    RTC-контроллер оснащен таймером, который позволяет будить ESP32 через определенное время. В этом примере мы рассмотрим как сделать это при помощи IDE Arduino.

    Пробуждение платы ESP32 при помощи заранее заданного времени делается очень просто. В IDE Arduino вам нужно лишь задать время сна (в микросекундах) при помощи следующей функции:

    esp_sleep_enable_timer_wakeup(time_in_us);


    Справочная информация

    Режим глубокого сна в ESP32

    В этом примере мы изучим, что такое режим глубокого сна, как переключить ESP32 в режим глубокого сна, а также рассмотрим разные способы пробуждения ESP32 из этого режима.

    ESP32 может работать в следующих режимах:

    • Активный режим;
    • Модемный режим сна;
    • Режим легкого сна;
    • Режим глубокого сна;
    • Режим гибернации;

    В ниже представлена таблица из технической документации ESP32 со сравнением всех этих пяти режимов:

    В технической документации ESP32 также есть таблица энергопотребления в разных режимах.

    А вот и сама таблица 10 с подробностями об энергопотреблении в активном режиме.

    Почему именно режим глубокого сна?

    Постоянная работа ESP32 в активном режиме – это неидеальный вариант, т.к. при его использовании заряд в батареях кончается очень быстро.

    Если перевести ESP32 в режим глубокого сна, это сократит энергопотребление, благодаря чему батарей хватит на более долгий срок.

    Если переключить ESP32 в режим глубокого сна, то это значит, что у нее будут отключены самые энергоемкие активности, но продолжат работать активности, необходимые для пробуждения процессора, если произойдет что-то интересное.

    В режиме глубокого сна не работает ни процессор, ни WiFi, но по-прежнему может работать сопроцессор ULP (англ. «ultra low power», т.е. «процессор с ультранизким потреблением»). Когда ESP32 находится в режиме глубокого сна, также остается включенной RTC-память. То есть мы можем написать программу для сопроцессора ULP и сохранить ее в RTC-память, чтобы получить доступ к периферийным устройствам, а также ко внутренним таймерам и датчикам.

    Этот режим работы предназначен для случаев, когда вам нужно пробудить главный CPU при помощи внешнего события или таймера (или обоих сразу), а также продолжать работать в режиме низкого энергопотребления.

    Контакты RTC_GPIO

    Во время режима глубокого сна сопроцессор ULP может использовать некоторые контакты ESP32, а именно – контакты RTC_GPIO и сенсорные контакты. Найти контакты RTC_GPIO можно, например, в технической документации ESP32 (на странице 7).

    В дальнейшем, работая с контактами RTC_GPIO, вы можете использовать либо эту таблицу, либо распиновку ниже. Контакты RTC_GPIO помечены на ней оранжевым цветом.

    Способы пробуждения ESP32 из режима глубокого сна

    После того, как ESP32 переведена в режим глубокого сна, есть несколько способов ее пробудить:

    • При помощи таймера. Он разбудит ESP32 через определенное количество времени;
    • При помощи внешнего пробуждения. Здесь есть две возможности: пробуждение либо при помощи одного внешнего инициатора, либо при помощи нескольких внешних инициаторов;
    • При помощи сенсорных контактов;
    • При помощи сопроцессора ULP;

    Написание скетча, использующего режим глубокого сна

    Чтобы написать скетч, переключающий ESP32 в режим глубокого сна, а затем пробуждающего его от него, вам нужно помнить следующее:

  • Во-первых, нужно настроить инициаторы пробуждения (т.е. то, что будет будить ESP32). Инициатор пробуждения может быть один или несколько
  • Вы можете задать, какую периферию выключить или держать включенной во время режима глубокого сна. Впрочем, по умолчанию ESP32 автоматически выключает периферийные устройства, которые не нужны заданному вами инициатору пробуждения
  • Наконец, вам понадобится функция esp_deep_sleep_start(), чтобы перевести ESP32 в режим глубокого сна;
  • Приложение Go Power Master

    «Умное» включение и выключение беспроводных интерфейсов

    Как я уже писал раньше, самая главная проблема энергоэффективности устройства — пользователь, забывающий выключать Wi-Fi, Bluetooth, передачу данных по сотовой сети. Все понятно — мы, люди, не можем похвастаться порядком, свойственным машинам. Однако решить эту проблему можно. Например, установите программу Go Power Master.

    Это замечательное приложение умеет выключать беспроводные интерфейсы по таймеру после выключения экрана. Установите, например, минуту и ваш телефон, когда вы им не будете пользоваться, сам выключит Wi-Fi. Экономия вам будет заметна сразу.

    Приложение Go Power Master обладает также рядом других полезных качеств. Например, платная версия умеет не только выключать беспроводные соединения по таймеру, но и включать их время от времени для проверки почты и синхронизации. По умолчанию она делает это с интервалом 30 минут.

    Управление режимами работы

    В программе Go Power Master реализован ряд механизмов для экономии энергии за счет более эффективного ее использования. Например, можно задать график включения и выключения режима повышенной экономичности на ночь. Если ваш телефон не позволяет настроить включение и отключение по расписанию, эта возможность будет очень кстати.

    Удаляем лишних потребителей энергии

    Go Power Master позволяет анализировать рейтинг самых сильных потребителей энергии и при необходимости отключать висящие в фоне приложения для экономии батарейки. Вот такие настройки для меня носят двусмысленный характер. Дело в том, что правильнее будет настроить приложение на правильный режим работы, если оно действительно вам нужно. У всех клиентов социальных сетей, к примеру, есть настройка периодичности синхронизации. Может лучше разобраться с настройками отдельных программ, чем каждый раз массово «убивать» фоновые приложения?

    Возможности версии Power Go PRO можно получить и отличным от перечисления денег способом. Можно просто скачать и начать использовать несколько программ их партнеров. Мне для этого потребовалось скачать пять приложений. Одно из них, кстати, прижилось у меня на планшете.

    Есть важное замечание. При использовании подобных программ, способных отключать Wi-Fi в режиме простоя по таймеру, не стоит забывать об автоматическом обновлении приложений. Программы начинают автоматически обновляться, а потом выключается соединение и установка новых версий программ заканчивается ошибкой. В этой ситуации я советую отключить автоматическое обновление и обновлять программы раз в неделю вручную.

    Как работает этот код

    Теперь давайте разберемся, как устроен этот код.

    В первом комментарии описывается, какие компоненты выключаются во время режима глубокого сна с пробуждением по таймеру.

    1 /* 2 В этом режиме выключены процессоры, большая часть RAM 3 и вся цифровая периферия, получающая тактовый сигнал через APB_CLK. 4 Единственные компоненты чипа, что по-прежнему могут работать – 5 это RTC-контроллер, RTC-периферия и RTC-память. 6 7 Этот скетч-пример демонстрирует основы 8 работы с режимом глубокого сна при помощи таймера, 9 а также показывает, как сохранять данные в RTC-память, 10 чтобы заново использовать их между загрузками. 11 */

    То есть, если использовать пробуждение по таймеру, то включенными останутся RTC-контроллер, RTC-периферия и RTC-память.

    Задаем время сна

    В первых двух строчках задается время, в течение которого будет спать ESP32.

    1 #define uS_TO_S_FACTOR 1000000 /* коэффициент пересчета 2 микросекунд в секунды */ 3 #define TIME_TO_SLEEP 5 /* время, в течение которого 4 будет спать ESP32 (в секундах) */

    В этом скетче-примере используется коэффициент пересчета из микросекунд в секунды, чтобы время сна в переменной «TIME_TO_SLEEP»

    можно было задать в секундах. В данном случае мы переводим ESP32 в режим сна на 5 секунд.

    Сохраняем данные в RTC-память

    При работе с платой ESP32 данные можно сохранять в RTC-память. ESP32 (точнее, ее RTC-модуль) оснащена 8 Кб памяти SRAM, которую называют «быстрой RTC-памятью»

    . Хранящиеся в ней данные не стираются во время глубокого сна, но стираются при нажатии на кнопку сброса (это кнопка на ESP32 под названием
    «EN»
    ).

    Чтобы сохранить данные на RTC-память, перед объявлением переменной нужно добавить конструкцию «RTC_DATA_ATTR»

    . В результате код сохранит переменную
    «bootCount»
    в RTC-память. Эта переменная будет считать, сколько раз ESP32 пробуждалась от глубокого сна.

    RTC_DATA_ATTR int bootCount = 0;

    Сообщаем причину пробуждения

    Далее пишем в коде функцию print_wakeup_reason(), которая будет печатать в мониторе порта причину вывода ESP32 из режима глубокого сна.

    1 void print_wakeup_reason(){ 2 esp_sleep_wakeup_cause_t wakeup_reason; 3 4 wakeup_reason = esp_sleep_get_wakeup_cause(); 5 6 switch(wakeup_reason) 7 { 8 case 1 : Serial.println(«Wakeup caused by external signal using RTC_IO»); break; 9 // «Пробуждение от внешнего сигнала с помощью RTC_IO» 10 case 2 : Serial.println(«Wakeup caused by external signal using RTC_CNTL»); break; 11 // «Пробуждение от внешнего сигнала с помощью RTC_CNTL» 12 case 3 : Serial.println(«Wakeup caused by timer»); break; 13 // «Пробуждение от таймера» 14 case 4 : Serial.println(«Wakeup caused by touchpad»); break; 15 // «Пробуждение от сенсорного контакта» 16 case 5 : Serial.println(«Wakeup caused by ULP program»); break; 17 // «Пробуждение от ULP-программы» 18 default : Serial.println(«Wakeup was not caused by deep sleep»); break; 19 // «Пробуждение не связано с режимом глубокого сна» 20 21 } 22 }

    setup()

    Блок setup() – это то, где будет находиться весь код нашей программы, потому что ESP32 сразу после запуска будет переведена в режим глубокого сна и никогда не доберется до блока loop().

    Начинаем код с инициализации последовательной коммуникации на скорости 115200 бод.

    Serial.begin(115200);

    Затем делаем так, чтобы переменная «bootCount»

    увеличивалась на единицу с каждой загрузкой. Также печатаем это значение в мониторе порта.

    1 ++bootCount; 2 Serial.println(«Boot number: » + String(bootCount)); 3 // «Количество загрузок: «

    После этого код вызывает функцию print_wakeup_reason(), но вы можете вписать здесь любую функцию, выполняющую необходимую для вас задачу – например, считывающую данные с датчика. То есть вы можете, например, настроить ESP32, чтобы она раз в день «просыпалась»

    и считывала данные с какого-либо датчика.

    Далее задаем инициатора пробуждения при помощи следующей функции:

    esp_sleep_enable_timer_wakeup(time_in_us);

    Параметром для этой функции служит время в микросекундах.

    Затем, после выполнения всех необходимых задач переводим ESP32 в режим глубокого сна при помощи следующей функции:

    esp_deep_sleep_start();

    loop()

    Блок loop() оставляем пустым, потому что ESP32 перейдет в режим сна до того, как доберется до этой части скетча. Поэтому нам и нужно было поместить весь скетч в setup().

    Загружаем скетч на ESP32. Убедитесь, что в IDE Arduino выбраны правильная плата и COM-порт.

    Проверка проекта-примера

    Открываем монитор порта на скорости 115200 бод

    .

    В результате ESP32 будет просыпаться каждые 5 секунд, печатать сообщение в мониторе порта, а затем снова переключаться в режим глубокого сна.

    При каждом пробуждении ESP32 значение в счетчике загрузок «bootCount»

    будет увеличиваться на
    «1»
    . Кроме того, код будет сообщать в мониторе порта причину пробуждения (см. ниже).

    Однако имейте в виду, что если нажать на кнопку EN

    на ESP32, это сбросит счетчик загрузок к
    «1»
    .

    Итак, в этом примере мы продемонстрировали, как использовать таймер для вывода ESP32 из режима глубокого сна.

    • Чтобы включить режим пробуждения по таймеру, используйте функцию esp_sleep_enable_timer_wakeup(time_in_us)
    • Чтобы запустить режим глубокого сна, используйте функцию esp_deep_sleep_start()

    Вы можете изменить скетч-пример и, к примеру, вместо печати сообщения в мониторе порта поставить какую-то другую задачу. Функция пробуждения по таймеру предназначена для выполнения при помощи ESP32 периодических (например, ежедневных) задач, не тратя при этом большое количество электроэнергии.

    Полное руководство: как установить таймер сна на устройствах Android перед сном

    Чтобы установить таймер отключения на устройствах Android, убедитесь, что на ваших устройствах Android установлено последнее приложение Spotify. В настоящее время последней версией в Google Play является 8.5.18.894, когда этот пост был обновлен. Помимо этого, пожалуйста, убедитесь, что у вас есть логин и пароль в вашей учетной записи Spotify. Если у вас есть все эти важные шаги готовы, вы можете пойти и установить таймер на Android, следуя инструкциям ниже.

    Шаг 5 для установки таймера сна на устройствах Android

    Шаг 1. На главном интерфейсе Spotify нажмите «Ваша библиотека» и тогда вы можете увидеть свою музыкальную библиотеку Spotify.

    Шаг 2. Подберите плейлисты Spotify Music, которые вы хотите наслаждаться, когда спите.

    Шаг 3. Кран «Воспроизведение в случайном порядке» в главном интерфейсе плейлиста Spotify, а затем вы можете увидеть панель воспроизведения музыки, которая появилась в нижней части приложения Spotify.

    Шаг 4. Нажмите Музыка играет бар и тогда вы можете увидеть основной интерфейс статуса воспроизведения музыки. Как вы можете видеть, есть три точки Кнопка доступна для нескольких вариантов, таких как добавить лайк, добавить в плейлисты и таймер сна.

    Шаг 5. Удар Таймер сна тогда всплывающее окно будет выскакивать из нижней части экрана. Теперь вы можете выбрать Остановить звук в минутах 5, минутах 10, минутах 15, минутах 30, минутах 45, часах 1, конце дорожки и отключить таймер отключения. Просто выберите таймер сна, чтобы закончить свою музыку перед сном.

    Однако в настоящее время встроенный таймер Spotify позволяет пользователям устанавливать таймеры отключения на самый высокий час 1 без других функций «сделай сам». Чтобы продлить таймер сна и многое другое, вы также можете попробовать некоторые спящие таймеры для пользователей Android ниже. Здесь мы рекомендуем виды таймеров сна 2, чтобы дольше наслаждаться музыкой Spotify во время сна. Давайте посмотрим, что они.

    Код

    1 /* 2 Режим глубокого сна и пробуждение по таймеру 3 ===================================== 4 ESP32 может работать в режиме глубокого сна, 5 позволяющего более экономно расходовать энергопотребление, 6 что важно при разработке IoT-проектов. 7 8 В этом режиме выключены процессоры, большая часть RAM 9 и вся цифровая периферия, получающая тактовый сигнал через APB_CLK. 10 Единственные компоненты чипа, что по-прежнему могут работать – 11 это RTC-контроллер, RTC-периферия и RTC-память. 12 13 Этот скетч-пример демонстрирует основы 14 работы с режимом глубокого сна при помощи таймера, 15 а также показывает, как сохранять данные в RTC-память, 16 чтобы заново использовать их между загрузками. 17 18 Этот код распространяется по лицензии всеобщего достояния. 19 Автор: Пранав Черукупалли 20 */ 21 22 #define uS_TO_S_FACTOR 1000000 /* коэффициент пересчета 23 микросекунд в секунды */ 24 #define TIME_TO_SLEEP 5 /* время, в течение которого 25 будет спать ESP32 (в секундах) */ 26 27 RTC_DATA_ATTR int bootCount = 0; 28 29 /* 30 Метод для печати в мониторе порта причины пробуждения ESP32 31 */ 32 void print_wakeup_reason(){ 33 esp_sleep_wakeup_cause_t wakeup_reason; 34 35 wakeup_reason = esp_sleep_get_wakeup_cause(); 36 37 switch(wakeup_reason) 38 { 39 case 1 : Serial.println(«Wakeup caused by external signal using RTC_IO»); break; 40 // «Пробуждение от внешнего сигнала с помощью RTC_IO» 41 case 2 : Serial.println(«Wakeup caused by external signal using RTC_CNTL»); break; 42 // «Пробуждение от внешнего сигнала с помощью RTC_CNTL» 43 case 3 : Serial.println(«Wakeup caused by timer»); break; 44 // «Пробуждение от таймера» 45 case 4 : Serial.println(«Wakeup caused by touchpad»); break; 46 // «Пробуждение от сенсорного контакта» 47 case 5 : Serial.println(«Wakeup caused by ULP program»); break; 48 // «Пробуждение от ULP-программы» 49 default : Serial.println(«Wakeup was not caused by deep sleep»); break; 50 // «Пробуждение не связано с режимом глубокого сна» 51 52 } 53 } 54 55 void setup(){ 56 Serial.begin(115200); 57 delay(1000); // даем время на установление 58 // последовательной коммуникации 59 60 // увеличиваем значение в счетчике загрузок 61 // и печатаем это значение с каждой загрузкой: 62 ++bootCount; 63 Serial.println(«Boot number: » + String(bootCount)); 64 // «Количество загрузок: » 65 66 // печатаем причину пробуждения ESP32: 67 print_wakeup_reason(); 68 69 /* 70 Сначала настраиваем инициатор пробуждения. 71 Задаем, чтобы ESP32 просыпалась каждые 5 секунд. 72 */ 73 esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); 74 Serial.println(«Setup ESP32 to sleep for every » + String(TIME_TO_SLEEP) + 75 » Seconds»); 76 // «ESP32 будет просыпаться каждые … секунд» 77 78 /* 79 Теперь нам нужно решить, будет ли периферия включена или нет. 80 По умолчанию ESP32 автоматически выключит всю периферию, 81 которая не нужна инициатору пробуждения, 82 но если вы опытный пользователь, то решать вам. 83 84 Подробнее об этом читайте в документации об API: 85 https://esp-idf.readthedocs.io/en/latest/api- reference/system/deep_sleep.html 86 87 Оставьте знаки комментария у двух строчек ниже. 88 В первой из них показывается, как переключить всю RTC-периферию 89 в режим глубокого сна, 90 а во второй — сообщается о переключении в монитор порта. 91 */ 92 //esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF); 93 //Serial.println(«Configured all RTC Peripherals to be powered down in sleep»); 94 // «Перевод всей RTC-периферии в режим сна» 95 96 /* 97 Теперь, когда мы задали инициатора пробуждения, а также, 98 если необходимо, задали, останется ли в режиме сна RTC-периферия, 99 мы можем начать, собственно, перевод платы в режим сна. 100 101 Если активировать режим сна, не задав инициаторов пробуждения, 102 ESP32 будет пребывать в нем вечно, пока пользователь 103 не выполнит аппаратный сброс. 104 */ 105 Serial.println(«Going to sleep now»); 106 // «Переход в режим сна» 107 delay(1000); 108 esp_deep_sleep_start(); 109 Serial.println(«This will never be printed»); 110 // «Этого напечатано не будет» 111 } 112 113 void loop(){ 114 // Этот блок кода вызван не будет 115 }