• Система автоматизации с открытым исходным кодом на базе 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 и напряжение питания.

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