0

O ESP8266 parte 2 – Web Server

Neste tutorial vamos ver o que se deve fazer com o ESP para interagir com os GPIOs do Arduino remotamente via web .

Alguém disse uma vez “If you can blink a LED you can do anything”. Quando você faz com que um LED acenda a partir de um sinal gerado em uma das portas do Arduino, ou que ele possa ler o status de uma chave ou sensor, o que está realmente acontecendo é a interação do mundo da eletrônica com o mundo físico! Conseguir essa interação via uma página da internet é de fato toda a essência do IoT.

image

A primeira configuracão que testarei, será o ES8266 funcionando como um servidor web local, conectado a um Arduino MEGA. Vamos instalar botões em dois GPIOs digitais do Arduino (Pinos 8 e 9) simulando o estado de algum sensor e um potenciômetro na porta analógica A0, simulando os dados fornecidos por um sensor analógico, como por exemplo temperatura (os “inputs” do diagram acima). A função do ESP8266 será ler esses sinais, gerar uma página HTML  simples, publicando os resultados em tempo real na web! Cool!!!!!!!!

 

O circuito:

Webserver circuit

Observe que  o circuito é basicamente o mesmo que o do post anterior, apenas adicionei dois botões (normalmente abertos) conectados entre as entradas do Arduino  e o VCC (via um resistor de 10K para não gerar um curto-circuito, claro). Ao pressionar o botão, o que estamos fazendo é colocar um sinal HIGH na entrada digital do Arduino. O potenciômetro (também de 10K) será montado entre VCC (5V) e Terra, com seu pino central conectado a entrada analógica A0 do MEGA. O pot controlará o nível de tensão na entrada analógica A0,  a qual variará de “0V a 5V”. O MEGA lerá a tensão no pino AO e seu ADC interno (Analogic Digital Converter), convertendo a mesma para um valor que variará respectivamente de “0 a 1023”.

O Código:

O que farei aqui, será ressaltar as principais diferenças da sketch anterior ( O ESP8266 Serial Wifi Module), mas não se preocupem que no final, deixo o link para o código completo:

  • Antes de mais nada, depois das definições e set up geral como já foi visto anteiormente, é importante iniciar o ESP como um servidor. Para isso, a função InitWifiModule()
 
void InitWifiModule()
{
  sendData("AT+RST\r\n", 2000, DEBUG); // reset
  sendData("AT+CWJAP=\"Your network ID\",\"password\"\r\n", 2000, DEBUG); 
  delay(3000);
  sendData("AT+CWMODE=1\r\n", 1000, DEBUG);
  sendData("AT+CIFSR\r\n", 1000, DEBUG); // Show IP Adress
  sendData("AT+CIPMUX=1\r\n", 1000, DEBUG); // Multiple conexions
  sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG); // start comm port 80
}
 
  • No loop principal, se espera para ver se o ESP está enviando algo e se o string  “+IPD” é encontrado significa que a pagina foi identificada (veja a cópia do monitor serial mais abaixo).
  • Esperamos 300 milisegundos para garantir que o buffer serial tenha lido todos os dados.
  • Como a função read() retorna ASCII, é importante que ao se carregar o connection ID, seja subtraído o valor “48” do dado lido. 48 é o código do primeiro caracter decimal “0”. Assim se o dado 49 (codigo ASCII para  “1”) é recebido, ao subtrair 48, o resultado será um digito puro (“1”).
  • Em verde, está o código HTML que será enviada ao Browser para a construção da página (Note que mesmo que você não seja familiar com a linguagem HTML, em vermelho está o que aparecerá escrito na página, fique livre para customizer-la a seu gosto).
  • Em azul, as informações são enviadas (Comando CPISEND) e em laranja se fecha a conexão (comando CPICLOSE).
 
void loop()
{
   if (esp8266.available()) // check if 8266 is sending data
   {
      if (esp8266.find("+IPD,"))
      {
         delay(300);
         int connectionId = esp8266.read() - 48;
 
         String webpage = "

MJRoBot WebServer ESP8266

Ardin: “; webpage += “D8 status ==> “; int a = digitalRead(8); webpage += a; webpage += “

Arduino Pin: D9 status ==> “; int b = digitalRead(9); webpage += b; webpage += “

Arduino Pin: A0 data ===> “; int c = analogRead(0); webpage += c; webpage += “

“; String cipSend = “AT+CIPSEND=”; cipSend += connectionId; cipSend += “,”; cipSend += webpage.length(); cipSend += “\r\n”; sendData(cipSend, 1000, DEBUG); sendData(webpage, 1000, DEBUG); String closeCommand = “AT+CIPCLOSE=”; closeCommand += connectionId; // append connection id closeCommand += “\r\n”; sendData(closeCommand, 3000, DEBUG); } } }

  • A função “sendData()” enviará os comandos AT para o ESP
  • Quando o esp8266.available é TRUE, significa que existem dados disponíveis , portanto a resposta “c” é montada
 
String sendData(String command, const int timeout, boolean debug)
{
  String response = "";
  esp8266.print(command);
  long int time = millis();
  while ( (time + timeout) > millis())
      {
        while (esp8266.available())
            {
              char c = esp8266.read(); // read the next character.
              response += c;
            }
      }
      if (debug)
        {
          Serial.print(response);
        }
      return response;
}
 
  • Durante a conexão o monitor serial apresenta os dados abaixo:
  • Muito importante é o segundo IP address que aparece no monitor: 10.0.1.2Serial - Conxion
  • Ao entrar com o IP acima, em um browser, o ESP montará a pagina HTML que foi programada e começará a enviar as informações capturadas nas entradas do MEGA:Webserver page
  • No monitor Serial, se observará os dados que são continuamente atualizados:Serial Ongoing comm
  • No vídeo abaixo poderá observar o WebServer a funcionar:
  • Link para a sketch do Arduino MEGA e do diagrama eletrônico

    Tudo o que foi visto aqui para o Arduino MEGA poderia ser executado com um Arduino UNO, ou qualquer outro da família.

    A diferença básica será a utilização de outros GPIOs como port serial. Como o UNO só tem 1 port, usaremos a biblioteca softwareSerial () para definir os pinos 2 e 3 como RX e TX respectivamente (note que isso só funciona para velocidades mais baixas que 19.600bauds)

    As definições iniciais no código devem ser alteradas para:

    #include <SoftwareSerial.h>
    SoftwareSerial esp8266(2,3);  //Rx ==> Pin 2; TX ==> Pin3

    #define speed8266 9600

    O restante do código para o UNO funcionará da mesma maneira que para o MEGA.

    O novo circuito:

    ESP8266_WebServer_UNO

    O vídeo abaixa, mostra o UNO como um WebServer executando o mesmo código anterior:

    Link para o vídeo do WebServer funcionando com o UNO

 

Artigo disponibilizado por MJRobot.org

Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica – ElectroFun.

Gostaram deste artigo? Deixem o vosso comentário no formulário a baixo e partilhem com os vossos amigos.

Não se esqueçam de fazer like na nossa Página no Facebook.

Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nosso Grupo no Facebook Arduino Portugal – Qual o teu projeto?

n.

Comments

Comentários

ArduinoPortugal.pt

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

To use BrandCaptcha you must get an API Key