Automação Residencial

ESP01 para Automação Residencial

Eletrogate 19 de dezembro de 20178 min

Introdução

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.

Módulo ESP2866

Módulo ESP2866

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:

Pinout ESP-01

Pinout ESP-01. Créditos: Garagelab

São 8 pinos, confira a descrição de cada um deles:

  • RXD e TXD: São os pinos para comunicação serial.
  • GPIO0 e GPIO2: São os pinos de propósito geral.
  • GND: Referência da alimentação.
  • VCC: Sinal de alimentação positivo de 3.3V.
  • RST: Pino de reset.
  • CH_PD: Chip Power Down

Os pontos importantes a serem lembrados são:

  • Caso o pino RXD esteja conectado a um TXD de 5V, é necessário usar um conversor de nível lógico ou um divisor de tensão. Alguns projetos na internet não fazem essa conversão, mas o risco de prejuízo é sempre seu. O correto é sempre usar os níveis lógicos adequados para cada circuito.
  • Para colocar o módulo em modo de gravação, é necessário conectar os pinos de uma forma especial. Esse circuito é explicado em detalhes no nosso post sobre como atualizar o firmware do ESP-01, e será usado por nós para carregar nosso programa.
  • Reforçamos que o módulo trabalha com 3.3V. Além disso, é mais adequado usar uma fonte externa para alimentá-lo. Usar o 3.3V de um Arduino, por exemplo, como fonte de alimentação, não é uma boa opção pois o ESP facilmente consome mais corrente do que o Arduino pode fornecer. Muitos problemas que aparecem em fóruns e sites de eletrônica são resolvidos usando-se uma alimentação estável e adequada(fonte externa de 3.3V). Nesse artigo usaremos uma fonte Minipa MPS3005, regulada para 3.3V.

Observação (de Gustavo Murta) :

  • Não use o 3,3V do conversor USB Serial e nem do Arduino UNO para alimentar o ESP8266 ! Os reguladores não tem capacidade para suprir o consumo do mesmo. Use uma fonte externa de 3,3V.

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.

Módulo relé e carga a ser acionada

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:

  • Pinos 1 e 2: Alimentação da bobina de acionamento.
  • Pino 3: Entrada do sinal de potência a ser chaveado.
  • Pinos 4 e 5: Contatos de saída. Um é NA(normalmente aberto) e outro é NF(normalmente fechado).

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.


Aspectos de Hardware

Materiais necessários para o projeto de Automação Residencial com ESP01

cta_cart

O circuito é mostrado abaixo. Primeiro mostramos o circuito para gravação do firmware.

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.

Circuito para acionamento de cargas com ESP01

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.


Aspectos de Software

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:

Interface online para ativar a carga via WiFi

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:

  1. Monte o circuito de gravação/update de firmware do ESP.
  2. Carregue o código do post. Lembre-se de alterar o nome da rede e a senha no código para que seu ESP possa se conectar à sua rede local.
  3. Abra a interface serial da IDE arduino. Se tudo estiver certo, o seu ESP se conectará à sua rede local e o endereço de IP atribuído a ele será apresentado na tela.
  4. Ligue o pino GPIO2 no circuito de acionamento. Não necessariamente você precisa desmontar o circuito de gravação, mas é necessário montar o circuito de acionamento e conectar o pino GPIO2 como mostrado no diagrama.
  5. Agora, energize o circuito de acionamento e digite o endereço de IP do seu ESP no seu browser de internet. A interface da imagem anterior será apresentada. Clicando nas mensagens corretas, você conseguirá acionar e desacionar seu ESP por essa página online.

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!


Conclusão

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!


Sobre o Autor


Vitor Vidal

Engenheiro eletricista, mestrando em eng. elétrica e apaixonado por eletrônica, literatura, tecnologia e ciência. Divide o tempo entre pesquisas na área de sistemas de controle, desenvolvimento de projetos eletrônicos e sua estante de livros.


Eletrogate

19 de dezembro de 2017

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!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!