Pessoal por favor quem tiver uma dica peço que me ajude só falta resolver isso para o projeto ser finalizado.
Consigo enviar um comando para o meu servidor usando protoco http , aperto o botão me conecto ao servidor enviando o comando de ligar um led por exemplo aperto novamente enviar para desligar , até ai tudo bem , o que eu queria era enviar o comando e sair do loop ou desconectar do do servidor para que o cliente2 (meu app) pudesse também enviar comandos para o mesmo endereço , como estou preso no loop fica dando conflito e o meu app não consegue ligar ou desligar o led por exemplo do servidor , funciona perfeitamente com o meu app mas tenho que colocar uma opção de botão para que também seja desligado sem precisar do app.
Sei que tem projetos usando o MQTT com essas soluções já prontas , mas só que meu projeto é em http.
Já tentei interrupção também mas não deu certo.
Segue o código do cliente, bem simples queria apenas uma outra solução para apertar o botão enviar o comando quando soltasse o botão desconectasse do servidor , o problema maior que não consigo desconectar do servidor e por isso da conflito com o cliente2 ao tentar enviar comando no mesmo endereço.
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#define D2 2
bool Botao();
const char* ssid = "D-Link_DIR-615";
const char* password = "******";
HTTPClient http;
void rptaSrv(int httpCode){
if(httpCode == 200) {
String payload = http.getString();
Serial.println(payload);
} else {
Serial.print("[HTTP] GET... failed, no connection or no HTTP server\n");
}
http.end();
}
void setup() {
pinMode(D2,INPUT_PULLUP);
Serial.begin(115200);
delay(10);
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi conectada");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void loop(){
if(Botao()) {
http.begin("192.168.0.99", 80, "/led1on=1"); //HTTP
int httpCode1 = http.GET();
rptaSrv(httpCode1);
} else {
http.begin("192.168.0.99", 80, "/led1off=0"); //HTTP
int httpCode1 = http.GET();
rptaSrv(httpCode1);
}
}
bool Botao() {
#define tempoDebounce 50 //(tempo para eliminar o efeito Bounce EM MILISEGUNDOS)
bool estadoBotao;
static bool estadoBotaoAnt;
static bool estadoRet = true;
static unsigned long delayBotao = 0;
if ( (millis() - delayBotao) > tempoDebounce ) {
estadoBotao = digitalRead(D2);
if ( estadoBotao && (estadoBotao != estadoBotaoAnt) ) {
estadoRet = !estadoRet;
delayBotao = millis();
}
estadoBotaoAnt = estadoBotao;
}
return estadoRet;
}
Tags:
Ola Vinicios,
o problema é que seu código sempre executara o 'else' quando não estiver apertado.
é recomendado utilizar uma biblioteca que trate isto melhor, como esta, ou analisa-la e desenvolver a sua.
Oi Ricardo entendi sua dica , é um problema até mais ou menos "simples" mas vou testar , obg , se mais alguém tiver alguma outra solução agradeço.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por