ESP32/ESP8266: аналоговые показания с MicroPython

В этом руководстве показано, как считывать аналоговые значения с плат ESP32 и ESP8266 с помощью прошивки MicroPython. В качестве примера мы используем потенциометр.

ESP32/ESP8266 аналоговые показания с MicroPython

Предварительные условия

Для выполнения этого руководства необходимо установить прошивку MicroPython на плату ESP32 или ESP8266. Также нужна IDE для написания и загрузки кода на плату. Мы рекомендуем использовать Thonny IDE или uPyCraft IDE:

Аналоговые пины ESP8266

ESP8266 имеет только один аналоговый пинA0 (также называемый ADC 0):

  • Разрешение: 10 бит

  • Диапазон напряжения: от 0 до 3,3 В (на некоторых версиях ограничено до 1 В)

  • Диапазон выходных значений: от 0 до 1023

Аналоговые пины ESP32

ESP32 поддерживает аналоговое чтение на нескольких пинах. По умолчанию имеют разрешение 12 бит.

Пины АЦП (ADC): GPIO 0, 2, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39.

  • Разрешение: 12 бит (по умолчанию)

  • Диапазон напряжения: от 0 до 3,3 В

  • Диапазон выходных значений: от 0 до 4095 (по умолчанию)

  • Разрешение можно изменить программно

Примечание

Подробнее о том, какие GPIO пины использовать на ESP32, читайте в нашем руководстве: Распиновка ESP32: какие GPIO пины следует использовать?.

Сравнение ESP8266 и ESP32 (АЦП)

Сравнение аналоговых возможностей ESP8266 и ESP32

Параметр

ESP8266

ESP32

Аналоговые пины

A0 (ADC 0) — только один

GPIO: 0, 2, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39

Разрешение

10 бит (0–1023)

12 бит (0–4095)

Изменение разрешения

Нет

Да

Схема подключения

Необходимые компоненты

Вот список компонентов, необходимых для сборки схемы:

Схема – ESP32

Следуйте следующей схеме подключения, если вы используете плату ESP32. Мы используем GPIO 34, но вы можете использовать любой другой пин с поддержкой АЦП.

Схема подключения потенциометра к ESP32 для аналогового чтения с MicroPython

Схема – ESP8266

Следуйте следующей схеме подключения, если вы используете плату ESP8266. Аналоговый вход ограничен пином A0.

Схема подключения потенциометра к ESP8266 для аналогового чтения с MicroPython

Скрипт для ESP32

Вот скрипт, который считывает аналоговые значения с потенциометра на ESP32:

# Полная информация о проекте: https://RandomNerdTutorials.com/micropython-programming-with-esp32-and-esp8266/

from machine import Pin, ADC
from time import sleep

pot = ADC(Pin(34))
pot.atten(ADC.ATTN_11DB)       #Full range: 3.3v

while True:
  pot_value = pot.read()
  print(pot_value)
  sleep(0.1)

Просмотреть исходный код

Как работает код (ESP32)

Импорт библиотек

Для создания пина АЦП импортируйте класс ADC вместе с классом Pin из модуля machine. Также импортируйте функцию sleep из модуля time:

from machine import Pin, ADC
from time import sleep

Создание объекта ADC

Затем создайте объект ADC с именем pot на GPIO 34. Вы можете использовать любой пин, совместимый с АЦП:

pot = ADC(Pin(34))

Настройка аттенюации

Метод atten() настраивает диапазон измерения напряжения. ADC.ATTN_11DB позволяет измерять напряжение в полном диапазоне от 0 до 3,3 В.

pot.atten(ADC.ATTN_11DB)

Доступные варианты аттенюации:

Параметр

Максимальное напряжение

ADC.ATTN_0DB

1,2 В

ADC.ATTN_2_5DB

1,5 В

ADC.ATTN_6DB

2,0 В

ADC.ATTN_11DB

3,3 В

Чтение значений

Метод read() считывает текущее аналоговое значение. По умолчанию возвращает значение от 0 до 4095 (12-битное разрешение):

pot_value = pot.read()

Настройка разрешения

Вы можете изменить разрядность АЦП с помощью метода width():

Параметр

Диапазон значений

ADC.WIDTH_9BIT

0–511

ADC.WIDTH_10BIT

0–1023

ADC.WIDTH_11BIT

0–2047

ADC.WIDTH_12BIT

0–4095

Пример установки 10-битного разрешения:

pot.width(ADC.WIDTH_10BIT)

Скрипт для ESP8266

Вот скрипт, который считывает аналоговые значения с потенциометра на ESP8266:

# Полная информация о проекте: https://RandomNerdTutorials.com/micropython-programming-with-esp32-and-esp8266/

from machine import Pin, ADC
from time import sleep

pot = ADC(0)

while True:
  pot_value = pot.read()
  print(pot_value)
  sleep(0.1)

Просмотреть исходный код

Как работает код (ESP8266)

Импорт библиотек

Аналогично ESP32, импортируем классы ADC и Pin из модуля machine, а также функцию sleep:

from machine import Pin, ADC
from time import sleep

Создание объекта ADC

ADC(0) создаёт объект АЦП на единственном аналоговом пине — A0 (ADC0):

pot = ADC(0)

Чтение значений

Метод read() считывает аналоговые значения. ESP8266 имеет 10-битное разрешение, поэтому значения будут в диапазоне от 0 до 1023:

pot_value = pot.read()

Примечание

ESP8266 не позволяет изменять разрешение АЦП. Единственный аналоговый пин — A0.

Демонстрация

Сохраните код на вашу плату ESP с помощью Thonny IDE или uPyCraft IDE. Поверните ручку потенциометра, и значения будут выводиться в консоль Shell/REPL.

Демонстрация считывания аналоговых показаний с ESP32 и MicroPython

ESP32 выдаёт значения от 0 до 4095, а ESP8266 — от 0 до 1023.

Вывод аналоговых показаний в Shell/REPL MicroPython

Заключение

Мы надеемся, что это руководство по MicroPython было полезным. Для считывания аналоговых значений необходимо создать объект ADC через класс ADC из модуля machine, а затем использовать метод read() для получения значений. ESP32 предлагает значительно больше аналоговых пинов и настраиваемое разрешение по сравнению с единственным аналоговым пином A0 на ESP8266 с фиксированным 10-битным разрешением.

Если вы хотите узнать больше о MicroPython, обязательно ознакомьтесь с электронной книгой: MicroPython Programming with ESP32 and ESP8266.

Если вам нравится MicroPython, вам также могут быть интересны следующие руководства:

Спасибо за чтение.