Olá, hoje vou mostrar um exemplo simples de como criar um servidor web WIFI sem usar arduino,PIC,ATmega ou qualquer outro microcontrolador exceto o que já vem na placa do modulo.Vou dividir a experiencia desse modulo em 2 ou 3 artigos.
Recentemente comprei uns módulos ESP8266 12+ por incrível que pareça paguei 15 reais(ou seja o mesmo preço de um microcontrolador porem com a wifi já integrada), a "cara" da placa é esta:
De cara o primeiro desafio é soldar essa placa num soquete para que se possa colocar na protoboard, para isto tive que fazer essa "aranha"! veja :
Dentre as complicações estão:
-> Pinos com furos pequenos(não dá pra por barra de pinos nele).
-> Os pinos traseiros impede de se colocar na protoboard.
-> E por ultimo o nomes das portas não seguem um padrão sequencial.
-> necessidade de configurar 2 modos de operação, um pra gravação e outro para funcionamento.
Mas esses destalhes não ofuscam em nada as vantagem deste "pequeno notável", com ele é possível fazer leituras analogicas de tensão , leitura digital, acionar os pinos para integrar com outros dispositivo, comunicação serial(rs232) e Spi (com essas comunicações pode se implementar seu próprio protocolo de comunicação com outros microcontroladores,se necessario, o que substituem os "pobres" e "massantes " comandos AT's).
Para programar diretamente o chip pode-se usar o software LUA(com desenvolvimento inclusive no Brasil) , interface do Arduino e por ultimo os comandos AT's(já discutido aqui no blog em um exemplo).Eu particularmente optei pela IDE do arduino por ser mais divulgado e consolidado pela comunidade de hobbystas e iniciantes em programação embarcada.
A configuração do hardware e explicação de como configurar o ambiente de programação pode ser visto
clicando aqui! apesar de que a configuração do hardware lá é para uso com o bootloder deles é possível usar a configuração padrão alterando as ligações conforme esta figura que foi retirado do site "Laboratório de garagem" e ajustado por mim:
Note que o resistor de 10k é para evitar curto circuito caso se deseje usar aquele pino como saída,claro que minha montagem não ficou bonitinha igual essa da imagem, vê ai o resultado:
Lembrando que este módulo funciona com 3,3V e a maioria dos conversores usb/serial é de 5V, então devemos montar um divisor resitivo para não queimar o pino rx do modulo, e colocar um resitor de 1,2K(
deve ficar parecido com este ).
Depois de tudo montado o código foi algo simples e rápido uma vez que o arduino tem muitas bibliotecas prontas.A página Web ficou assim :
Para acessar a página pelo celular primeiro você deve usar o dispositivo como roteador wifi, dai pela porta serial do pc vc pega o ip recebido pelo ESP8266 e digita no buscador de internet, então basta pressionar os botões e ver o resultado.
O Código fonte :
/*
* Nesta aplicação o hardware se conecta a uma rede wi fi e envia os staus a um pc pela porta serial(rs232)
*/
#include <ESP8266WiFi.h>
//para conectar a um roteador basta colocar o nome da rede e a senha da wifi do roteador(mas não testei isso!).
const char* ssid = "AndroidAP"; // para conectar no celular - nome da rede wifi do celular
const char* password = "ocno33801";//senha gerada pelo android - senha da rede wifi do celular
//senha que você quer usar(deve ser em branco(aberta) ou maior que 8 caráteres,senão não funciona e não troca o nome da wifi)
WiFiServer server(80);//escolhe a porta 80
//const int LED_STATUS = 14; // led de status
const int LED_CONEX = 16; // led de conexão
const int LED_1 = 5;
const int LED_2 = 4;
unsigned int gui_pisca=0;
void setup() {
Serial.begin(115200);
delay(10);
// inicializa e configura oas pinos que serão utilizados
// pinMode(LED_STATUS, OUTPUT);//configura como saida
//digitalWrite(LED_STATUS, 0);//desliga pino
pinMode(LED_CONEX, OUTPUT);
digitalWrite(LED_CONEX, 0);
pinMode(LED_1, OUTPUT);//configura como saida
digitalWrite(LED_1, 0);//desliga pino
pinMode(LED_2, OUTPUT);
digitalWrite(LED_2, 0);
// Escreve na porta serial
Serial.println();
Serial.print("Conectado a rede wifi : ");
Serial.println(ssid);
Serial.println();
WiFi.begin(ssid, password);//inicia conexão
while (WiFi.status() != WL_CONNECTED) //fica esperando uma conexão
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Conexão realizada com sucesso");
digitalWrite(LED_CONEX, 1);
// inicia o servidor
server.begin();
Serial.println("Servidor iniciado!");
Serial.println(WiFi.localIP());//mostra qual o ip
}
//rotina pricipal da aplicação
void loop()
{
WiFiClient client = server.available();
if (!client) {
if(WiFi.status() != WL_CONNECTED) //se desconectado da wifi
{
digitalWrite(LED_CONEX, 0);
digitalWrite(LED_1, 0);
digitalWrite(LED_2, 0);
}
return;
}
//novo pacote chegou!
while(!client.available()){
delay(1);//fica esperando chegar dados
}
String req = client.readStringUntil('\r');//pegas tudo que estiver na string até o caracter de retorno('\r')
Serial.println(req); // mostra o conteudo na serial
client.flush();//limpa buffer de recepção
String buf = "";//cria uma string para colocar a pagina web
//vai adicionando linhas a string criada
buf += "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n";
buf += "<h3> Servidor Web com ESP8266 </h3>";
buf += "<h4> Usando wifi </h4>";
buf += "<p>Led 1 <a href=\"?function=led1_on\"><button>ON</button></a> <a href=\"?function=led1_off\"><button>OFF</button></a></p>";
buf += "<p>Led 2 <a href=\"?function=led2_on\"><button>ON</button></a> <a href=\"?function=led2_off\"><button>OFF</button></a></p>";
buf += "</html>\n";
client.print(buf);//envia os dados pela wifi
client.flush();
///avalia o retorno da pagina HTTP
if (req.indexOf("led1_on") != -1)
digitalWrite(LED_1, 1);
else if (req.indexOf("led1_off") != -1)
digitalWrite(LED_1, 0);
else if (req.indexOf("led2_on") != -1)
digitalWrite(LED_2, 1);
else if (req.indexOf("led2_off") != -1)
digitalWrite(LED_2, 0);
else {
//fim de recpção de dados
///fecha socket e irá voltar ao inicio do loop,ou seja cria uma novo socket e reenvia a pagia web
client.stop();
}
}