Recebimento de dados via wifi utilizando esp8266 - MakerHero

Recebimento de dados via wifi utilizando esp8266 2

Se você abrir o seu navegador de internet, digitar placa de desenvolvimento e apertar enter, irão aparecer inúmeras opções. Cada uma delas possui alguma característica que a torna diferente das demais. Por isso, escolher com qual delas você irá fazer o seu projeto se tornou uma tarefa nada fácil. É preciso parar e analisar se ela é ou não a ideal para a sua aplicação. O intuito deste artigo é te convencer do enorme potencial da placa de desenvolvimento NodeMCU ESP8266 quando o assunto é envio e recebimento de dados via wifi.

O microcontrolador ESP8266 foi criado pela empresa chinesa Espressif System em 2014. Na época do lançamento, o objetivo da empresa era utilizar o chip somente em tablets e celulares. Porém, assim que a Espressif criou o seu firmware, ele virou uma febre entre os amantes de eletrônica.

Placa de desenvolvimento NodeMCU ESP8266
Placa de desenvolvimento NodeMCU ESP8266

 

A principal vantagem desta placa em relação a outros microcontroladores convencionais é já possuir um módulo wifi acoplado. Em aplicações que requerem conexão a uma rede wifi, isto ajuda e muito!

Confira algumas outras especificações:

  • Wireless padrão 802.11 b/g/n
  • Antena embutida
  • Conector micro-usb
  • Modos de operação: STA/AP/STA+AP
  • Suporta 5 conexões TCP/IP
  • Número de portas GPIO: 11
  • GPIOs com funções de PWM, I2C e SPI
  • Tensão de operação: 4,5 à 9 V
  • Taxa de transferência: 110 à 460800 bps
  • Suporta upgrade remoto de firmware
  • Conversor analógico digital

Viu só! São muitas características interessantes. Por este motivo, nós utilizamos esta placa de desenvolvimento no protótipo elétrico da equipe Cheetah E-Racing. Lá, ela é usada na placa de telemetria traseira e é a responsável por receber e enviar nada menos que 14 dados diferentes! Estes dados são enviados via wifi para o sistema supervisório, onde tanto o piloto quanto o restante poderão verificá-los.

Página do sistema supervisório da equipe Cheetah E-Racing
Página do sistema supervisório da equipe Cheetah E-Racing

Bom, você deve estar se perguntando o que vamos fazer. Vamos ao que interessa. Nós faremos uma pequena aplicação de envio e recebimento de dados via wifi utilizando o ESP8266. Basicamente, nós seremos capazes de acender e apagar um led através de um WEB Server. Além disso, a todo momento, nós poderemos verificar em qual estado o led se encontra.
Ficou curioso? Continue lendo!

Montagem do circuito

O circuito que utilizaremos neste nosso projeto é muito fácil de ser montado e não necessita de muitos componentes. Vamos precisar de:

  • Placa de desenvolvimento NodeMCU ESP8266
  • 1 resistor de 220Ω
  • 1 led
  • Jumpers

A montagem deve ser feita conforme mostra a figura a seguir:

Montagem do circuito
Montagem do circuito

Programação com IDE do Arduino

Atualmente, existe uma infinidade de plataformas de desenvolvimento que podem ser utilizadas para programar o ESP8266, por exemplo, Espruino (linguagem JavaScript), ESPlorer IDE (linguagem LUA) e o Arduino IDE (linguagem C/C++).
Por ser amplamente conhecido e de fácil utilização, optamos por utilizar o Arduino IDE. Porém, não é só sair programando! Antes de qualquer coisa, é preciso fazer algumas configurações no IDE.

Com o Arduino IDE aberto, clique em Arquivo 🡪 Preferências.

Indicação do caminho Arquivo 🡪 Preferências
Indicação do caminho Arquivo 🡪 Preferências

Na tela seguinte, cole a URL a seguir no campo URLs Adicionais de Gerenciadores de Placas: http://arduino.esp8266.com/stable/package_esp8266com_index.json

Sua tela ficará assim:

Indicação do campo URLs Adicionais de Gerenciadores de Placas
Indicação do campo URLs Adicionais de Gerenciadores de Placas

Deu tudo certo até aqui? Sim? Ótimo! Clique em OK e volte para a tela principal da IDE.

Agora, clique em Ferramentas 🡪 Placa 🡪 Gerenciador de Placa.

Indicação do caminho Ferramentas 🡪 Placas 🡪 Gerenciador de Placa
Indicação do caminho Ferramentas 🡪 Placas 🡪 Gerenciador de Placa

No campo de pesquisa, busque por esp8266 by ESP8266 Community e instale o pacote clicando em Instalar.

Pacote esp8266 by ESP8266 Community
Pacote esp8266 by ESP8266 Community

Esta tarefa pode levar alguns minutos. Assim que a instalação terminar, aparecerá a mensagem INSTALLED na sua tela.

Pacote esp8266 by ESP8266 Community instalado
Pacote esp8266 by ESP8266 Community instalado

Algum problema? Não? Maravilha! Para verificar se tudo deu certo, clique em Ferramentas 🡪 Placas. Em seguida, busque pela placa NodeMCU (ESP-12E Module).

Indicação do caminho Ferramentas 🡪 Placas 🡪 NodeMCU (ESP-12E Module)
Indicação do caminho Ferramentas 🡪 Placas 🡪 NodeMCU (ESP-12E Module)

Se você chegou até aqui, a partir de agora, já pode utilizar o Arduino IDE para programar o seu ESP8266!

Código desenvolvido

O código desenvolvido pode ser visto a seguir. Ao longo da programação, foram feitos diversos comentários com o intuito de explicar o que foi feito e facilitar o seu entendimento.

//Inclusão das bibliotecas
#include <ESP8266WiFi.h>
 
const char* ssid = "Cheetah E-Racing"; //Nome da Rede
const char* password = "12345678"; //Password da rede
 
int ledPin = 16; //GPIO16 do ESP8266 e D0 do NodeMCU
 
WiFiServer server(80); //Porta 80
 
void setup() 
{
  Serial.begin(115200);
  delay(10);
  pinMode(ledPin, OUTPUT); //Define o D0 como saída
  digitalWrite(ledPin, LOW); //O LED começa desligado
 
  // Comunicação com a rede WiFi
  Serial.println();
  Serial.println();
  Serial.print("Connecting to "); //Mensagem apresentada no monitor serial
  Serial.println(ssid); //Apresenta o nome da rede no monitor serial
  WiFi.begin(ssid, password); //Inicia a ligação na rede
 
  while(WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    Serial.print("."); //Enquanto a ligação não for feita com sucesso é apresentada uma sucessão de “.” no monitor serial
  }
 
  Serial.println("");
  Serial.println("WiFi connected"); //Se a ligação é feita com sucesso é apresentada esta mensagem no monitor serial
  
  // Servidor
  server.begin(); //Comunicação com o servidor
  Serial.println("Servidor iniciado"); //É apresentado no monitor serial que o servidor foi iniciado
 
  //Impressão do endereço IP
  Serial.print("Use o seguinte URL para a comunicação: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP()); //Abrindo este endereço de IP no seu navegador te conduzirá a página HTML para controle do led
  Serial.println("/");
}
 
void loop() 
{
  //Verifica se o cliente está conectado
  WiFiClient client = server.available();
 
  if(!client)
  { 
    //Se o cliente não estiver conectado ao servidor, executa este ciclo até estar conectado
    return;
  }
  
  //Espera até o cliente enviar dados
  Serial.println("novo cliente"); //Apresenta esta mensagem quando o cliente se conecta ao servidor
 
  while(!client.available())
  {
    delay(1);
  }
 
  //Lê a primeira linha do pedido
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  //Operação do pedido
  int value = LOW;
  if(request.indexOf("/LED=ON") != -1)  
  {
    digitalWrite(ledPin, HIGH); //Se o pedido no LedPin for LED = ON, acende o led
    value = HIGH;
  }
 
  if(request.indexOf("/LED=OFF") != -1)  
  {
    digitalWrite(ledPin, LOW); //Se o pedido no LedPin for LED = OFF, apaga o led
    value = LOW;
  }
 
  //Inicialização da página HTML
 
  //Retorno do 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("<center><font size='5'><b>CHEETAH E-RACING</b></font></center>");
  client.println("<br><br>");
  client.print("<center>Estado do LED: </center>");
 
  if(value == HIGH) 
  { 
    //Se está ligado apresenta “ligado”
    client.print("<center>ligado</center>");
  } 
  
  else 
  {
    //Se está desligado apresenta “desligado”
    client.print("<center>desligado</center>");
  }
 
  client.println("<br><br>");
  client.println("<a href=\"/LED=ON\"\"><center><button>Ligar</button></center></a>"); //Ligar o led corresponde a "ligar"
  client.println("<a href=\"/LED=OFF\"\"><center><button>Desligar</button></center></a><br />");  //Desligar o led corresponde a "desligar"
  client.println("</html>");
 
  delay(1);
 
  Serial.println("Cliente desconectado");
  Serial.println("");
}

Compilação

Chegamos na melhor parte: a hora de colocar a mão na massa! No seu Arduino IDE, crie um novo arquivo e cole lá o código mostrado anteriormente.
Em seguida, altere o nome e a senha da rede wifi que estão no programa para as informações da rede que você está utilizando. Esta etapa é muito importante! Sem ela, o projeto não irá funcionar.

Por fim, selecione a placa NodeMCU (ESP-12E Module) e a porta USB adequada.

Agora, carregue o código na placa. Após o carregamento, abra o monitor serial. Se tudo deu certo, uma tela como esta deve aparecer.

Monitor serial após o carregamento do código na placa
Monitor serial após o carregamento do código na placa

Página HTML para controle do LED

Conforme falamos, o controle do led vai ser feito através de um WEB Server. Para acessa-lo, copie o link que está no monitor serial e cole no seu navegador de internet.
O acesso pode ser feito através de um computador ou celular. Em qualquer uma das duas formas, o dispositivo deve estar conectado à mesma rede wifi que o ESP8266. Se estiverem conectados em rede diferentes, você não conseguirá fazer o controle do led!

Sua tela ficará assim:

WEB Server indicando estado do led como desligado
WEB Server indicando estado do led como desligado

 

Led desligado
Led desligado

Nesta tela, podemos verificar o estado do led. Além disso, existem dois botões que permitem ligar ou desligar o led. Hora de brincar um pouco! Clique no botão ligar e veja o que acontece.

Uma tela como esta deverá aparecer, desta vez indicando que o led está ligado. Ahhh, o led também deve ligar!

WEB Server indicando estado do led como ligado
WEB Server indicando estado do led como ligado

 

Led ligado
Led ligado

Agora, clique no botão desligar e veja o acontece.

Deu tudo certo? Sim? Que bom! Agora, faça modificações no código desenvolvido para incluir mais leds. Edite o WEB Server para ficar com a sua cara. Enfim, divirta-se!

Considerações finais

Escolher com qual placa de desenvolvimento você vai trabalhar nunca é uma tarefa fácil. Acredite: nós sabemos disto! Esperamos que com esta simples aplicação você tenha conseguido perceber o enorme potencial da placa de desenvolvimento NodeMCU ESP8266 quando o assunto é envio e recebimento de dados via wifi. Não é à toa que a utilizamos na equipe Cheetah E-Racing! Ficou com alguma dúvida? É só revisar este material.


Esse conteúdo é resultado da parceria da MakerHero com a Cheetah E-Racing. Curtiu o conteúdo? Então deixe seu comentário abaixo! E não esqueça de acompanhar a Cheetah E-Racing nas redes sociais.

Faça seu comentário

Acesse sua conta e participe

2 Comentários

  1. Dessa forma, como ele edita a url do navegador pelo href, enquanto não for apertado outro botão ele vai ficar executando aquele mesmo código, teria alguma forma de cada vez que apertar o botão seja chamado o código somente uma vez, sem ser em loop?

    1. Olá.

      Para isso você teria que migrar essa rotina para fora do loop e criar um laço de interrupção.

      Dessa forma, independente em qual linha de código ele esteja durante a execução, ao apertar o botão, ele irá executar a rotina.

      Att.
      Vitor Mattos.
      Suporte Técnico MakerHero.