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.
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.
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:
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.
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:
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.
No campo de pesquisa, busque por esp8266 by ESP8266 Community e instale o pacote clicando em Instalar.
Esta tarefa pode levar alguns minutos. Assim que a instalação terminar, aparecerá a mensagem INSTALLED na sua tela.
Algum problema? Não? Maravilha! Para verificar se tudo deu certo, clique em Ferramentas 🡪 Placas. Em seguida, busque pela placa 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.
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:
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!
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.
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?
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.