Este post é mais um sobre o ESP01 e suas aplicações. Em artigos anteriores nós aprendemos a fazer o upgrade do firmware do módulo e também a fazer configurações por meio dos comandos AT. Se você ainda não leu os posts anteriores, confira! No artigo de hoje vamos mostrar uma aplicação prática de fato.
O objetivo é usar o ESP01 para controlar cargas por meio da internet. Ou seja, vamos fazer montar uma rede WIFI e enviar comandos por meio de um site online para nosso ESP. O ESP irá receber os comandos e acionar uma determinada carga. Os comandos serão enviados por um site, mas vamos mostrar também algumas opções de aplicativos que podem ser usados para fazer issso.
No nosso primeiro artigo sobre o ESP01, apresentamos o módulo e suas principais características. O post original pode ser visto aqui. A título de revisão, vamos repassar brevemente os principais pontos do módulo.
O ESP8266 é projetado pela Espressif Systems e fabricado pela AI-Thinker. O tamanho reduzido, seu preço competitivo e a praticidade para configurar e implementar redes Wifi tornaram o módulo muito popular em projetos de automação e aplicações com Arduino em geral.
Existem várias versões do módulo, cada qual com especificações técnicas diferentes. A família ESP é grande e alguns módulos chegam a ter 16 pinos, como o ESP-12. O modelo mais comumente usado é o ESP-01, que será utilizado na nossa aplicação.
Uma relação completa da família ESP pode ser vista aqui.
As versões com maior número de pinos são indicadas para projetos nos quais não se deseja utilizar uma segunda placa de processamento, como um Arduino ou Raspberry. O próprio ESP possui um MCU integrado e pinos A/D e digitais. Ou seja, não é necessário utilizar uma placa específica de processamento, caso o hardware do ESP já seja suficiente para a aplicação.
A pinagem do ESP está mostrada abaixo:
São 8 pinos, confira a descrição de cada um deles:
Os pontos importantes a serem lembrados são:
Observação (de Gustavo Murta) :
Dito isso, e com os complementos disponíveis nos outros dois posts da série ESP, vamos descrever os demais componentes da nossa aplicação.
Nosso objetivo é acionar uma carga residencial pela internet. Para tal, vamos usar um módulo relé para separa o circuito de potência(fonte externa que aciona a carga) do circuito de sinal(módulo ESP e componentes auxiliares para acionar o relé).
O módulo relé é muito importante nos projetos de automação pois permite separar o circuito de potência do de sinal. Isso é o que permite usar um pequeno módulo de 3.3V para acionar uma carga de 12V e que consume vários amperes de corrente elétrica.
O relé é constituído de uma bobina de acionamento que ao ser energizada, fecha um contato. São 5 pinos principais:
A designação dos pinos nem sempre é essa, mas o importante é você saber que são esses 5 pinos os principais do relé. Para nossa aplicação vamos usar um módulo relé de 4 canais 5v com optoacoplador. Uma descrição detalhada sobre ele pode ser vista no post sobre módulo relé para automação residencial.
Por fim, a carga que iremos acionar será uma lâmpada LED de 12V. Essa mesma lâmpada foi usada no artigo sobre controle de luminosidade com sensores LDR. Trata-se de um conjunto de LEDs de potência acionados por uma fonte externa de 12V. A carga poderia ser uma luminária comum ligada à tensão da rede(127V/60Hz) ou qualquer outra.
Materiais necessários para o projeto de Automação Residencial com ESP01
O circuito é mostrado abaixo. Primeiro mostramos o circuito para gravação do firmware.
Para entender essa montagem em detalhes, confira o post sobre como fazer a atualização do firmware do ESP-01.
Agora, o circuito que vamos usar para acionar a nossa carga.
Repare que o transistor é usado como uma chave para ligar e desligar o relé com uma fonte externa de 5V, pois o módulo relé utilizado é alimentado com 5V. Note também que não nenhum Arduino ou outra placa de processamento, somente o ESP-01. Usamos o seu GPIO02 para comandar o relé, sem a necessidade de circuitos de processamento adicionais.
Para o circuito de acionamento, é necessário que o ESP já esteja com o software embarcado. Atente-se para os valores dos resistores usados para fazer o transistor como chave. Na ligação acima utilizou-se um BC237 NPN. Caso você utilize um PNP ou algum outro modelo, pode ser que seja necessário ajustar as resistências. Uma calculadora online para a resistência de base pode ser encontrada aqui. Mais informações sobre como utilizar o BJT como uma chave podem ser encontradas aqui.
Do ponto de vista de software, dois pontos são importantes de serem destacados. O primeiro é que será utilizada a biblioteca ESP8266WiFi.h. E segundo, é preciso que você tenha instalado na sua IDE arduino os pacotes referentes ao ESP8266. A IDE Arduino será usada apenas como ferramenta de programação, por praticidade.
Para instalar os pacotes do ESP8266, confira o artigo sobre como atualizar o firmware do módulo, lá descrevemos passo a passo como fazer esse procedimento.
No mais, o código em si é relativamente simples. A versão original desse programa foi desenvolvida por Robin Thomas. A versão abaixo foi adaptada para as nossas necessidades e explicada passo a passo. Veja:
#include <ESP8266WiFi.h> #define LoadPin 2// GPIO2 const char* ssid = "SuaRedeWiFI";//type your ssid const char* password = "SuaSenha";//type your password WiFiServer server(80);//Service Port int value = LOW; void setup() { Serial.begin(115200); delay(10); pinMode(LoadPin, OUTPUT); digitalWrite(LoadPin, LOW); // Connect to WiFi network Serial.println(); Serial.print("Conectando na rede: "); Serial.println(ssid); WiFi.begin(ssid, password); delay(500); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("Conectado!"); //Inicializa o servidor server.begin(); Serial.println("Servidor Inicializado"); // Imprime o endereco IP Serial.print("Utilize essa URL: "); Serial.print("http://"); Serial.print(WiFi.localIP()); Serial.println("/"); } void loop() { // Verifica se o cliente está conectado WiFiClient client = server.available(); if (!client) { return; } //Aguarda envio de dados pelo cliente while (!client.available()) { delay(1); } //LE a primeira linha da requisicao String request = client.readStringUntil('\r'); client.flush(); //aciona a luminaria led de acordo com os dados recebidos if (request.indexOf("/Carga=ON") != -1) { Serial.println(request); digitalWrite(LoadPin, HIGH); value = HIGH; } if (request.indexOf("/Carga=OFF") != -1) { Serial.println(request); digitalWrite(LoadPin, LOW); value = LOW; } //envia mensagem de resposta client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.print("Status da carga: "); if (value == HIGH) { client.print("On"); } else { client.print("Off"); } //Mensagem que aparece no site client.println("<br><br>"); client.println("Clique <a href=\"/Carga=ON\">here</a>para ligar<br>"); client.println("Clique <a href=\"/Carga=OFF\">here para desligar<br>"); client.println("</html>"); delay(1); Serial.println(""); }
Todo o código da função void setup() é padrão e muito utilizado em vários exemplos nativos da IDE Arduino. A documentação da biblioteca ESP8266WiFi.h apresenta as mesmas linhas como código base para se conectar a qualquer rede WiFi. Recomendamos a leitura da documentação da biblioteca, é a melhor referência para se trabalhar com esse código e desenvolver outros mais que utilizem a mesma biblioteca.
Na função Void Loop(), verificamos constantemente se o client, que no caso é o ESP recebeu alguma informação do Acess Point ao qual está conectado. Repare que se o client não estiver conectado, é dado um “return” para sair da função. Caso esteja conectado, o código vai para um while() que são termina quando o client recebe alguma informação.
A partir daí, as linhas de código basicamente tem a função de separar os bytes da mensagem recebida e fazer o acionamento da carga conforme o que foi recebido. As diversas chamadas da função client.println imprimem no browser as informações necessárias para você itneragir com o ESP, conforme mostrado na tela abaixo:
Essa página é a utilizada para enviar os dados de acionamento ou desligamento da carga para o ESP. O roteiro para você testar é o seguinte:
Em alguns casos, a ativação do relé pode ser com terra, ou seja, ao invés de enviar um sinal de nível alto, você deve enviar um sinal de nível baixo para ativar o relé(fechar o contato NA). Se seu acionamento estiver invertido, basta atualizar o software mudando onde está “clique aqui para ativar” para “clique aqui para desativar” e vice-versa.
Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!
Gostou da postagem? Conectando seu ESP à sua rede local você pode fazer muitas coisas mais. Pode incrementar o exemplo que acabou de aprender para acionar outras cargas ou enviar informações sobre o estado de algum sensor para o browser de internet, por exemplo. Algumas vezes a ligação do ESP pode apresentar probleminhas. Em geral, lembre-se sempre de conferir a velocidade da sua interface serial(na maioria das vezes é 115200). Os terras das diferentes fontes de alimentação devem estar conectados. Utilize sempre uma fonte externa para o ESP(não dá pra usar o 5V de um arduino, por exemplo).
Qualquer dúvida, deixe nos comentários!
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!