Webserver com o Shield WiFi ESP8266 para Arduino

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:

img01_webserver_com_o_shield_wifi_esp8266_para_arduino_uart_esp12e_uno_mega_2560_ttl_leonardo_pagina_servidor

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:

img02_webserver_com_o_shield_wifi_esp8266_para_arduino_uart_esp12e_uno_mega_2560_ttl_leonardo_pagina_servidor

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:

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:

img03_webserver_com_o_shield_wifi_esp8266_para_arduino_uart_esp12e_uno_mega_2560_ttl_leonardo_pagina_servidor

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:

img04_webserver_com_o_shield_wifi_esp8266_para_arduino_uart_esp12e_uno_mega_2560_ttl_leonardo_pagina_servidor

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:

img05_webserver_com_o_shield_wifi_esp8266_para_arduino_uart_esp12e_uno_mega_2560_ttl_leonardo_pagina_servidor

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:

img06_webserver_com_o_shield_wifi_esp8266_para_arduino_uart_esp12e_uno_mega_2560_ttl_leonardo_pagina_servidor

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:

img07_webserver_com_o_shield_wifi_esp8266_para_arduino_uart_esp12e_uno_mega_2560_ttl_leonardo_pagina_servidor

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:
Próxima postagem:
Postagem feita por

Formado em Engenharia da Computação, Técnico em Eletroeletrônica, Fundador e Diretor da MasterWalker Electronic Shop. Se preocupa com o aprendizado dos seus clientes e daqueles interessados em aprender sobre Arduino e plataformas embarcadas em geral.

Existem 8 comentários para esta postagem
  1. Carlos às 13:02

    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.

  2. Mateus às 14:31

    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.

  3. Ricardo às 15:13

    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

  4. kontos às 23:17

    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

    • Euler Oliveira Autor às 07:07

      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.

  5. ATHANASIOS KONTOS às 23:15

    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.

    • Euler Oliveira Autor às 07:08

      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.