Como utilizar interrupções - ESP32
- automatelabonline
- 23 de mar.
- 2 min de leitura
Atualizado: 24 de mar.
As interrupções permitem que o microcontrolador interrompa a execução normal do seu código para responder a eventos externos ou internos de forma rápida e precisa, sem a necessidade de ficar constantemente verificando o estado de um evento. Essa abordagem de programação orientada a eventos é essencial para criar sistemas mais eficientes e responsivos.
As interrupções no ESP32 são frequentemente utilizadas em aplicações que exigem tempo real ou respostas imediatas, como em sistemas de medição de rpm, leitura de sensores com precisão milimétrica, projetos de comunicação onde a sincronização é crucial, ou até mesmo em simples leituras de botões. Elas permitem que o ESP32 execute tarefas em segundo plano enquanto mantém o processamento de outras funções, o que torna o sistema mais ágil e capaz de lidar com múltiplas demandas simultaneamente.
Funções para Interrupções
Todos os pinos do ESP32 podem ser configurados para interrupções. Para criar uma interrupção, utiliza-se a função:
attachInterrupt(PINO, FUNCAO, MODO);
PINO representa o número da GPIO utilizada. FUNCAO é o nome de uma função criada no código, que será executada sempre que a interrupção acontecer, e MODO representa o tipo da interrupção, existem as seguintes possibilidades:
LOW: interrupção acontecerá quando pino estiver em nível lógico baixo;
CHANGE: interrupção acontecerá quando pino mudar de nível lógico;
FALLING: interrupção acontecerá quando pino mudar de nível lógico alto para baixo;
RISING: interrupção acontecerá quando pino mudar de nível lógico baixo para alto;
HIGH: interrupção acontecerá quando pino estiver em nível lógico alto;
Para desativar as interrupções, basta utilizar a função:
detachInterrupt(PINO);
Projeto - Criando Interrupções no ESP32
Para entender melhor como funcionam as interrupções, vamos fazer um projeto simples, onde um botão irá acionar uma interrupção. Para isso, o seguinte circuito será utilizado:

Segue abaixo o código do projeto:
#define interruptPin 5
void interrupt() {
Serial.println("Apertou o botão");
}
void setup() {
Serial.begin(9600);
pinMode(interruptPin, INPUT);
attachInterrupt(interruptPin, interrupt, RISING);
}
void loop() {
delay(100);
}
Entendendo o Código
Primeiro, é criado a função interrupt(), que será chamada toda vez que o botão for pressionado.
void interrupt() {
Serial.println("Apertou o botão");
}
Como essa função interromperá o código, ela deve ter uma execução rápida. Por isso, não é recomendado utilizar a função println() dentro da função de interrupção. Vamos utilizar nesse caso apenas para fins de demonstração. Porém em projetos reais essa prática não é adequada.
Na função setup() a interrupção é configurada no pino 5 utilizando o método RISING e chamando a função interrupt(). Ao analisar o circuito, quando o botão é pressionado, ele faz o pino 5 ter contato com o 5V. Por isso o modo RISING é utilizado.
void setup() {
Serial.begin(9600);
pinMode(interruptPin, INPUT);
attachInterrupt(digitalPinToInterrupt(interruptPin), interrupt, RISING);
}
Com esse código, toda vez que o botão for pressionado, o ESP32 escreverá no monitor serial a mensagem "Apertou o botão".
Conclusões
As funções de interrupção no ESP32 são recursos poderosos que permitem aos desenvolvedores criar sistemas mais responsivos e eficientes, especialmente em projetos que exigem monitoramento constante de eventos e resposta imediata a estímulos.
Entretanto, o uso de interrupções exige cuidado, especialmente em projetos mais complexos, onde o controle de tempo e a gestão de recursos podem ser críticos. É fundamental entender o funcionamento das interrupções, suas limitações e como integrá-las corretamente no fluxo do programa para evitar problemas como falhas de sincronização e bloqueios indesejados.
留言