ESP32 — отличная плата разработки для создания интеллектуальных проектов Интернета вещей, а добавление сенсорной функциональности сделает их еще умнее. В данной статье мы рассмотрим эти возможности ESP32.
ESP32 предлагает 10 емкостных сенсорных GPIO (контактов ввода/вывода). Вы можете использовать эти GPIO для обновления существующих простых проектов кнопок или для создания выключателей света, музыкальных инструментов или пользовательских интерактивных поверхностей.
Давайте узнаем как обращаться с этими сенсорными контактами и использовать их в своих проектах.
Примечание: обнаружение касания в ESP32 управляется сопроцессором ULP. Поэтому эти сенсорные контакты также могут использоваться для пробуждения ESP32 из глубокого сна.
Как ESP32 распознает прикосновения?
ESP32 использует электрические свойства человеческого тела в качестве входных данных. Когда к контакту прикасаются пальцем, небольшой электрический заряд тянется к точке контакта.
Это запускает изменение емкости, приводящее к аналоговому сигналу. Два АЦП (аналого-цифровых преобразователя) последовательного приближения (SAR) затем преобразуют этот аналоговый сигнал в цифровое число.
Сенсорные контакты ESP32
ESP32 имеет 10 емкостных сенсорных GPIO. Когда емкостная нагрузка (например, человеческая кожа) находится в непосредственной близости от GPIO, ESP32 обнаруживает это изменение емкости.
Хотя ESP32 имеет в общей сложности 10 емкостных контактов GPIO с датчиками касания, только 9 из них выведены на штыревые разъемы по обеим сторонам 30-контактной платы разработки ESP32.
Считывание показаний сенсора касания
Считывание сенсорного датчика простое. В Arduino IDE вы используете функцию touchRead()
, которая принимает в качестве аргумента номер контакта GPIO, который вы хотите считать.
1 |
touchRead(GPIOPin); |
Подключение оборудования
Хватит теории! Давайте рассмотрим практический пример.
Давайте подключим кабель к Touch #0 (GPIO #4). Вы можете прикрепить любой проводящий объект, например, алюминиевую фольгу, проводящую ткань, проводящую краску и т. д. к этому контакту и превратить его в сенсорную панель.
Пример кода
Давайте посмотрим, как это работает, используя пример из библиотеки. Откройте Arduino IDE, перейдите в File > Examples > ESP32 > Touch и откройте скетч TouchRead.
В этом примере просто считывается сенсорный контакт 0 и отображается результат на последовательном мониторе.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 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.print("Touch: "); Serial.println(touchRead(4)); // get touch value on GPIO 4 delay(1000); } |
После загрузки скетча откройте последовательный монитор на скорости передачи данных 115200 бод и нажмите кнопку EN на ESP32.
Теперь попробуйте прикоснуться к металлической части провода и посмотреть, как он отреагирует на прикосновение.
Пояснение кода
Код довольно прост. В функции setup() мы сначала инициализируем последовательную связь с ПК.
1 |
Serial.begin(115200); |
В функции loop() мы используем touchRead()
функцию и передаем ей в качестве аргумента контакт, который хотим считать. В данном случае это GPIO #4. Вы также можете передать номер сенсора касания T0
.
1 |
Serial.println(touchRead(4)); |
Проект ESP32 – светодиод, активируемый прикосновением
Давайте быстро создадим проект, чтобы продемонстрировать, как можно использовать сенсорные контакты ESP32 для управления устройствами. В этом примере мы сделаем простой светодиод, активируемый прикосновением, который будет загораться при прикосновении к контакту GPIO.
Конечно, этот проект можно расширить, включив в него открывающиеся двери, переключающие реле, светодиодные лампы или что-нибудь еще, что вы только сможете придумать.
Нахождение порога
Прежде чем продолжить, вы должны увидеть, какие показания вы фактически получаете от ESP32. Обратите внимание на выход, который вы получаете, когда вы касаетесь контакта и когда вы этого не делаете.
При запуске предыдущего скетча вы увидите на последовательном мониторе примерно следующие показания:
-
- когда вы касаетесь контакта (~3);
- когда вы не трогаете контакт (~71).
На основе этих значений мы можем установить пороговое значение, так что когда показания опустятся ниже порогового значения, мы включим светодиод. В этом случае хорошим пороговым значением может быть 30.
Пример кода
Ниже приведен простой код, который включает встроенный светодиод при однократном касании контакта и выключает его при повторном касании.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
// set pin numbers const int touchPin = 4; const int ledPin = 2; const int threshold = 30; // set the threshold int ledState = LOW; // the current state of the output pin int touchState; // the current reading from the input pin int lastTouchState = LOW; // the previous reading from the input pin unsigned long lastDebounceTime = 0; // the last time the output pin was toggled unsigned long debounceDelay = 50; // the debounce time; increase if the output flickers void setup() { pinMode(ledPin, OUTPUT); // set initial LED state digitalWrite(ledPin, ledState); } void loop() { // read the state of the pin int reading = touchRead(touchPin); // binarize touch reading for easy operation if (reading < threshold) { reading = HIGH; } else{ reading = LOW; } // If the pin is touched: if (reading != lastTouchState) { // reset the debouncing timer lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { // whatever the reading is at, it's been there for longer than the debounce // delay, so take it as the actual current state: // if the touch state has changed: if (reading != touchState) { touchState = reading; // only toggle the LED if the new touch state is HIGH if (touchState == HIGH) { ledState = !ledState; } } } // set the LED: digitalWrite(ledPin, ledState); // save the reading. Next time through the loop, it'll be the lastTouchState: lastTouchState = reading; } |
Загрузите скетч в ESP32. Вы должны увидеть переключение светодиода каждый раз, когда вы касаетесь провода.
58 просмотров