ESP8266 АЦП – чтение аналоговых значений с Arduino IDE, MicroPython и Lua

Как ESP8266-12E, так и ESP8266-07 имеют один легкодоступный пин АЦП (аналого-цифрового преобразователя). Это означает, что эти платы ESP8266 могут считывать аналоговые сигналы. В этом руководстве мы покажем вам, как использовать аналоговое чтение с ESP8266 с помощью Arduino IDE, MicroPython или прошивки Lua.

ESP8266 аналоговое чтение ADC A0 Arduino IDE MicroPython Lua

В качестве примера мы покажем вам, как считывать аналоговые значения с потенциометра. Эта статья разделена на три раздела:

  1. 1. Аналоговое чтение ESP8266 NodeMCU с Arduino IDE

  2. 2. Аналоговое чтение ESP8266 NodeMCU с MicroPython

  3. 3. Аналоговое чтение ESP8266 с Lua/NodeMCU

Характеристики АЦП 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 NodeMCU kit

Если вы используете чип ESP8266, например ESP8266-07, вам нужно припаять провод к этому пину.

Чип ESP-07 ESP8266

ESP-07

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

Чтобы показать вам, как использовать аналоговое чтение с ESP8266, мы будем считывать значения с потенциометра. Для этого вам нужно подключить потенциометр к вашей плате.

Вот оборудование, которое вам понадобится для выполнения этого руководства:

Вы можете использовать приведенные выше ссылки или перейти непосредственно на MakerAdvisor.com/tools чтобы найти все компоненты для ваших проектов по лучшей цене!

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

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

ESP8266 АЦП чтение аналогового значения Arduino IDE MicroPython Lua

Если вы используете :doc:`чип ESP8266 </esp32/rnt/esp8266-pinout-reference-gpios/index>`_ с диапазоном входного напряжения от 0 В до 1 В, вам нужно убедиться, что входное напряжение на пине A0 не превышает 1 В. Поэтому вам необходима схема делителя напряжения, как показано ниже.

ESP8266 АЦП чтение аналогового значения схема

Мы используем резисторы 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.

Загрузка кода в ESP8266 NodeMCU выбор платы

Перейдите в Tools > Port и выберите COM-порт, к которому подключен ESP8266.

Загрузка кода в ESP8266 NodeMCU выбор порта

Нажмите кнопку загрузки в Arduino IDE.

Примечание: если вы используете чип ESP-07 или ESP-12E, вам понадобится FTDI программатор для загрузки кода.

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

После загрузки кода откройте монитор последовательного порта на скорости 115200 бод. Должны отобразиться аналоговые показания.

ESP8266 АЦП чтение аналоговых значений с Arduino IDE демонстрация

Поворачивайте потенциометр и наблюдайте, как значения увеличиваются или уменьшаются.


2. Аналоговое чтение ESP8266 NodeMCU с MicroPython

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

Для выполнения этого руководства вам необходима прошивка MicroPython, установленная на вашу плату ESP8266. Также вам понадобится 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 для чтения значений потенциометра.

ESP32 ESP8266 аналоговые показания с MicroPython демонстрация

3. Аналоговое чтение ESP8266 с Lua/NodeMCU

В этом разделе показано, как использовать прошивку NodeMCU для чтения аналоговых значений с ESP8266.

Прошивка ESP8266 прошивкой Lua/NodeMCU

Сначала вам нужно прошить ваши ESP прошивкой NodeMCU.

Мы рекомендуем использовать ESPlorer IDE – программу, созданную 4refr0nt для отправки команд на ESP8266.

Следуйте этим инструкциям для загрузки и установки ESPlorer IDE:

  1. Нажмите здесь чтобы скачать ESPlorer

  2. Распакуйте папку

  3. Перейдите в основную папку

  4. Запустите ESPlorer.jar

  5. Откройте ESPlorer

Тестирование пина АЦП (A0)

Для отправки команд через ESPlorer IDE необходимо установить последовательное соединение с вашим ESP. Следуйте этим инструкциям:

  1. Подключите ваш ESP-12E или FTDI программатор к компьютеру

  2. Установите скорость 9600 бод

  3. Выберите порт вашего ESP-12E или FTDI программатора (например, COM3)

  4. Нажмите Open/Close

ESPlorer IDE

Затем введите следующую команду:

print(adc.read(0))

Нажмите кнопку «Send», как показано ниже.

ESPlorer отправка команды

Должно вернуться значение от 0 до 1024. Поверните потенциометр и отправьте команду print(adc.read(0)) ещё несколько раз, чтобы получить значение потенциометра.

Когда потенциометр находится около 0 В, выводится 0, а когда достигает 3,3 В – должно выводиться 1024.

Заключение

В этом руководстве мы показали вам, как считывать аналоговые значения с помощью аналогового пина ESP8266 (A0). Важно отметить, что диапазон аналогового входа ESP8266 составляет 0-1 В при использовании голого чипа или 0-3,3 В при использовании отладочной платы.

В любом случае следует быть осторожным, чтобы не превысить максимально рекомендуемое напряжение. Возможно, вам стоит добавить схему делителя напряжения, если вам нужен более высокий диапазон входного напряжения.

Мы надеемся, что это руководство было для вас полезным. Если вы только начинаете работать с ESP8266, мы рекомендуем следующие ресурсы:

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