ESP8266 АЦП – чтение аналоговых значений с Arduino IDE, MicroPython и Lua
Как ESP8266-12E, так и ESP8266-07 имеют один легкодоступный пин АЦП (аналого-цифрового преобразователя). Это означает, что эти платы ESP8266 могут считывать аналоговые сигналы. В этом руководстве мы покажем вам, как использовать аналоговое чтение с ESP8266 с помощью Arduino IDE, MicroPython или прошивки Lua.
В качестве примера мы покажем вам, как считывать аналоговые значения с потенциометра. Эта статья разделена на три раздела:
Характеристики АЦП ESP8266
Говоря о пине АЦП ESP8266, вы часто будете встречать следующие термины, которые используются как взаимозаменяемые:
ADC (Analog-to-digital Converter – аналого-цифровой преобразователь)
TOUT
Pin6
A0
Analog Pin 0
Все эти термины относятся к одному и тому же пину ESP8266, который выделен в следующем разделе.
Разрешение АЦП ESP8266
Пин АЦП имеет 10-битное разрешение, что означает, что вы будете получать значения от 0 до 1023.
Диапазон входного напряжения ESP8266
Диапазон входного напряжения пина АЦП ESP8266 составляет от 0 до 1 В, если вы используете голый чип. Однако большинство отладочных плат ESP8266 поставляются со встроенным делителем напряжения, поэтому входной диапазон составляет от 0 до 3,3 В. Итого:
Диапазон напряжения АЦП на отладочных платах ESP8266: от 0 до 3,3 В (например: ESP8266 12-E NodeMCU Kit, WeMos D1 Mini, …)
Диапазон напряжения АЦП на чипе ESP8266: от 0 до 1 В (например: чип ESP-07, чип ESP-12E, …)
Аналоговый пин ESP8266 NodeMCU
С платой ESP8266 12-E NodeMCU и другими отладочными платами ESP8266 очень легко получить доступ к пину A0 – достаточно подключить перемычку к пину (см. рисунок ниже).
Если вы используете чип ESP8266, например ESP8266-07, вам нужно припаять провод к этому пину.
Необходимые компоненты
Чтобы показать вам, как использовать аналоговое чтение с ESP8266, мы будем считывать значения с потенциометра. Для этого вам нужно подключить потенциометр к вашей плате.
Вот оборудование, которое вам понадобится для выполнения этого руководства:
Рекомендуется: ESP8266-12E NodeMCU Kit (читайте сравнение отладочных плат ESP8266)
Альтернатива: 1x чип ESP8266-07 или 1x чип ESP8266-12E + FTDI программатор
Резистор 100 Ом (необходим при использовании голого чипа)
Резистор 220 Ом (необходим при использовании голого чипа)
Вы можете использовать приведенные выше ссылки или перейти непосредственно на MakerAdvisor.com/tools чтобы найти все компоненты для ваших проектов по лучшей цене!
Схема подключения
Если вы используете отладочную плату ESP8266, следуйте следующей схеме подключения.
Если вы используете :doc:`чип ESP8266 </esp32/rnt/esp8266-pinout-reference-gpios/index>`_ с диапазоном входного напряжения от 0 В до 1 В, вам нужно убедиться, что входное напряжение на пине A0 не превышает 1 В. Поэтому вам необходима схема делителя напряжения, как показано ниже.
Мы используем резисторы 100 Ом и 220 Ом, чтобы выходное напряжение Vout составляло 1 В.
Рекомендуемое чтение: :doc:`Справочник по пинам ESP8266: какие GPIO пины следует использовать? </esp32/rnt/esp8266-pinout-reference-gpios/index>`_
1. Аналоговое чтение ESP8266 NodeMCU с Arduino IDE
В этом разделе показано, как считывать аналоговые значения с ESP8266 с помощью Arduino IDE.
Установка ESP8266 в Arduino IDE
Для загрузки кода в ESP8266 сначала необходимо установить дополнение ESP8266, если вы этого ещё не сделали. Следуйте руководству:
Код
Скопируйте следующий код в вашу Arduino IDE.
/*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
*********/
const int analogInPin = A0; // ESP8266 Analog Pin ADC0 = A0
int sensorValue = 0; // value read from the pot
void setup() {
// initialize serial communication at 115200
Serial.begin(115200);
}
void loop() {
// read the analog in value
sensorValue = analogRead(analogInPin);
// print the readings in the Serial Monitor
Serial.print("sensor = ");
Serial.print(sensorValue);
delay(1000);
}
Код начинается с объявления аналогового пина ESP8266 в переменной analogInPin:
const int analogInPin = A0; // ESP8266 Analog Pin ADC0 = A0
Значение потенциометра будет храниться в переменной sensorValue:
int sensorValue = 0; // value read from the pot
В функции setup() инициализируем монитор последовательного порта для отладки:
void setup() {
// initialize serial communication at 115200
Serial.begin(115200);
}
В цикле loop() мы считываем аналоговое значение с помощью функции analogRead(), передавая analogInPin в качестве аргумента. Значение сохраняется в переменной sensorValue:
sensorValue = analogRead(analogInPin);
Наконец, показания выводятся в монитор последовательного порта, чтобы вы могли видеть, что происходит.
Serial.print(sensorValue);
Загрузка кода
Загрузите приведённый выше код в ESP8266. Убедитесь, что выбраны правильная плата и COM-порт. Перейдите в Tools > Board и выберите модель ESP8266, которую вы используете. В нашем случае мы используем ESP8266 12-E NodeMCU Kit.
Перейдите в Tools > Port и выберите COM-порт, к которому подключен ESP8266.
Нажмите кнопку загрузки в Arduino IDE.
Примечание: если вы используете чип ESP-07 или ESP-12E, вам понадобится FTDI программатор для загрузки кода.
Демонстрация
После загрузки кода откройте монитор последовательного порта на скорости 115200 бод. Должны отобразиться аналоговые показания.
Поворачивайте потенциометр и наблюдайте, как значения увеличиваются или уменьшаются.
2. Аналоговое чтение ESP8266 NodeMCU с MicroPython
В этом разделе показано, как считывать аналоговые значения с ESP8266 с помощью прошивки MicroPython.
Для выполнения этого руководства вам необходима прошивка MicroPython, установленная на вашу плату ESP8266. Также вам понадобится IDE для написания и загрузки кода. Мы рекомендуем использовать Thonny IDE или uPyCraft IDE:
Thonny IDE:
uPyCraft IDE:
Скрипт – аналоговое чтение ESP8266
Следующий скрипт для ESP8266 считывает аналоговые значения с пина A0.
# Complete project details at 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)
Как работает код
Для чтения аналоговых входов импортируйте класс ADC в дополнение к классу Pin из модуля machine. Также импортируем метод sleep.
from machine import Pin, ADC
from time import sleep
Затем создайте объект ADC с именем pot на пине A0.
pot = ADC(0)
В цикле считайте значение потенциометра и сохраните его в переменной pot_value. Для чтения значения используйте метод read() объекта pot.
pot_value = pot.read()
Затем выведите pot_value.
print(pot_value)
В конце добавьте задержку 100 мс.
sleep(0.1)
Подводя итог:
Для чтения аналогового значения используется класс ADC;
Для создания объекта ADC достаточно вызвать ADC(0).
Для чтения аналогового значения используйте метод read() объекта ADC.
Демонстрация
После загрузки кода на плату ESP8266 с помощью :doc:`Thonny IDE </esp32/rnt/getting-started-thonny-micropython-python-ide-esp32-esp8266/index>`_ или :doc:`uPyCraft IDE </esp32/rnt/getting-started-micropython-esp32-esp8266/index>`_, поворачивайте потенциометр.
Проверьте оболочку вашей MicroPython IDE для чтения значений потенциометра.
3. Аналоговое чтение ESP8266 с Lua/NodeMCU
В этом разделе показано, как использовать прошивку NodeMCU для чтения аналоговых значений с ESP8266.
Прошивка ESP8266 прошивкой Lua/NodeMCU
Сначала вам нужно прошить ваши ESP прошивкой NodeMCU.
Мы рекомендуем использовать ESPlorer IDE – программу, созданную 4refr0nt для отправки команд на ESP8266.
Следуйте этим инструкциям для загрузки и установки ESPlorer IDE:
Нажмите здесь чтобы скачать ESPlorer
Распакуйте папку
Перейдите в основную папку
Запустите ESPlorer.jar
Откройте ESPlorer
Тестирование пина АЦП (A0)
Для отправки команд через ESPlorer IDE необходимо установить последовательное соединение с вашим ESP. Следуйте этим инструкциям:
Подключите ваш ESP-12E или FTDI программатор к компьютеру
Установите скорость 9600 бод
Выберите порт вашего ESP-12E или FTDI программатора (например, COM3)
Нажмите Open/Close
Затем введите следующую команду:
print(adc.read(0))
Нажмите кнопку «Send», как показано ниже.
Должно вернуться значение от 0 до 1024. Поверните потенциометр и отправьте команду print(adc.read(0)) ещё несколько раз, чтобы получить значение потенциометра.
Когда потенциометр находится около 0 В, выводится 0, а когда достигает 3,3 В – должно выводиться 1024.
Заключение
В этом руководстве мы показали вам, как считывать аналоговые значения с помощью аналогового пина ESP8266 (A0). Важно отметить, что диапазон аналогового входа ESP8266 составляет 0-1 В при использовании голого чипа или 0-3,3 В при использовании отладочной платы.
В любом случае следует быть осторожным, чтобы не превысить максимально рекомендуемое напряжение. Возможно, вам стоит добавить схему делителя напряжения, если вам нужен более высокий диапазон входного напряжения.
Мы надеемся, что это руководство было для вас полезным. Если вы только начинаете работать с ESP8266, мы рекомендуем следующие ресурсы:
Домашняя автоматизация с использованием ESP8266 (электронная книга)
:doc:`Справочник по GPIO ESP8266 </esp32/rnt/esp8266-pinout-reference-gpios/index>`_
:doc:`Веб-сервер ESP8266 </esp32/rnt/esp8266-web-server/index>`_
Спасибо за чтение.