Освой MicroPython играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

MicroPython. Чтение аналоговых выводов

У плат ESP32 аналоговые выводы обозначаются аббревиатурой ADC. К ним относятся выводы: 2, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39. У других плат нужно смотреть документацию по выводам (pinout). Рекомедуется использовать выводы 36 и 39.

Я использовал M5Stick-C, который использует плату ESP32 Pico, в этом устройстве доступен вывод 36 для опытов.

По умолчанию разрешение ADC-выводов составляет 12 бит, мы можем считывать напряжение от 0 до 3.3V в диапазоне от 0 до 4095 (у ESP8266 от 0 до 1023). Разрешение можно изменить программно, например, ограничить значения от 0 до 1023, используя 10 бит.

Подключим потенциометр (питание, земля и вывод 36). Считываем напряжение с помощью следующего кода. Здесь присутствуют импорт классов, специфичных для M5Stick-C. Их можно убрать при работе с другими платами, в нашем случае они нужны для вывода значений на экран.


from m5stack import *
from m5ui import *
from uiflow import *

from machine import Pin, ADC
from time import sleep

lcd.setRotation(1)

setScreenColor(0xCD3E3E)

pot = ADC(Pin(36))
pot.atten(ADC.ATTN_11DB)

while True:
    pot_value = pot.read()
    print(pot_value)
    lcd.setCursor(0, 0)
    lcd.clear()
    lcd.print(pot_value)
    sleep(0.1)

В ADC(Pin(36)) мы указали вывод, с которого будем считывать аналоговые значения.

Метод atten() позволяет установить разрешение считываемых показаний. Возможные варианты.

  • ADC.ATTN_0DB — для напряжения 1.2V
  • ADC.ATTN_2_5DB — для напряжения 1.5V
  • ADC.ATTN_6DB — для напряжения 2.0V
  • ADC.ATTN_11DB — для напряжения 3.3V

Осталось в бесконечном цикле считывать показания через метод read().

Изменить разрешение можно через ADC.width(bit)

  • ADC.WIDTH_9BIT: range 0 to 511
  • ADC.WIDTH_10BIT: range 0 to 1023
  • ADC.WIDTH_11BIT: range 0 to 2047
  • ADC.WIDTH_12BIT: range 0 to 4095

# добавьте строчку в код примера
ADC.width(ADC.WIDTH_9BIT)

Дополнительные материалы

Реклама