Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "MicroPython", создана пользователем fps, 24 дек 2018.

  1. fps

    fps Читатель

    Сообщения:
    65
    Симпатии:
    13
    Можно как-то средствами MicroPython измерить текущее напряжение питания ESP8266?

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

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

    fps Читатель

    Сообщения:
    65
    Симпатии:
    13
    Сам спросил - сам отвечу.

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

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

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

    Код (Python):
    1. import esp
    2. import machine
    3. from flashbdev import bdev
    4.  
    5. ADC_MODE_VCC = 255
    6. ADC_MODE_ADC = 0
    7.  
    8.  
    9. def set_adc_mode(mode):
    10.     sector_size = bdev.SEC_SIZE
    11.     flash_size = esp.flash_size()  # device dependent
    12.     init_sector = int(flash_size / sector_size - 4)
    13.     data = bytearray(esp.flash_read(init_sector * sector_size, sector_size))
    14.     if data[107] == mode:
    15.         return  # flash is already correct; nothing to do
    16.     else:
    17.         data[107] = mode  # re-write flash
    18.         esp.flash_erase(init_sector)
    19.         esp.flash_write(init_sector * sector_size, data)
    20.         print("ADC mode changed in flash; restart to use it!")
    21.         return
    22.  
    Метод не годится если надо поочередно получать значение на пине ADC и напряжение питания.

    Взято отсюда.
     

Поделиться этой страницей