Este é só o começo da serie de projetos que virão a partir do NodeMcu, em breve postarei novos códigos com mais recursos,por hora fiquem com este exemplo.
O código fonte:
#include <dummy.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>//caso use o modo servidor
#include "FS.h"
WiFiServer server(80);//usa porta 80
const int LED_STATUS = 2; // led de status(estou usando o led que já vem no modulo esp.
const int ANALOGICA = A0; // porta analogica
//////////////reles/////////////////////////////
const int RELE1 = 5; // neste exemplo vou usar apenas o rele 1
const int RELE2 = 4;
const int RELE3 = 10;
const int RELE4 = 15;
int tempo_pisca_led=500;
long liga_timer=0;
int tempo = 1;//padrão 1s
///////////////////////////////////////////////////////////////////
//////////configurações principais
///////////////////////////////////////////////////////////////////
void setup()
{
Serial.begin(115200);
conf_pinos();
setupWiFi();
}
/////////////////////////////////////////////////////////////////////
///rotina prinicpal
/////////////////////////////////////////////////////////////////////
void loop()
{
rot_geral();
// checa se tem algum dispositivo conectado!
WiFiClient client = server.available();
if (!client)
{return;}
// Lê a primeir linha dos dados recebidos pelo pacote ethernet
String req = client.readStringUntil('\r');
client.flush(); //limpa buffer de recepção
Serial.println("recebeu pag.");
// prepara pagina ethenet
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 += "<h1> Servidor Web com ESP8266 </h1>";
buf += "<h3> Temporizador - configure um tempo de 00 a 60 segundos.</h3>";
buf += "<h3> coloque os numero no formato XX(por exemplo 1 = 01..</h3>";
buf += "<h3><p>Iniciar: <a href=\"?b1_on\"><button>ON</button></a> <a href=\"?b1_off\"><button>OFF</button></a></p><br></h3>";
buf += "<form><h3>Segundos: <input type=text name=\"tempo\"\"value=\"mm\"size=3 maxlength=2></h3>";
buf += "<h3><input type=\"submit\" value=\"Configurar. \"></h3>";
buf += "</form><marquee direction=\"right\"> Microcontroladores-c - Temporizador Web </marquee></html>\n";
client.print(buf);//envia os dados pela wifi
client.flush();
///avalia o retorno da pagina HTTP
if (req.indexOf("b1_on") != -1)
{
liga_timer=tempo*5;//pois como o pisca é mais rapido e leva 200 ms por incremento deve multiplicar por 5
Serial.println("Acionou timer tempo:");
Serial.print(liga_timer,DEC);
}
if (req.indexOf("b1_off") != -1)
{
liga_timer=0;
digitalWrite(RELE1, LOW);
Serial.println("rele desligado!");
}
if(req.indexOf("tempo=") != -1)
{
int pos = req.lastIndexOf("tempo=");
Serial.println("tempo");
Serial.print('=');
Serial.print(req[pos+6]);
Serial.print(req[pos+7]);
if((char_to_int(req[pos+6]))*10 + char_to_int(req[pos+7])<61)
{ tempo = (char_to_int(req[pos+6]))*10 + char_to_int(req[pos+7]) ;
Serial.println("foi gravado :");
Serial.print(tempo,DEC);
} //se tempo menor que 60 atualiza valor
}
//cliente desconectado
// a cada requisição a pagina é enviada e o cliente é desconectado
}
unsigned int char_to_int(char val)
{
int valor =0;
if((val>47)||(val<58))
{
valor = val-48;
}
return(valor);
}
void rot_geral()
{
if(liga_timer>0)
{
liga_timer--;
if(liga_timer == 0)
{
// fim do tempo
digitalWrite(RELE1, LOW);
Serial.println("rele desligado!");
}
else
{
digitalWrite(RELE1, HIGH);// liga rele
}
digitalWrite(LED_STATUS,HIGH);
delay(100);
digitalWrite(LED_STATUS,LOW);
delay(100);
}
else
{
digitalWrite(LED_STATUS,HIGH);
delay(tempo_pisca_led);
digitalWrite(LED_STATUS,LOW);
delay(tempo_pisca_led);
}
return;
}
////////////////////////////////////////////////////////////////////
//configura os pinos
////////////////////////////////////////////////////////////////////
void conf_pinos()
{
pinMode(9, INPUT);//sempre será entrada
pinMode(LED_STATUS, OUTPUT);
digitalWrite(LED_STATUS, LOW);
pinMode(RELE1, OUTPUT);
digitalWrite(RELE1, LOW);
pinMode(RELE2, OUTPUT);
digitalWrite(RELE2, LOW);
pinMode(RELE3, OUTPUT);
digitalWrite(RELE3, LOW);
pinMode(RELE4, OUTPUT);
digitalWrite(RELE4, LOW);
return;
}
/////////////////////////////////////////////////////////////////////////
// Parâmetros da WiFi //
////////////////////////////////////////////////////////////////////////
void setupWiFi()
{
//////////////////////
// definições da WiFi //
//////////////////////
const char* WiFi_Senha = "123456789";//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)
const char* WiFi_Nome = "Microcontroladores-c";//nome que você quer dar a sua rede
IPAddress ip(192,168,50,4);//ok
IPAddress gateway(192,168,50,1);//ok
IPAddress subnet(255,255,255,0);//ok
//////inicializa a wifi//////////////////////////////////////////////
uint8_t mac[WL_MAC_ADDR_LENGTH];
WiFi.softAPmacAddress(mac);//mac qualquer pra testar
WiFi.softAPConfig(ip, gateway, subnet);
WiFi.softAP(WiFi_Nome, WiFi_Senha);
// WiFi.mode(WIFI_AP);//modo acess point(cliente)
WiFi.mode(WIFI_AP_STA);//modo acess point e servidor
WiFi.begin();
server.begin();
}
A demonstração do código funcionando pode ser visto no vídeo abaixo :
Até a próxima!
Nenhum comentário :
Postar um comentário
olá,digite aqui seu comentário!