Контроль мощности микроконтроллера ESP8266 с помощью microPython.

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

Чтобы использовать функцию глубокого сна, нам необходимо подключить выход GPIO16 к контакту сброса RST на нашей плате.

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

Программный код:

import machine
from time import sleep as delay
led5 = machine.Pin(5, machine.Pin.OUT)
led5.on()
led4 = machine.Pin(4, machine.Pin.OUT)
led4.off()
machine.freq(80000000)

print(machine.freq())
print(machine.unique_id())

if machine.reset_cause() == machine.DEEPSLEEP_RESET:
print('sleep')
led4.on()

delay(1)

machine.freq(160000000)
print('F=%dm' % (machine.freq()))

# rtc
rtc = machine.RTC()
rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)

# set RTC.ALARM0 to fire after 5 seconds
rtc.alarm(rtc.ALARM0, 5000)
# sleep
machine.deepsleep()

Настраиваем микроконтроллер на одну из рабочих частот (80МГц или 160МГц):

machine.freq(80000000) 

Проверяем по какому условию у нас запустился микроконтроллер (загрузка через подачу питания или после пробуждения):

if machine.reset_cause() == machine.DEEPSLEEP_RESET:

Настраиваем систему тактирования для отправки микроконтроллеру в сон:

rtc = machine.RTC()
rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)

Отправляем микроконтроллер в сон:

rtc.alarm(rtc.ALARM0, 5000)