Ёмкостные сенсорные пины ESP32 с Arduino IDE
В этой статье показано, как использовать сенсорные пины ESP32 с Arduino IDE. Сенсорные пины ESP32 могут обнаруживать изменения в любом объекте, несущем электрический заряд. Они часто используются для пробуждения ESP32 из глубокого сна.
Для чтения значения сенсорных пинов ESP32 используйте функцию touchRead(GPIO), которая принимает в качестве аргумента номер GPIO, который вы хотите прочитать.
Знакомство с сенсором касания ESP32
ESP32 имеет 10 ёмкостных сенсорных GPIO. Эти GPIO могут обнаруживать изменения в любом объекте, несущем электрический заряд, например, в коже человека. Поэтому они могут определять изменения, вызванные касанием пальцем к GPIO.
Эти пины можно легко интегрировать в ёмкостные панели и заменить механические кнопки. Кроме того, сенсорные пины также могут использоваться как источник пробуждения, когда ESP32 находится в глубоком сне.
Посмотрите на распиновку вашей платы, чтобы найти 10 различных сенсоров касания – чувствительные к касанию пины выделены розовым цветом.
Узнайте больше о GPIO ESP32: Справочник по распиновке ESP32.
Как вы можете видеть, сенсор касания 0 соответствует GPIO 4, сенсор касания 2 – GPIO 2, и так далее.
Примечание
Сенсор касания 1 – это GPIO 0. Однако он недоступен в виде пина на данной конкретной плате разработки ESP32 (версия с 30 GPIO). GPIO 0 доступен в версии с 36 пинами.
Примечание
На момент написания этого руководства существует проблема с назначением сенсорных пинов в Arduino IDE. GPIO 33 и GPIO 32 перепутаны в назначении. Это означает, что если вы хотите обратиться к GPIO 32, вам следует использовать T8 в коде. Если вы хотите обратиться к GPIO 33, используйте T9. Если у вас нет этой проблемы, пожалуйста, проигнорируйте это примечание.
Функция touchRead()
Чтение сенсора касания очень простое. В Arduino IDE вы используете функцию touchRead(), которая принимает в качестве аргумента GPIO, который вы хотите прочитать.
touchRead(GPIO);
Код – Чтение сенсора касания
Мы будем программировать ESP32 с помощью Arduino IDE, поэтому убедитесь, что у вас установлен дополнительный модуль ESP32 перед продолжением:
Инструкции для Windows – установка платы ESP32 в Arduino IDE
Инструкции для Mac и Linux – установка платы ESP32 в Arduino IDE
Давайте посмотрим, как работает эта функция, используя пример из библиотеки. В Arduino IDE перейдите в File > Examples > ESP32 > Touch и откройте скетч TouchRead.
// ESP32 Touch Test
// Just test touch pin - Touch0 is T0 which is on GPIO 4.
void setup() {
Serial.begin(115200);
delay(1000); // give me time to bring up serial monitor
Serial.println("ESP32 Touch Test");
}
void loop() {
Serial.println(touchRead(4)); // get value of Touch 0 pin = GPIO 4
delay(1000);
}
Этот пример считывает сенсорный пин 0 и отображает результаты в мониторе порта.
Пин T0 (сенсорный пин 0) соответствует GPIO 4, как мы видели ранее на схеме распиновки.
В этом коде, в setup(), вы начинаете с инициализации монитора порта для отображения показаний сенсора.
Serial.begin(115200);
В loop() происходит чтение сенсора.
Serial.println(touchRead(4));
Используйте функцию touchRead() и передайте в качестве аргумента пин, который хотите прочитать. В данном примере используется T0, который является сенсором касания 0 на GPIO 4. Вы можете передать либо номер сенсора касания (T0), либо номер GPIO (4).
Теперь загрузите код на вашу плату ESP32. Убедитесь, что выбраны правильная плата и COM-порт.
Тестирование примера скетча
Подключите перемычку к GPIO 4. Вы будете касаться металлической части этого провода, чтобы сенсор обнаружил касание.
В окне Arduino IDE перейдите в Tools и откройте монитор порта (Serial Monitor) на скорости 115200 бод. Вы увидите новые значения, отображаемые каждую секунду.
Коснитесь провода, подключённого к GPIO 4, и вы увидите, как значения уменьшаются.
Вы также можете использовать графический плоттер (Serial Plotter) для лучшей визуализации значений. Закройте монитор порта, перейдите в Tools > Serial Plotter.
Сенсорный светодиод
Вы можете использовать эту функцию для управления выходами. В этом примере мы создадим простую схему светодиода, управляемого касанием. Когда вы касаетесь GPIO пальцем, светодиод загорается.
Для этого примера вам понадобятся следующие компоненты:
Определение порогового значения
Возьмите кусок алюминиевой фольги, вырежьте небольшой квадрат и оберните его вокруг провода, как показано на следующем рисунке.
Запустив предыдущий код, вернитесь к монитору порта.
Теперь коснитесь алюминиевой фольги, и вы снова увидите изменение значений.
В нашем случае, когда мы не касаемся пина, нормальное значение превышает 70. А когда мы касаемся алюминиевой фольги, оно падает до значения ниже 10.
Таким образом, мы можем установить пороговое значение, и когда показание падает ниже этого значения, светодиод загорается. Хорошее пороговое значение в данном случае – например, 20.
Схема
Добавьте светодиод в вашу схему, следуя следующей принципиальной схеме. В данном случае мы подключаем светодиод к GPIO 16.
Код
Скопируйте следующий код в ваш Arduino IDE.
// set pin numbers
const int touchPin = 4;
const int ledPin = 16;
// change with your threshold value
const int threshold = 20;
// variable for storing the touch pin value
int touchValue;
void setup(){
Serial.begin(115200);
delay(1000); // give me time to bring up serial monitor
// initialize the LED pin as an output:
pinMode (ledPin, OUTPUT);
}
void loop(){
// read the state of the pushbutton value:
touchValue = touchRead(touchPin);
Serial.print(touchValue);
// check if the touchValue is below the threshold
// if it is, set ledPin to HIGH
if(touchValue < threshold){
// turn LED on
digitalWrite(ledPin, HIGH);
Serial.println(" - LED on");
}
else{
// turn LED off
digitalWrite(ledPin, LOW);
Serial.println(" - LED off");
}
delay(500);
}
Этот код считывает значение касания с определённого нами пина и включает светодиод, когда значение опускается ниже порога. Это означает, что когда вы кладёте палец на алюминиевую площадку, светодиод загорается.
Тестирование проекта
Загрузите скетч на ваш ESP32. Теперь протестируйте вашу схему. Коснитесь алюминиевой фольги и наблюдайте, как светодиод загорается.
Заключение
В этом руководстве вы узнали, как использовать сенсорные пины ESP32. Подведём итоги:
ESP32 имеет 10 ёмкостных сенсорных GPIO.
Когда вы касаетесь чувствительного к касанию GPIO, значение, считываемое сенсором, уменьшается.
Вы можете установить пороговое значение, чтобы что-то происходило при обнаружении касания.
Сенсорные пины ESP32 могут использоваться для пробуждения ESP32 из глубокого сна.
Если вы хотите узнать больше о ESP32, запишитесь на курс: Learn ESP32 with Arduino IDE.
Вам также может быть интересно ознакомиться с нашими бесплатными проектами и руководствами по ESP32.
Источник: ESP32 Capacitive Touch Sensor Pins with Arduino IDE