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 :
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(); } }
Nenhum comentário :
Postar um comentário
olá,digite aqui seu comentário!