Boa Tarde a todos, já acompanho o fórum a um bom tempo, e só agora tive tempo pra começar a mexer com esses brinquedos....

Bom queria fazer um interruptor pro meu quarto com o ESP-01 e pensei no seguinte:

GPIO0 ---> Rele

GPIO2 ---> Pushbutton

De forma que ao pressionar o pushbutton fosse alterado o estado do rele, se estava ligado, ficar Off e vice versa, porém também queria esse controle via interface web ou mqtt pra sabe se está ligado ou não poder alterar o estado pela página da web...

Já consegui fazer acender e apagar dois leds pela interface web porém estou quebrando a cabeça em como fazer isso....

Pensei no seguinte, uma variavel ficaria atrelada ao rele, que poderia ser tipo bit se 0 rele off, se 1 relé on, o mesmo para a interface web onde o botão ficaria com o status da variável e se clicado alterar para o estado inverso, e o botão físico a mesma coisa.

Acontece que não encontrei nenhuma forma de alterar o status dessa variável se alguém puder me dar uma luz fico agradecido...

Exibições: 3301

Responder esta

Respostas a este tópico

Adilio,

Além do link que o Gustavo passou. Dá uma olhada nesse tutorial:

http://labdegaragem.com/profiles/blogs/tutorial-esp8266-programando...

Apesar de ser um tutorial usando o ESP8266-12, serve para o ESP8266-01 também. Acredito que os pinos que você está usando não estarão disponíveis. Veja:

"Os pinos VCC, CH_PD e GPIO2 devem sempre estar em nível lógico alto, os pinos GND e GPIO15 devem sempre estar em nível baixo. Os pinos REST e GPIO0 devem estar em pull up, estes pinos vão ser usados para colocar o módulo em modo de programação".

Não tenho certeza se com o firmware rodando, você poderá utilizar. Em todos os projetos que fizemos aqui, mantivemos na configuração acima.

Boa sorte!

Valew pelas respostas, já tinha olhado esses tópicos mas fiquei ainda com muita dúvida...

Eu consegui subir o firmware do nodeMcu no bichinho, consegui conectar no wifi.....

Aí vasculhando a net encontrei essa página que tem exatamente o que eu quero

http://www.forward.com.au/pfod/ESP8266/GPIOpins/ESP8266_01_pin_magi...

Lá embaixo no tópico: Another Trick – Driving a Relay and Reading a Push Button using GPIO0 / GPIO2

Lá encontrei essa imagem e o código pra fazer funcionar, porém o código está no formato do arduino e não consegui carregar ele para o esp01, já que creio eu ele não converte para o lua  usado no nodemcu, alguém pode me dar um help em como traduzir esse código para lua, ou algum app que envia pro nodemcu assim...

boolean relayOn = false; // true when relay energized
boolean relayJustTurnedON = false; // true when relay just turned on by push button
boolean wifiTurnRelayON = false; // set true if WiFi connection commands relay ON
boolean wifiTurnRelayOFF = false; // set true if WiFi connection commands relay OFF
boolean GPIO2wasLOW = false; // set true if last debouced read of GPIO2 as an input was LOW, false if GPIO2 is an output

boolean configMode = false; // not in config mode normally
void setup() {
pinMode(0, OUTPUT);
digitalWrite(0, LOW); // make GPIO0 output low
// check GPIO2 input to see if push button pressed connecting it to GPIO0
configMode = (digitalRead(2) == LOW);
if (configMode) {
// start AP and get ready to serve config web page
// leave relay on to indicate in config mode
//......
} else {
// normal usage
// make GPIO0 HIGH to turn off the relay
digitalWrite(0, HIGH);
// set up GPIO0 / GPIO2 to detect user push button
// relay ALWAYS starts in OFF state
// NOTE: push button is ALWAYS open here
// because if it was pushed then we would be
// in config mode and not here
pinMode(0, INPUT);
pinMode(2, OUTPUT);
digitalWrite(2, LOW);
//.....
}
// rest of setup()
}

void loop() {
// put your main code here, to run repeatedly:

if (!relayOn) {
// case i)
// check if GPIO0 is being pulled LOW by push button being pressed and GPIO2 Output LOW
if (digitalRead(0) == LOW) {
// hold relay ON with GPIO0
pinMode(2, INPUT);
pinMode(0, OUTPUT);
digitalWrite(0, LOW); // make GPIO0 output low
// make GPIO2 an input
relayJustTurnedON = true;
relayOn = true;
GPIO2wasLOW = true;
}
} else {
// relay is ON, held by GPIO0 output LOW
// case ii)
if (relayJustTurnedON) {
// look for GPIO2 going high on push button release from turn ON
if (digitalRead(2) == HIGH) {
relayJustTurnedON = false;
GPIO2wasLOW = false;
} // else keep looking for push button release
} else {
// check GPIO2 for LOW then HIGH
if (GPIO2wasLOW) {
// check for release
if (digitalRead(2) == HIGH) {
// turn relay off
pinMode(0, INPUT); // turns relay off
pinMode(2, OUTPUT); // set GPIO2 as Output LOW
digitalWrite(2, LOW);
relayOn = false;
}
} else {
// not was low check if push button has been pressed
if (digitalRead(2) == LOW) {
GPIO2wasLOW = true;
// hold relay ON with GPIO0 until release of push button
} // else loop and keep looking for LOW input
}
}
}

if (wifiTurnRelayON) {
pinMode(2, INPUT);
pinMode(0, OUTPUT);
digitalWrite(0, LOW);
wifiTurnRelayON = false; // finished this
relayJustTurnedON = false;
}
if (wifiTurnRelayOFF) {
pinMode(0, INPUT);
pinMode(2, OUTPUT);
digitalWrite(2, LOW);
wifiTurnRelayOFF = false; // finished this
}

// ...
// code for WiFi connection to control relay
// should set either wifiTurnRelayOFF or wifiTurnRelayON to true
// ...

}

Sugiro que teste esse código usando a IDE do Arduino para o ESP8266. 

Por que não ?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço