ESP32:Примеры/Считывание данных с входных аналоговых контактов ESP32: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
 
Нет описания правки
 
(не показаны 4 промежуточные версии 2 участников)
Строка 1: Строка 1:
{{ESP32 панель перехода}}
{{ESP32 панель перехода}}
{{Перевод от Сubewriter}}
{{Перевод от Сubewriter}}
{{Myagkij-редактор}}
{{Myagkij-редактор}}
{{Черновик}}


=Считывание данных с входных аналоговых контактов ESP32=
=Считывание данных с входных аналоговых контактов ESP32=
Строка 22: Строка 19:
Считывание входных аналоговых данных [[ESP32]] в коде [[IDE Arduino]] осуществляется очень просто – при помощи функции analogRead(). У нее лишь один параметр «GPIO», т.е. контакт, данные с которого нужно прочесть:
Считывание входных аналоговых данных [[ESP32]] в коде [[IDE Arduino]] осуществляется очень просто – при помощи функции analogRead(). У нее лишь один параметр «GPIO», т.е. контакт, данные с которого нужно прочесть:


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
analogRead(GPIO)
analogRead(GPIO)
</syntaxhighlight>
</syntaxhighlight>
Строка 40: Строка 37:
В этом коде мы сначала задаем GPIO-контакт, к которому подключен [[потенциометр]]. В нашем случае это GPIO34.
В этом коде мы сначала задаем GPIO-контакт, к которому подключен [[потенциометр]]. В нашем случае это GPIO34.


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
const int potPin = 34;
const int potPin = 34;
</syntaxhighlight>
</syntaxhighlight>
Строка 46: Строка 43:
В блоке setup() инициализируем последовательную коммуникацию на скорости 115200 бод.
В блоке setup() инициализируем последовательную коммуникацию на скорости 115200 бод.


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
Serial.begin(115200);
Serial.begin(115200);
</syntaxhighlight>
</syntaxhighlight>
Строка 52: Строка 49:
В блоке loop() при помощи функции analogRead() считываем входные аналоговые данные, присланные от контакта «potPin».
В блоке loop() при помощи функции analogRead() считываем входные аналоговые данные, присланные от контакта «potPin».


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
potValue = analogRead(potPin);
potValue = analogRead(potPin);
</syntaxhighlight>
</syntaxhighlight>
Строка 58: Строка 55:
Наконец, печатаем данные от потенциометра в мониторе порта.  
Наконец, печатаем данные от потенциометра в мониторе порта.  


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
Serial.println(potValue);
Serial.println(potValue);
</syntaxhighlight>
</syntaxhighlight>
Строка 85: Строка 82:
==Схема==
==Схема==


{{Спойлер|На данной схеме используется плата [[ESP32S-HiLetgo]], если вы используете другую, сверьтесь с вашей распиновкой.}}
{{Примечание1|На данной схеме используется плата [[ESP32S-HiLetgo]], если вы используете другую, сверьтесь с вашей распиновкой.}}


Средний контакт потенциометра должен быть подключен к контакту GPIO34 платы ESP32. Оставшиеся два контакта соединены с шиной GND и 3.3V.
Средний контакт потенциометра должен быть подключен к контакту GPIO34 платы ESP32. Оставшиеся два контакта соединены с шиной GND и 3.3V.
Строка 93: Строка 90:
==Код==
==Код==


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
// потенциометр подключен к контакту GPIO34 (ADC1_CH6)  
// потенциометр подключен к контакту GPIO34 (ADC1_CH6)  
const int potPin = 34;
const int potPin = 34;
Строка 118: Строка 115:


<references />
<references />
{{Навигационная таблица/Портал/ESP32}}


[[Категория:ESP32]]
[[Категория:ESP32]]

Текущая версия от 09:18, 18 июня 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Считывание данных с входных аналоговых контактов ESP32

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

Считывание аналоговых данных при помощи ESP32 – это, по сути, измерение колебаний напряжения между 0 и 3.3 вольтами. Затем считанному напряжению присваивается значение в диапазоне от «0» до «4095», где «0» – это 0 вольт, а «4095» – это 3.3 вольта. Таким образом, любому промежуточному напряжению между 0 и 3.3 вольтами будет присвоено соответствующее промежуточное значение в диапазоне от «0» до «4095».

В идеале от данных, генерируемых АЦП-контактами ESP32, ждешь линейности (равномерности). Но на самом деле они ведут себя как на графике ниже:

Это значит, что ваша ESP32 не видит разницы между напряжением в 3.3 и 3.2 вольта – для того и другого она будет выдавать значение «4095». То же самое происходит и на низком напряжении: для 0 и 0.1 вольт будет выдано значение «0». Это нужно знать, когда работаешь с АЦП-контактами ESP32.

Вот дискуссия на GitHub об этом.

Считывание входных аналоговых данных ESP32 в коде IDE Arduino осуществляется очень просто – при помощи функции analogRead(). У нее лишь один параметр «GPIO», т.е. контакт, данные с которого нужно прочесть:

analogRead(GPIO)

ESP32 поддерживает считывание входных данных с 18 каналов, но на 30-контактной версии платы DEVKIT ESP32 V1 DOIT доступно только 15 из них. Все это – АЦП-контакты. Чтобы узнать, где они находятся, взгляните на распиновку своей ESP32-платы. На схеме ниже они помечены светло-синим цветом.

Данные, считываемые этими входными аналоговыми контактами, имеют 12-битное разрешение. Это значит, что при их считывании значения будут варьироваться от «0» до «4095».

Чтобы понять, как это все работает, давайте сделаем простой проект, где мы будем считывать входные аналоговые данные, присланные от потенциометра.

Подключите потенциометр к ESP32 согласно схеме. Скопируйте код из раздела снизу.

Этот код просто считывает данные от потенциометра и печатает их в мониторе порта.

В этом коде мы сначала задаем GPIO-контакт, к которому подключен потенциометр. В нашем случае это GPIO34.

const int potPin = 34;

В блоке setup() инициализируем последовательную коммуникацию на скорости 115200 бод.

Serial.begin(115200);

В блоке loop() при помощи функции analogRead() считываем входные аналоговые данные, присланные от контакта «potPin».

potValue = analogRead(potPin);

Наконец, печатаем данные от потенциометра в мониторе порта.

Serial.println(potValue);

Загружаем этот код на ESP32. Перед загрузкой кода всегда проверяйте, правильные ли у вас выбраны плата и COM-порт в IDE Arduino.

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

Максимальное значение, которое может быть показано в мониторе порта – «4095», а минимальное – «0».

Итак, если вкратце, то в этом примере мы научились следующему:

  • 30-контактная версия платы ESP32 DEVKIT V1 DOIT оснащена 15 АЦП-контактами, которые можно использовать для считывания аналоговых данных;
  • Эти контакты имеют 12-битное разрешение, т.е. вы можете считывать с них значения в диапазоне от «0» до «4095»;
  • В коде IDE Arduino за считывание данных отвечает лишь функция analogRead();
  • Данные с АЦП-контактов ESP32 считываются нелинейно, поэтому вы, вероятно, не сможете отличить 0 от 0.1 вольт, а также 3.2 от 3.3 вольт. Знайте это, работая с АЦП-контактами;

Необходимое оборудование

Схема

Примечание

На данной схеме используется плата ESP32S-HiLetgo, если вы используете другую, сверьтесь с вашей распиновкой.

Средний контакт потенциометра должен быть подключен к контакту GPIO34 платы ESP32. Оставшиеся два контакта соединены с шиной GND и 3.3V.

Код

// потенциометр подключен к контакту GPIO34 (ADC1_CH6) 
const int potPin = 34;

// переменная для хранения данных от потенциометра:
int potValue = 0;

void setup() {
  Serial.begin(115200);
  delay(1000);
}

void loop() {
  // считываем данные от потенциометра:
  potValue = analogRead(potPin);
  Serial.println(potValue);
  delay(500);
}

См.также

Внешние ссылки