Сам спросил - сам отвечу.
Получить значение напряжения питания без внешней коммутации пина 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 и напряжение питания.
Взято
отсюда.