Depois de testar o modulo com vários comandos AT (vale a pena dar uma sapeada no arquivo anexo, bem legal!), parti para fazer o modulo funcionar como Web Server. Partído que tinha aprendido, principalmante com um tutorial do blog FILIPEFLOP:

http://blog.filipeflop.com/wireless/esp8266-arduino-tutorial.html

O Circuito:

O código:

/*************************************************************************

* Web Server with ESP8266

* Based on: FILIPEFLOP http://blog.filipeflop.com/wireless/esp8266-arduino-tutorial.html

* Adapted by Marcelo Jose Rovai

**************************************************************************/

#define esp8266 Serial2

#define CH_PD 4 

#define speed8266 115200 // This is the speed that worked with my ESP8266

 

#define DEBUG true

 

void setup()

{

  esp8266.begin (speed8266); 

  Serial.begin(9600);

  reset8266(); // Pin CH_PD needs a reset before start communication

 

  sendData("AT+RST\r\n", 2000, DEBUG); // reset

  sendData("AT+CWJAP=\"ROVAI TIMECAP\",\"mjr747@1\"\r\n", 2000, DEBUG); //Connect network

  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

}

 

void loop()

{

  if (esp8266.available()) // check if 8266 is sending data

  {

    if (esp8266.find("+IPD,"))

    {

      delay(300);

      int connectionId = esp8266.read() - 48;

 

      String webpage = "<head><meta http-equiv=""refresh"" content=""3"">";

      webpage += "</head><h1><u>MJRoBot ==> WebServer (ESP8266) </u></h1><h2>Arduino Pin: ";

      webpage += "D8 status ==> ";

      int a = digitalRead(8);

      webpage += a;

      webpage += "<h2>Arduino Pin: D9 status ==> ";

      int b = digitalRead(9);

      webpage += b;

      webpage += "<h2>Arduino Pin: A0 data ===> ";

      int c = analogRead(0);

      webpage += c;

      webpage += "</h2>";

      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);

    }

  }

}

 

/*************************************************/ 

 // Send AT commands to module

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())

    {

      // The esp has data so display its output to the serial window

      char c = esp8266.read(); // read the next character.

      response += c;

    }

  }

  if (debug)

  {

    Serial.print(response);

  }

  return response;

}

/*************************************************/

// Reset funtion to accept communication

void reset8266 ()

{

  pinMode(CH_PD, OUTPUT);

  digitalWrite(CH_PD, LOW);

  delay(300);

  digitalWrite(CH_PD, HIGH);

}

A web Page:

Note que o endereço da pagina é o segundo IP que aparece no Serial monitor com o comando AT+CIFSR na fase de Set-up (veja a copia do Serial monitor abaixo): 

+CIFSR:STAIP,"10.0.1.2"

 

A saída no Serial Monitor:

1. A conexão com o modulo esp8266

2. A comunicação:

Eu fiz um pequeno vídeo para dar uma visão do WebServer funcionando:

ESP8266 como webserver

Documento legal com dicas de comandos AT para configurar o esp8266:

ESP8266_WiFi_Module_Quick_Start_Guide_v_1.0.4.pdf

meu Blog:

MJRoBot Web/Blob

Exibições: 6182

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Marcus Roberto em 25 maio 2018 às 13:05
Olá Marcelo! Excelente post. Se você puder ou alguém puder me ajudar, quando mando o comando AT + CIFSR, o esp retorna o IP, mas não retorna o host. Então não consigo acessar a página gerada.
Comentário de Marcelo Rovai em 19 maio 2016 às 22:40

Eu só utilizei o divisor de tensão no pino de recepção. O CH_PD liguei direto sem problemas. Fiz testes com dois 8266 distintos e sempre funcionaram bem com o reset por SW gerado pelo pino 4 do Arduino.

Para comunicação com a internet, acabei migrando para o RaspberryPi. O 8266 é bem "temperamental". Fiz uns projetos de IoT e também de robótica controlado pela Web e o RPi faz com um pé nas costas! ;-)

(esse terminei hoje: 

https://www.youtube.com/watch?v=dUijuTuA78I

Comentário de Rafael Morato Mangualde em 19 maio 2016 às 22:17

Obrigado pelas dicas, segui exatamente o que vc disse mas continua acontecendo a mesma coisa? Vou comprar outro ESP pra ver se o problema é ele. 

Me diga uma coisa, o CH_PD ligado direto no arduino não tem problema? Achei estranho essa ligação, estava fazendo com um divisor de tensão, mas resolvi arriscar desse jeito, e parece que não queimou. 

Comentário de Marcelo Rovai em 19 maio 2016 às 21:00

Oi rafael,

Eu rodei no UNO trocando o Port serial e usando a biblioteca softwareSerial () para definir os pinos 2 e 3 como RX e TX respectivamente. Qual a velocidade em que você está trabalhando? (O SoftSerial só funciona com velocidades mais baixas que 19.600bauds)

Só para conferir, abaixo envio novamente o que tinha postado anteriormente:

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:

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

Comentário de Rafael Morato Mangualde em 18 maio 2016 às 11:05

Bom dia Marcelo, será que vc pode me ajudar! Rodei o seu programa no Uno, fiz as alterações devidas, e ele roda tranquilamente, até a página atualizar. Ou seja, eu acesso o IP, ele mostra a página html, e quando ele atualiza, ou eu mexo nos botões a página cai e não volta mais, só volta com um reset do arduino. Isso acontece tanto com o seu programa quanto do Filipiflop. O que aparece na serial é o seguinte:

OK
AT+CIFSR
+CIFSR:STAIP,"192.168.0.164"
+CIFSR:STAMAC,"18:fe:34:a4:eb:17"

OK
AT+CIPMUX=1

OK
AT+CIPSERVER=1,80

OK
,385:GET / HTTP/1.1
Host: 192.168.0.164
Connection: keep-aliAT+CIPSEND=0,198

OK
> <Ê…‘âjE‹T’É�¹Ñšâ «–'LO]¦JR„½ÑêòèUÖ–W.JQ¨266�½ùzBâKJ«Ëª'hHººs/h2>
SEND OK
AT+CIPCLOSE=0
0,CONNECT FAIL

OK

Comentário de José Gustavo Abreu Murta em 20 janeiro 2016 às 13:33

Obrigado pelos elogios, Me aposentei em dez de 2015. 

Terei mais tempo para me distrair com o Lab 

Abraços 

Gustavo 

Comentário de Marcelo Rovai em 20 janeiro 2016 às 12:56

Oi José Gustavo, muito obrigado pela dica. Eu escreverei novos posts com as modificações e farei os tutoriais. O codigo foi escrito de maneira ser fácil de mudar entre o UNO e o MEGA, so alterando duas linhas lá nas definições e mudando a velocidade. Aproveitando, queria te contar que trabalhei em um terceiro experimento para acionar os GPIOs, acendendo LEDs. Fiz dois tipos de experiências, uma onde o Arduino gera a página web e outro onde a página HTML já existe. Nos dois casos Percebi que só posso acionar os LEDs 5 vezes. Algo a ver com a limitação dos 5 canais que o ESP pode manejar. Mas no fim, descobri que tenho que forçar um "refresh" da página depois de alguns segundos e tudo funcionou a maravilha!

Vou preparar os 3 tutoriais com o UNO. Eu comecei um blog aqui no Chile para ajudar dinossauros que nem eu a re-lembrar a eletrônica ou mesmo aprender. A idéia é ver se vou parando com a vida de executivo e passo a tentar ajudar os iniciantes da area! Acho que é o que voce também faz. Seus posts são excepcionais e sua paixão pela eletrônica contagia! Meus parabéns. 

mjrobot.wordpress.com

E mais especificamente na pagina abaixo, coloquei vários videozinhos com experiências que pretendo, melhorar, integrar-las, etc. e ir escrevendo posts sobre os assuntos. 

Obrigado e um abraço.

Comentário de José Gustavo Abreu Murta em 20 janeiro 2016 às 12:13

Marcelo , não fiz ainda esse tipo de teste. 

Comentário de José Gustavo Abreu Murta em 20 janeiro 2016 às 7:54

Marcelo bom dia, 

Ficou muito bom o tutorial.

Sugiro que crie um tutorial usando o Arduino comum. A grande maioria dos makers não tem Arduino Mega. 

E divulgue como Tutorial e não blog. Assim ficará mais exposto. 

Abraços,

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço