- Descrição: O Interruptor Pulsador é um tipo de interruptor…

Webserver com o Shield WiFi ESP8266 para Arduino
Uma dificuldade muito comum encontrada por usuários que possuem o Shield WiFi ESP8266, é como colocá-lo em funcionamento junto ao Arduino, de forma que seja possível enviar e receber informações dos pinos digitais e analógicos da placa através da conexão WiFi e utilizando a serial nativa do Arduino para se comunicar com o shield. Diante desta dificuldade, resolvi fazer esta postagem para demonstrar como integrar as duas plataformas. Portanto, ao final desta publicação vamos ter um webserver rodando no Arduino e este servidor web poderá ser acessado através de uma página WEB, onde um LED poderá ser controlado.
Na postagem Conhecendo o Shield WiFi ESP8266 para Arduino foi feito um apanhado geral sobre a placa. Logo, recomendo que você leia a postagem caso ainda não tenha lido. Além disso, é extremamente importante que você leia também a postagem Shiald e Shield WiFi ESP8266? Será que tem diferença?, pois se tratando do Shield WiFi ESP8266 (também conhecido como ESP8266 ESP-12E UART Wireless WIFI Shield TTL Converter), é possível encontrar no mercado pelo menos três placas que aparentemente são iguais, mas na verdade estas placas possuem alguns pontos que as diferem, até mesmo na questão de funcionamento com o Arduino através de comunicação pela serial nativa.
Como requisito principal para prosseguir nesta publicação, será necessário que você leia a postagem Upgrade de Firmware no Shield WiFi ESP8266 para Arduino. Nela eu ensinei a instalar no Shield WiFi ESP8266 o firmware de comandos AT que é um requisito essencial para a maioria das bibliotecas de comunicação entre o ESP8266 e o Arduino. Depois de ler a postagem e fazer a atualização de firmware do seu shield, retorne para continuar.
Conforme eu já havia mencionado na publicação Comunicando o Shield WiFi ESP8266 com o Arduino através da Serial Nativa, para utilizar o Shield WiFi ESP8266 com o Arduino através da serial nativa (pinos D0 e D1), é necessário que um código seja carregado no shield e que no Arduino seja carregado um outro código para enviar, receber e interpretar os dados tráfegados através da serial nativa. No shield, podemos colocar um firmware de comandos AT e programar o Arduino para fazer o envio dos comandos para o shield com a finalidade de se conectar a uma rede WiFi e possibilitar controlar as entradas e saídas do Arduino.
Nesta publicação vamos utilizar a biblioteca WiFiESP, pois a mesma já conta com todas as funções necessárias para integrar o ESP8266 (Shield WiFi ESP8266 no nosso caso) ao Arduino e atribuir WiFi a placa. A biblioteca WiFiESP funciona através do envio de comandos AT, logo, a conexão a rede sem fio do roteador e toda solicitação feita ao servidor web resultará no envio de comandos AT ao shield.
Para que a biblioteca WiFiESP funcione, é necessário que a versão do firmware de comandos AT seja no mínimo a 0.25 ou superior. Portanto, se você não sabe a versão do firmware de comandos AT do seu shield, basta clicar AQUI e seguir os passos para atualizar a placa com um firmware que possui versão de comandos AT igual a 1.2.0.0 e em seguida retorne para continuar.
Uma coisa que identifiquei durante meus testes com o shield e o Arduino, é que pelo fato da comunicação entre eles ocorrer através da serial nativa (pinos D0 e D1), torna-se necessário que a serial seja de uso exclusivo para a comunicação entre eles. Logo, não recomendo o uso de “Serial.print() / Serial.println()” pra imprimir informações no monitor serial da IDE do Arduino ou em qualquer outro programa que exibe informações da serial.
Por padrão, a biblioteca WiFiESP é configurada para exibir na serial os erros, avisos e outras informações da comunicação entre o Arduino e o ESP8266. Conforme já informei antes, a serial deve ficar liberada para a comunicação entre o Arduino e o shield. Portanto, editei um arquivo da biblioteca e desabilitei a exibição de todas as informações na serial. As únicas informações que serão exibidas no monitor serial, são os comandos AT que a biblioteca envia ao shield para conectá-lo a rede sem fio ou os comandos AT para executar as solicitações feitas ao webserver.
Clicando AQUI você pode fazer o download da biblioteca WiFIESP modificada.
Se você não sabe como instalar bibliotecas na IDE do Arduino, basta clicar no link abaixo, seguir os passos, importar a biblioteca e retornar para continuar:
Arduino – Importando bibliotecas para a IDE
Na pasta de instalação da biblioteca, basta acessar o caminho “WiFiEsp-master\src\utility” e dentro dela há o arquivo “debug.h” que foi editado para desabilitar a exibição de informações na serial. Abrindo o aqruivo no Notepad++, por exemplo, temos as linhas 25, 26, 27, 28 e 29 que mostram uma numeração correspondente para os tipos de informações que serão exibidos no monitor serial. Veja que o número 0 desabilita a exibição de todas as informações no monitor serial. Por fim, na linha 32 configurei o “_ESPLOGLEVEL_” com valor 0:
Se deseja utilizar a biblioteca WiFiESP em outros projetos com ESP8266 e precisa das informações sendo exibidas no monitor serial, basta configurar o “_ESPLOGLEVEL_” com o valor 3 (valor padrão da biblioteca) e salvar o arquivo.
Considerando que o seu Shield WiFi ESP8266 já esteja com um firmware de comandos AT versão 0.25 ou superior, vamos prosseguir.
Acople o shield ao seu Arduino (Uno, Mega, Leonardo ou outra versão que permita acoplamento do shield), coloque todas as vias da DIP switch na posição OFF, conecte um LED entre o pino 13 e o GND, e conecte o cabo USB ao Arduino e ao computador:
Para esta postagem utilizei o Arduino Mega 2560, contudo, o resultado final será o mesmo caso você esteja utilizando outra placa Arduino que permita o acoplamento do shield.
Copie o código abaixo e cole na IDE do Arduino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
#include "WiFiEsp.h" //INCLUSÃO DA BIBLIOTECA NECESSÁRIA PARA FUNCIONAMENTO DO CÓDIGO char ssid[] = "NOME_DA_SUA_REDE_WIFI"; //VARIÁVEL QUE ARMAZENA O NOME DA REDE SEM FIO char pass[] = "SENHA_DA_SUA_REDE_WIFI";//VARIÁVEL QUE ARMAZENA A SENHA DA REDE SEM FIO int status = WL_IDLE_STATUS; //STATUS TEMPORÁRIO ATRIBUÍDO QUANDO O WIFI É INICIALIZADO E PERMANECE ATIVO //ATÉ QUE O NÚMERO DE TENTATIVAS EXPIRE (RESULTANDO EM WL_NO_SHIELD) OU QUE UMA CONEXÃO SEJA ESTABELECIDA //(RESULTANDO EM WL_CONNECTED) WiFiEspServer server(80); //CONEXÃO REALIZADA NA PORTA 80 RingBuffer buf(8); //BUFFER PARA AUMENTAR A VELOCIDADE E REDUZIR A ALOCAÇÃO DE MEMÓRIA int statusLed = LOW; //VARIÁVEL QUE ARMAZENA O ESTADO ATUAL DO LED (LIGADO / DESLIGADO) void setup(){ pinMode(LED_BUILTIN, OUTPUT); //DEFINE O PINO COMO SAÍDA (LED_BUILTIN = PINO 13) digitalWrite(LED_BUILTIN, LOW); //PINO 13 INICIA DESLIGADO Serial.begin(9600); //INICIALIZA A SERIAL WiFi.init(&Serial); //INICIALIZA A COMUNICAÇÃO SERIAL COM O SHIELD WIFI ESP8266 WiFi.config(IPAddress(192,168,0,110)); //COLOQUE UMA FAIXA DE IP DISPONÍVEL DO SEU ROTEADOR //INÍCIO - VERIFICA SE O SHIELD ESTÁ ACOPLADO AO ARDUINO, CONECTA A REDE SEM FIO E INICIA O WEBSERVER if(WiFi.status() == WL_NO_SHIELD){ while (true); } while(status != WL_CONNECTED){ status = WiFi.begin(ssid, pass); } server.begin(); //FIM - VERIFICA SE O SHIELD ESTÁ ACOPLADO AO ARDUINO, CONECTA A REDE SEM FIO E INICIA O WEBSERVER } void loop(){ WiFiEspClient client = server.available(); //ATENDE AS SOLICITAÇÕES DO CLIENTE if (client) { //SE CLIENTE TENTAR SE CONECTAR, FAZ buf.init(); //INICIALIZA O BUFFER while (client.connected()){ //ENQUANTO O CLIENTE ESTIVER CONECTADO, FAZ if(client.available()){ //SE EXISTIR REQUISIÇÃO DO CLIENTE, FAZ char c = client.read(); //LÊ A REQUISIÇÃO DO CLIENTE buf.push(c); //BUFFER ARMAZENA A REQUISIÇÃO //IDENTIFICA O FIM DA REQUISIÇÃO HTTP E ENVIA UMA RESPOSTA if(buf.endsWith("\r\n\r\n")) { sendHttpResponse(client); break; } if(buf.endsWith("GET /H")){ //SE O PARÂMETRO DA REQUISIÇÃO VINDO POR GET FOR IGUAL A "H", FAZ digitalWrite(LED_BUILTIN, HIGH); //ACENDE O LED statusLed = 1; //VARIÁVEL RECEBE VALOR 1(SIGNIFICA QUE O LED ESTÁ ACESO) } else{ //SENÃO, FAZ if (buf.endsWith("GET /L")) { //SE O PARÂMETRO DA REQUISIÇÃO VINDO POR GET FOR IGUAL A "L", FAZ digitalWrite(LED_BUILTIN, LOW); //APAGA O LED statusLed = 0; //VARIÁVEL RECEBE VALOR 0(SIGNIFICA QUE O LED ESTÁ APAGADO) } } } } client.stop(); //FINALIZA A REQUISIÇÃO HTTP E DESCONECTA O CLIENTE } } //MÉTODO DE RESPOSTA A REQUISIÇÃO HTTP DO CLIENTE void sendHttpResponse(WiFiEspClient client){ client.println("HTTP/1.1 200 OK"); //ESCREVE PARA O CLIENTE A VERSÃO DO HTTP client.println("Content-Type: text/html"); //ESCREVE PARA O CLIENTE O TIPO DE CONTEÚDO(texto/html) client.println(""); client.println("<!DOCTYPE HTML>"); //INFORMA AO NAVEGADOR A ESPECIFICAÇÃO DO HTML client.println("<html>"); //ABRE A TAG "html" client.println("<head>"); //ABRE A TAG "head" client.println("<link rel='icon' type='image/png' href='https://blogmasterwalkershop.com.br/arquivos/artigos/sub_wifi/icon_mws.png'/>"); //DEFINIÇÃO DO ICONE DA PÁGINA client.println("<link rel='stylesheet' type='text/css' href='https://blogmasterwalkershop.com.br/arquivos/artigos/sub_wifi/webpagecss.css' />"); //REFERENCIA AO ARQUIVO CSS (FOLHAS DE ESTILO) client.println("<title>MasterWalker Shop - Shield WiFi ESP8266 para Arduino</title>"); //ESCREVE O TEXTO NA PÁGINA client.println("</head>"); //FECHA A TAG "head" //AS LINHAS ABAIXO CRIAM A PÁGINA HTML client.println("<body>"); //ABRE A TAG "body" client.println("<img alt='masterwalkershop' src='https://blogmasterwalkershop.com.br/arquivos/artigos/sub_wifi/logo_mws.png' height='156' width='700' />"); //LOGO DA MASTERWALKER SHOP client.println("<p style='line-height:2'><font>Shield WiFi ESP8266 para Arduino</font></p>"); //ESCREVE O TEXTO NA PÁGINA client.println("<p style='line-height:2'><font>(ESP8266 ESP-12E UART Wireless WIFI Shield TTL Converter)</font></p>"); //ESCREVE O TEXTO NA PÁGINA client.println("<font>ESTADO ATUAL DO LED</font>"); //ESCREVE O TEXTO NA PÁGINA if (statusLed == HIGH){ //SE VARIÁVEL FOR IGUAL A HIGH (1), FAZ client.println("<p style='line-height:0'><font color='green'>LIGADO</font></p>"); //ESCREVE "LIGADO" NA PÁGINA client.println("<a href=\"/L\">APAGAR</a>"); //COMANDO PARA APAGAR O LED (PASSA O PARÂMETRO /L) }else{ //SENÃO, FAZ if (statusLed == LOW){ //SE VARIÁVEL FOR IGUAL A LOW (0), FAZ client.println("<p style='line-height:0'><font color='red'>DESLIGADO</font></p>"); //ESCREVE "DESLIGADO" NA PÁGINA client.println("<a href=\"/H\">ACENDER</a>"); //COMANDO PARA ACENDER O LED (PASSA O PARÂMETRO /H) } } client.println("<hr />"); //TAG HTML QUE CRIA UMA LINHA NA PÁGINA client.println("<hr />"); //TAG HTML QUE CRIA UMA LINHA NA PÁGINA client.println("</body>"); //FECHA A TAG "body" client.println("</html>"); //FECHA A TAG "html" delay(1); //INTERVALO DE 1 MILISSEGUNDO } |
Se estiver utilizando o Arduino Leonardo, vá até as linhas 19 e 20 do código, e mude a palavra Serial para Serial1, conforme mostrado na imagem abaixo:
No código você deverá inserir o nome da sua rede WiFi na linha char* ssid = “NOME DA SUA REDE WIFI”;, a senha deverá inserir na linha char* password = “SENHA DA SUA REDE WIFI“; e na linha WiFi.config(IPAddress… deverá inserir um endereço IP disponível na sua rede sem fio, pois este código utiliza IP estático:
Se você não sabe qual a faixa de IP utilizada pela sua rede sem fio, sugiro que leia a postagem Descobrindo a faixa de IP do seu roteador e em seguida retorne para continuar.
No menu “Ferramentas” selecione a opção “Placa” e selecione o modelo do seu Arduino. Ainda no menu “Ferramentas”, selecione a opção “Porta” e marque a porta COM em que seu Arduino foi alocado.
Clique no botão para enviar o código ao Arduino e aguarde o carregamento.
Se o shield estiver acoplado ao Arduino, as vias da DIP switch estiverem em OFF e mesmo assim o código não for carregado no Arduino, recomendo que leia ESTA postagem.
Terminado o carregamento do código no Arduino, desconecte o cabo USB da placa, coloque as vias P1 e P2 do shield na posição ON e conecte o cabo USB ao Arduino novamente.
OBS: enquanto as vias P1 e P2 do shield estiverem na posição ON, você não poderá fazer o envio de códigos para o Arduino, pois a serial nativa vai estar ocupada. Lembre-se de toda vez que mudar a posição das vias da DIP switch, pressionar o botão ESP-RST ou o RESET do Arduino.
Imediatamente abra o monitor serial da IDE do Arduino:
Com o monitor serial aberto você poderá acompanhar os comandos AT que estão sendo enviados ao shield para execução do webserver. Caso não seja apresentado nenhuma informação quando abrir o monitor serial, pressione o botão de RESET do seu Arduino e aguarde.
Veja que no monitor serial o comando “AT+CIPSTA_CUR” mostra o endereço IP para se conectar ao webserver e o comando “AT+CWJAP_CUR” mostra o nome e a senha da rede sem fio em que o shield está conectado:
Copie o endereço IP mostrado no monitor serial, abra o seu navegador de internet, cole o endereço IP e dê ENTER para acessar. Uma página web similar a da imagem abaixo será carregada:
A página web possui um botão que será responsável por ligar / desligar o LED conectado ao pino 13 do Arduino. Pressione o botão para acender / apagar o LED e veja que o estado atual é atualizado na página.
Você também pode acessar a página web através de um smartphone ou tablet, por exemplo.
Veja no vídeo abaixo o resultado final:
Esta foi uma prática simples, pois o intuito foi de mostrar como é fácil utilizar o shield com o Arduino. Todos os projetos que você encontrar na internet e que utilizarem o ESP8266 para atribuir WiFi ao Arduino, poderão ser reproduzidos com este Shield WiFi, a diferença é que você não vai precisar montar divisores de tensão na protoboard para comunicar as plataformas, e em projetos simples não vai ter que se preocupar em alimentar o circuito com fonte externa. Além disso, o seu projeto vai ter uma estética muito mais agradável.
Agora que você já sabe integrar o Shield WiFi ESP8266 com o Arduino a partir de um servidor web, basta modificar o código e implementar algum projeto mais elaborado ou começar a desenvolver seu próprio código.
Gostou deste tutorial? Então deixa seu comentário, dúvida ou sugestão aí embaixo!
Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop
Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.
Obrigado e até a próxima!
Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.
Postagem anterior: Como usar com Arduino – Sensor (Detector) de Som – KY-038
Próxima postagem: Como usar com Arduino – Módulo Sensor de Temperatura DS18B20
I follow all the instructions and i get the following message in the serial monitor:
[WiFiEsp] >>> TIMEOUT >>>
AT
[WiFiEsp] >>> TIMEOUT >>>
AT
…
[WiFiEsp] Cannot initialize ESP module
AT+CWDHCP_CUR=1,0
…
No tag found
What may go wrong? In addition, i followed all the firmware-update process in success.
Hello Kontos.
It looks like you’re using WiFiESP different from the one I put in the tutorial.
Remove the WiFiESP library you are using and download the modified library from the link below and then install it in the Arduino IDE:
https://blogmasterwalkershop.com.br/arquivos/libs/WiFiEsp-master-mod.zip
This error is showing up because the debug information is showing up on the serial monitor. In the text I say that the communication between the shield and the Arduino should be free of other information that may appear in the serial.
Hello,
i follow the proccess and get the following error. have you any idea what goes wrong??Thanks in advance
[WiFiEsp] >>> TIMEOUT >>>
AT
[WiFiEsp] >>> TIMEOUT >>>
AT
[WiFiEsp] >>> TIMEOUT >>>
AT
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] Cannot initialize ESP module
AT+CWDHCP_CUR=1,0
[WiFiEsp] >>> TIMEOUT >>>
AT+CIPSTA_CUR=”192.168.1.3″
[WiFiEsp] >>> TIMEOUT >>>
AT+CIPSTATUS
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] No tag found
Hello Kontos.
It looks like you’re using WiFiESP different from the one I put in the tutorial.
Remove the WiFiESP library you are using and download the modified library from the link below and then install it in the Arduino IDE:
https://blogmasterwalkershop.com.br/arquivos/libs/WiFiEsp-master-mod.zip
This error is showing up because the debug information is showing up on the serial monitor. In the text I say that the communication between the shield and the Arduino should be free of other information that may appear in the serial.
Ola. gostei bastante. é possivel um arduino se comunicar com outro usando uma rede de internet? por exemplo: com modulo osciloscopio plugado em um arduino…eu coleto os dados…e transmito via interent em tempo real par ao outro arduino..que recebe e interpreta, e reponde tambem. obrigado
Boa tarde Euler, teria como me ajudar a juntar esse codigo com o codigo da cancela utilizando sensor rfid que você possui nesse blog. Me ajudaria muito.
Como faço para colocar aquela imagem
Boa tarde, tenho um sistema de monitoramento de aquário marinho controlado por APP e usa o shild W 5100 com Arduíno Uno e queria trocar por um esp 01 ou similar usando o mesmo APP.
Estou tentando achar a solução já a algum tempo e o que mais se aproximou foi esse da sterwlker, mas mesmo assim não sei como fazer,
Gostaria se possível, é claro, de uma resposta de como proceder.
Desde já agradeço.