ESP32/ESP8266: аналоговые показания с MicroPython
В этом руководстве показано, как считывать аналоговые значения с плат ESP32 и ESP8266 с помощью прошивки MicroPython. В качестве примера мы используем потенциометр.
Предварительные условия
Для выполнения этого руководства необходимо установить прошивку MicroPython на плату ESP32 или ESP8266. Также нужна IDE для написания и загрузки кода на плату. Мы рекомендуем использовать Thonny IDE или uPyCraft 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 |
|---|---|---|
Аналоговые пины |
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 или ESP8266 (читайте: ESP32 vs ESP8266)
Схема – ESP32
Следуйте следующей схеме подключения, если вы используете плату ESP32. Мы используем GPIO 34, но вы можете использовать любой другой пин с поддержкой АЦП.
Схема – ESP8266
Следуйте следующей схеме подключения, если вы используете плату ESP8266. Аналоговый вход ограничен пином A0.
Скрипт для 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)
Доступные варианты аттенюации:
Параметр |
Максимальное напряжение |
|---|---|
|
1,2 В |
|
1,5 В |
|
2,0 В |
|
3,3 В |
Чтение значений
Метод read() считывает текущее аналоговое значение. По умолчанию возвращает значение от 0 до 4095 (12-битное разрешение):
pot_value = pot.read()
Настройка разрешения
Вы можете изменить разрядность АЦП с помощью метода width():
Параметр |
Диапазон значений |
|---|---|
|
0–511 |
|
0–1023 |
|
0–2047 |
|
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 выдаёт значения от 0 до 4095, а ESP8266 — от 0 до 1023.
Заключение
Мы надеемся, что это руководство по MicroPython было полезным. Для считывания аналоговых значений необходимо создать объект ADC через класс ADC из модуля machine, а затем использовать метод read() для получения значений. ESP32 предлагает значительно больше аналоговых пинов и настраиваемое разрешение по сравнению с единственным аналоговым пином A0 на ESP8266 с фиксированным 10-битным разрешением.
Если вы хотите узнать больше о MicroPython, обязательно ознакомьтесь с электронной книгой: MicroPython Programming with ESP32 and ESP8266.
Если вам нравится MicroPython, вам также могут быть интересны следующие руководства:
Спасибо за чтение.