Despertar via Pino de Toque

Tempo de leitura: 2 minutes

Material Necessário

Um ESP32 de qualquer tipo.

 

Pinos de Toque Capacitivos

Desta vez vamos aprender como sair do modo de hibernação profunda usando os pinos de toque capacitivos do ESP32. Esses pinos detectam se os tocamos com nossa própria pele, por exemplo, com um dedo.

Nem todos os pinos têm essa capacidade, além disso, nem todos os pinos podem ser usados ​​no modo de suspensão profunda. Aqui você pode ver quais pinos são os que estão ativos no modo de sono profundo e, deles, quais podemos usar como pinos de toque, que são os marcados em lilás com a legenda TOUCH.

 

Programação

Para ver como funciona vamos usar outro dos exemplos que vem para o ESP32 que você encontrará em “Arquivo → Exemplos → ESP32 → DeepSleep → TouchWakeUp”.

O programa é muito semelhante ao que vimos na sessão anterior, mas para ativar o despertar pelo pino de toque, usaremos a seguinte instrução:

esp_sleep_enable_touchpad_wakeup()

Para poder usá-lo corretamente também temos que definir qual pino de toque vamos usar e qual sensibilidade queremos que tenha, estabelecendo o limite para o gatilho (limiar). No caso do exemplo, é utilizado o pino Touch 3, que corresponde ao GPIO 15.

  • Quando tocamos em um pino de toque, o valor que ele lê diminui.
  • Portanto, quanto maior o limite ou limiar, mais sensível será.
#define Threshold 40 /* Quanto maior o valor, maior a sensibilidade */
//Interruptor de configuração no toque Pad 3 (GPIO15)
touchAttachInterrupt(T3, callback, Threshold);

Na interrupção vemos que a função callback() está incluída. Esta função só é executada se tocarmos o pino de toque por um pouco mais de tempo. Nesse caso, está vazio, mas você pode tentar colocar algo nele.

void callback(){
  //placeholder callback function
}

Então, além da mesma função que tivemos no caso do Timer para mostrar na tela que tipo de interrupção despertou o ESP32, temos uma função para poder ver qual pino foi o que disparou.

/*
Método para imprimir o touchpad pelo qual o ESP32
foi despertado do sono
*/
void print_wakeup_touchpad(){
  touch_pad_t pin;

  touchPin = esp_sleep_get_touchpad_wakeup_status();

  switch(touchPin)
  {
    case 0  : Serial.println("Toque detectado no GPIO 4"); break;
    case 1  : Serial.println("Toque detectado no GPIO 0"); break;
    case 2  : Serial.println("Toque detectado no GPIO 2"); break;
    case 3  : Serial.println("Toque detectado no GPIO 15"); break;
    case 4  : Serial.println("Toque detectado no GPIO 13"); break;
    case 5  : Serial.println("Toque detectado no GPIO 12"); break;
    case 6  : Serial.println("Toque detectado no GPIO 14"); break;
    case 7  : Serial.println("Toque detectado no GPIO 27"); break;
    case 8  : Serial.println("Toque detectado no GPIO 33"); break;
    case 9  : Serial.println("Toque detectado no GPIO 32"); break;
    default : Serial.println("Acordar não pelo touchpad"); break;
  }
}

A configuração basicamente tem a mesma estrutura do exemplo do Timer, ele conta quantas vezes ele acordou e nos mostra no monitor serial o número de vezes que ele acordou e o motivo pelo qual o fez.