Projeto Esp32 Wifi para Automação no Controle de Relés pela Internet

Atualmente a tecnologia iot (internet das coisas) esta se expandindo de uma forma incrível, possibilitando que o acesso a produtos de baixo custo e alto despenho chegue às mãos dos usuários finais mais rapidamente, permitindo um salto no desenvolvimento do mundo Maker. Hoje em especial, vamos trabalhar com um Projeto Esp32 Wifi para Automação no Controle de Relés pela Internet.

Vale mencionar que o módulo NodeMCU ESP32 Iot com WiFi e Bluetooth apresenta muitos recursos que podem ser usufruídos imediatamente, o que vem a possibilitar maiores formas de uso e interação com sensores e dispositivos eletrônicos, permitindo automatizar quase tudo.

Nesse post vai ser possível aprender a controlar um Módulo Relé 5v 10a 4 Canais por meio dia uma Rede Wireless gerada pelo esp32 através do endereço IP.

 

Materiais Necessários:

Usaremos os seguintes materiais nesse tutorial:

• 1 x Módulo Relé 5v 10a 4 Canais Com Optoacopladores;

• 1 x Esp32 Nodemcu Iot;

• 1 x Jumpers;

• 1 x Protoboard.

 

Esquemático do Projeto Esp32 Wifi

A ligação do módulo rele ao Esp32 é muito simples. A alimentação do circuito pode ser feita tanto por Usb quanto por fonte de alimentação.

Esquemático do Projeto Esp32 Wifi com Reles para Automação

Esquemático do Projeto Esp32 Wifi com Reles para Automação

Em questão das conexões serão usados os pinos Vin e Gnd para alimentar o circuito e as GPIOs D0 , D15 , D4 , D2 para controle dos reles.

 

Teste Prático

 

 

Código

 

Introdução

Ao ligar o esp32 ele irá gerar uma rede com nome e senha definidos pelo leitor, enquanto isto o esp32 irá mandar ao monitor serial do computador o seu endereço IP que é o que iremos utilizar para controlar os reles, nos conectando a esta rede e digitando no web navegador do seu celular, tablet ou computador este IP dito no monitor serial e lá estará os botões para ligar ou desligar os mesmos, que poderão ser utilizados para acionar lâmpadas, ligar eletrodomésticos, equipamentos, etc.

Tudo será feito por um WebServer que será criado. Mas o que é um WebServer? Explicando de forma simples é um programa que responde às solicitações dos clientes, fazendo o processamento de códigos e alterações de páginas web e enviando uma resposta de volta ao cliente.

O que é um cliente? Cliente vai ser quem acessar o WebServer e fazer requisições, pode se ter vários clientes ao mesmo tempo fazendo requisições. Que podem ser celulares, tablets, computadores e até mesmo equipamentos eletrônicos como outros esp32 , Raspberry, etc.

 

Cabeçalho

Primeiramente é necessário incluir as bibliotecas, após iremos fazer a definição dos pinos de cada rele com o valor das portas GPIOs conectadas ao esp32 e aos reles. Caso você queira mudar o pino, basta alterar o valor dessas definições e o código continuará funcionando perfeitamente.

Também iremos criar 4 variáveis booleanas para fazer a inversão de estado dos reles. Em seguida passamos os parâmetros para a configuração da rede que deverá ser configurado. Por fim, na última linha do cabeçalho iremos definir a porta que o servidor irá utilizar. Geralmente é utilizado a porta 80. Veja o trecho descrito abaixo:

 

Void setup()

Feito isto vá ao void setup() aonde será configurada as GPIOs dos reles como saída, iniciar o monitor serial para podermos visualizar a execução do nosso programa, e a rede com o SSID e senha definidos anteriormente e mostrar no monitor serial o IP da rede que será necessário para acessar a página web, por fim inicia o servidor e mostra na serial.

 

Void loop()

Aqui no começo do void loop() já vamos verificar e armazenar na variável client se tiver clientes conectados na rede com dados a serem transmitidos.

Iremos verificar se tem clientes conectados na nossa rede. Se tiver, vamos imprimir no monitor serial avisando. E criaremos uma String para manter os dados recebidos do cliente.

Enquanto tiver um cliente conectado iremos ficar na estrutura de repetição while.

Se tiver informações para ler do cliente, ou seja, se ele se conectou na rede e esta tentando acessar o IP por exemplo, após iremos criar um variável char para armazenar essas informações e mostramos no monitor serial. Se essa informação for um caractere de nova linha executaremos o if.

Em seguida iremos verificar se a mensagem terminou e não tem mais dados sendo recebidos.

Feito isto iremos começar a comunicação por http e dizer que a comunicação começou com sucesso e mandaremos a mensagem (HTTP / 1.1 200 OK) e diremos ao cliente que tipo de conteúdo que está por vir e, em seguida, uma linha em branco notificando-o de que a mensagem foi recebida com sucesso.

Bom agora iremos mandar as informações ao navegador do cliente como deve ser a nossa página e dizer oque fazer quando clicar em cada botão da página.

As funções cliente.print() irão enviar 5 comandos/tags em HTML ao navegador, que caso você queira alterar, pode programar o HTML ao seu gosto.

A primeira parte iremos definir o estilo, ou seja: cores, tamanho das letras, etc. E também iremos criar endereços no nosso webserver, que ao serem acessados irão alterar o estado dos reles.

Após isto iremos imprimir uma linha em branco para o nosso cliente, em resposta a comunicação http (dizendo que a mesma foi completa). E sairemos do laço while.

Se tiver uma nova linha então iremos limpar a linha atual.

Se o que tivermos for qualquer outra coisa diferente de um caractere de retorno de linha \r iremos adicionar ao final da nossa variável currentLine.

Feito isto, verificaremos se a requisição feito pelo cliente foi de trocar o estado de algum que pode ser /T1 ,/T2 ,/T3 ou /T4 que ira inverter o estado do rele correspondente, Como? se estiver ligado ele vai dizer a sua variável o seu estado no caso ligado e quando for pedido para alterar o estado verifica se estava ligada ou desligada e inverte o estado que no caso desligaria o rele.

Por fim, iremos terminar a conexão com o cliente através da função cliente.stop() e mostraremos na serial que o cliente foi desconectado.

O código completo do nosso programa de controle de reles se encontra abaixo.

 

Demonstração

Bom, após programarmos o Esp32 com o programa acima iremos ver no monitor serial as informações do nosso sistema, entre ela o endereço IP para acessar o nosso WebServer.

O acesso pode ser feito tanto pelo computador quanto o celular ou tablet.

Após conectarmos na nossa rede iremos acessar um web navegador e digitar o IP e você devera ver uma tela com opções para controlar os nossos reles. No celular você deverá ver algo assim:

Projeto ESP32 Controle de Rele Versão Mobile

Projeto ESP32 Controle de Rele Versão Mobile

 

Já acessando pelo computador, a página será assim:

 

Projeto ESP32 Controle de Rele Versão Desktop

Projeto ESP32 Controle de Rele Versão Desktop

 

Conclusão

Por fim, este Projeto Esp32 Wifi para Automação no Controle de Relés pela Internet propomos um controle por protocolo http, foi um código que pode ser usado como base para ser desenvolvido sistemas mais complexos e com mais funcionalidades nos mais diversos tipos de automação residencial e projetos robóticos.

Em breve iremos ter mais tutoriais desenvolvidos com o esp32 NodeMCU. Aguarde e fique atento.

Categorias
ESP32

Programador com Enfase em Desenvolvimento de Sistemas Embarcados, Automação Residencial e Industrial, Entusiasta de Eletrônica Digital e Analógica e Amante do Mundo IoT e Maker.
29 Número de Comentários
  • Hugo
    8 fevereiro 2020 at 21:02
    Deixe seu Comentário

    Boa noite
    Excelente o projeto. Porém fiquei com uma dúvida na questão física… o Esp32 trabalha com tensão menor que a tensão do relé. Como corrigir isto?

    • Matheus Gebert Straub
      13 fevereiro 2020 at 17:36
      Deixe seu Comentário

      Boa Tarde Hugo! A Usinainfo está com uma linha exclusiva de módulos relé com tensão de funcionamento 3V, CLIQUE AQUI para conferir.

  • heliton
    11 fevereiro 2020 at 16:04
    Deixe seu Comentário

    Quando abro o monitor serial apareci apenas cliente desconectado nao tem como ver o endereço ip

    • Equipe Usinainfo
      18 fevereiro 2020 at 10:09
      Deixe seu Comentário

      Bom dia Heliton!
      Caso o dispositivo não tenha retornado nenhum outro erro, é possível que o problema esteja em uma possível sobrecarga no seu dispositivo de emissão wi-fi, uma vez que a maioria dos roteadores tem limite de quantos dispositivos podem ser conectados simultaneamente. Caso tenha sido exibido algum outro código de erro, posso verificar qual o possível problema.

  • JARDEL SOUSA GOMES
    10 março 2020 at 08:55
    Deixe seu Comentário

    muito bom, mas faltou um feedback do servidor para mostrar o atual estado do rele

    • Gustavo Rodolfo Stroschon
      7 abril 2020 at 15:33
      Deixe seu Comentário

      Que bom que gostou!!

      Muito obrigado pela sugestão, certamente estarei aplicando nos próximos projetos que necessitarão de controle Web.
      Fique ligado nos próximos artigos do blog.

  • alexandre
    18 março 2020 at 21:02
    Deixe seu Comentário

    onde baixar a lib

    • Gustavo Rodolfo Stroschon
      7 abril 2020 at 15:37
      Deixe seu Comentário

      Olá Alexandre, Tudo bem?
      As bibliotecas utilizadas nesse artigo são bibliotecas padrões do esp32 caso você esteja encontrando erros, pode tentar reinstalar a placa esp32 na sua IDE do Arduino, ou atualizar o pacote da placa no Arduino!

  • Nelson Silva
    3 abril 2020 at 19:46
    Deixe seu Comentário

    Gostei muito mas não encontreia biblioteca WiFiAP.h

    • Gustavo Rodolfo Stroschon
      7 abril 2020 at 15:29
      Deixe seu Comentário

      Olá, Tudo bem?

      As bibliotecas utilizadas nesse artigo são bibliotecas padrões do esp32 caso você esteja encontrando erros, pode tentar reinstalar a placa esp32 na sua IDE do Arduino, ou atualizar o pacote da placa no Arduino!
      Astou a disposição para qualquer duvida!

  • Ronni Chiabotto
    13 maio 2020 at 18:37
    Deixe seu Comentário

    Hola Gustavo, espero que esteja bem e em casa 😉
    Estou tentando fazer funcionar este sketch mas como aconteceu con os outros compis a biblioteca WiFiAP.h ñ reconhece por ñ tenerla instalada, como sugeriste aos anteriores ja reinstalei a placa ESP32 e atualizei geral… minha IDE é a 1.8.12
    Estive buscando esta biblioteca especifica mas ñ encontrei… poderia me ajudar porfa?
    Te agradeço.

  • Daniel Fernandes
    14 maio 2020 at 23:03
    Deixe seu Comentário

    Olá Gustavo, primeiramente, obrigado pelo projeto.
    Eu tenho um Módulo Relé de 8 Canais e gostaria de usá-lo com o seu código, portanto, somente devo acrescentar mais 4 linhas iguais dos comandos do seu código? Obrigado

    • Gustavo Rodolfo Stroschon
      19 maio 2020 at 23:00
      Deixe seu Comentário

      Olá Daniel, tudo bem?

      Para utilização de mais reles devem ser feitas algumas alterações, mas não é muito difícil, deve ser feito alterações em 2 partes: “client.print(“Rele 4. “);” e “if (currentLine.endsWith(“GET /T4″)) {

      if (Estado_Do_Rele4 == LOW) {
      digitalWrite(Rele4, HIGH);
      Estado_Do_Rele4 = HIGH;
      } else {
      digitalWrite(Rele4, LOW);
      Estado_Do_Rele4 = LOW;
      }
      }”,
      Esses trechos devem ser replicados e alterados devidamente(variáveis e os endereços http[os trechos que estão escritos “T4”]).

      Espero que ajude! abs.

  • Ronni Chiabotto
    15 maio 2020 at 06:58
    Deixe seu Comentário

    Oi Gustavo por aquí ja começamos desescalada da quarentena e o numero de contaminados baixa dia a dia, espero que vcs ai tbm se encontre em esta situação muy pronto.
    Vou fazer estas alterações que me sugeriste e estou seguro que vai funcionar.
    Já te comentarei e muito obrigado por responderme.

    • Gustavo Rodolfo Stroschon
      19 maio 2020 at 23:27
      Deixe seu Comentário

      Que bom que já está passando esta fase ai Ronni!
      Sinta-se a vontade para comentar, pois assim se mais alguém tiver este problema já saberei como orientar para corrigir!
      Até! =)

  • Leonardo
    4 junho 2020 at 15:11
    Deixe seu Comentário

    Olá. Como deve ser a SAÍDA de alimentação do Esp para os Reles caso eu deseje alimentar o ESP através do microUSB?

    • Matheus Gebert Straub
      15 junho 2020 at 10:36
      Deixe seu Comentário

      Bom Dia Leonardo! Mesmo com a alimentação USB, para este projeto o esquema de ligação não irá alterar-se, se manterá o mesmo do descrito no esquema de ligação.

  • FLávio Henrique
    22 junho 2020 at 10:30
    Deixe seu Comentário

    Bom dia amigo, eu segui seu código e fiz alterações para usar apenas 2 relés. Porém eu notei que ao tentar acesso com mais de 1 cliente, ocorre algum problema e não aceita os comandos vindos do segundo cliente. Fica todo bugado e não consegui acertar isso.
    Teria alguma luz sobre isso??

  • Wallace
    24 junho 2020 at 18:13
    Deixe seu Comentário

    Boa tarde! Quando abro meu monitor serial aparece um loop infinoto de “Cliente desconectado.”. É tão rápido que não consigo nem ver o ip…

    • Matheus Gebert Straub
      30 junho 2020 at 17:04
      Deixe seu Comentário

      Boa Tarde Wallace! Neste caso, provavelmente o dispositivo não está se conectando à rede desejada, caso queira parar este loop, basta desmarcar o campo de auto-rolagem.

  • carlos alves
    26 junho 2020 at 19:15
    Deixe seu Comentário

    ta dando este erro e nao sei como resolve. pode me ajudar

    exit status 1
    ‘class WiFiClass’ has no member named ‘softAP’

  • Rafael Ferreira
    8 julho 2020 at 22:51
    Deixe seu Comentário

    No meu projeto está dando um erro “Cliente desconectado”, coloquei tudo certo no usuário e senha da rede wi-fi, alguém poderia me ajudar?

    • Matheus Gebert Straub
      29 julho 2020 at 10:31
      Deixe seu Comentário

      Bom Dia Rafael! Por acaso a sua rede não possui IP fixo? Caso a SSID e Senha estejam de acordo com o estabelecido pela sua rede (devem ser preenchidos tal qual a rede, respeitando espaços, letras maiúsculas e minúsculas), verifique algum possível conflito de IP.

  • Ricardo
    1 novembro 2020 at 22:20
    Deixe seu Comentário

    Boa noite!!
    No meu projeto está aparecendo no monitor serial “Cliente desconectado”. Fiz um teste com outro programa para acender o Led da placa via web, funcionou normalmente a conexão. O que pode estar ocorrendo neste projeto que impede que conexão seja estabelecida? Se alguém poder ajudar ficarei muito agradecido.

    • Matheus Gebert Straub
      27 novembro 2020 at 11:07
      Deixe seu Comentário

      Bom Dia Ricardo! Este projeto utiliza IP Fixo para conectar-se na rede, diferente de outros códigos que conectam-se através de IP Estático, verifique se o código de IP incluído no projeto está disponível em sua rede e se as configurações também estão de acordo. Caso o problema persista, uma opção é alterar os parâmetros de conexão para Estático através da devida alteração nas respectivas variáveis.

  • CESAR
    8 setembro 2021 at 12:37
    Deixe seu Comentário

    OLA A TODOS,ESTE PROGRAMA ESTA COM ALGUNS ERROS

    • Matheus Gebert Straub
      15 setembro 2021 at 14:25
      Deixe seu Comentário

      Olá Cesar! Poderia especificar melhor quais os erros que encontrou?

    Deixe seu Comentário

    *

    *

    Sobre nós

    Hoje a Usinainfo é um dos maiores ecommerces de Ferramentas, Peças para Eletrônica, Componentes Eletrônicos, Sensores e Arduino do Brasil, contando com uma grande diversidade de produtos na linha de eletrônica.

    Sugestões

    Artigos Relacionados