• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Micropython, как измерить напряжение питания ESP8266?

fps

Active member
Можно как-то средствами MicroPython измерить текущее напряжение питания ESP8266?

Я так понимаю, можно подтянуть вход ADC к Vcc и измерить его [inline]machine.ADC(0).read()[/inline]

А без внешнего соединения как-то можно?
 

fps

Active member
Сам спросил - сам отвечу.

Получить значение напряжения питания без внешней коммутации пина ADC, например на плате ESP-01 (на которой ADC вообще не выведен наружу) поможет код ниже.

[inline]set_adc_mode(ADC_MODE_VCC)[/inline] - выполнить и перезагрузить ESP. После этого [inline]machine.ADC(0).read()[/inline] будет возвращать напряжение питания.

Чтоб вернуть прежнее поведение, выполнить [inline]set_adc_mode(ADC_MODE_ADC)[/inline] - и перезагрузить.

Python:
import esp
import machine
from flashbdev import bdev

ADC_MODE_VCC = 255
ADC_MODE_ADC = 0


def set_adc_mode(mode):
    sector_size = bdev.SEC_SIZE
    flash_size = esp.flash_size()  # device dependent
    init_sector = int(flash_size / sector_size - 4)
    data = bytearray(esp.flash_read(init_sector * sector_size, sector_size))
    if data[107] == mode:
        return  # flash is already correct; nothing to do
    else:
        data[107] = mode  # re-write flash
        esp.flash_erase(init_sector)
        esp.flash_write(init_sector * sector_size, data)
        print("ADC mode changed in flash; restart to use it!")
        return
Метод не годится если надо поочередно получать значение на пине ADC и напряжение питания.

Взято отсюда.
 
Сверху Снизу