ESP-01 controlando o rele de outro ESP-01 e vice Versa (Seria Possível?)

Ola, tudo bem?

Fazer a comunicação do ESP-01 entre aplicativos ou Browsers não tenho problemas e funcionou perfeitamente... mas , agora estou tendo problemas para fazer o seguinte projeto:
Quero que um ESP-01 se comunique como outro ESP-01 ou seja, quando eu apertar um botão em um dos ESP-01, tem que ligar o rele do outro ESP-01 e quando eu soltar o botão, o rele do outro ESP-01 ficaria desligado e vice versa. Cada ESP-01 terá um rele e um botão controlando o rele do outro ESP-01. Seria possível?

Em anexo está a imagem do ESP-01 rele  que estou usando!

Alguém poderia me ajudar? 


Grato!

Exibições: 2179

Anexos

Responder esta

Respostas a este tópico

Aih recomendo buscar por MQTT.

Vc escreve na nuvem e o outro lê da nuvem.

Essa de resolver tudo com HTML tem um limite...

BOA NOITE... Sim, com o uso de aplicativo fica facil... mas quero uma comunicação direta e  somente entre os dois e sem internet... apenas usando a comunicação WIFI interna dos dois!!

Valeu

Olá Claudio
Tem sim, esse projeto já existe.
Sugiro dar uma olhada nesse tópico.
http://www.fvml.com.br/2019/07/comunicacao-e-controle-entre-dois.html

Bom dia CRC,

como no mundo o impossível só demoram um pouco mais do que o possível, vamos aos fatos:

O ESP8266 tem o mode AP (Access Point)  e o mode STA (Station).

O mais interessante é que ele pode funcionar nos 2 modos comitantemente.

Então você pode, pelo ESP A via STA, enviar comando para o ESP B, que receberá via STA ,

e pelo ESP B via STA, enviar comando para o ESP A, que receberá via STA.

Nunca fiz para botões e reles, mas estou usando vários ESP8266 em rede mesh, que na realidade faz isto,

recebe algo  e reenvia para o resto da rede.

RV

Boa tarde, 

Sugiro que leia isso. Acho que é exatamente o que esta procurando:

https://www.espressif.com/en/products/software/esp-now/overview

Ola..boa noite!! Sim, essa seria uma soluçao!  Eu estou fazendo uns testes com esse protocolo mas estou preso no seguinte problema:

Esse exemplo abaixo eu consigo fazer a comunicação entre os ESPs perfeitamente, mas eu gostaria que  o rele do outro ESP só fique acionando o tempo que o botão estiver apertado (acho que é PushBoton) e desligar assim que eu soltar o botão..  No exemplo o rele muda de estado toda vez que aperto o botao.. ou seja ora ligado, ora desligado!!

pode me dar uma dica onde mexer??

Grato

exemplo EspNowBroadcast.ino

#include <WifiEspNowBroadcast.h>
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#elif defined(ESP32)
#include <WiFi.h>
#endif

static const int BUTTON_PIN =5; // "flash" button on NodeMCU, Witty Cloud, etc
static const int LED_PIN = 16; // ESP-12F blue LED

int ledState = HIGH;

void processRx(const uint8_t mac[6], const uint8_t* buf, size_t count, void* cbarg) {
Serial.printf("Message from %02X:%02X:%02X:%02X:%02X:%02X\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
for (int i = 0; i < count; ++i) {
Serial.print(static_cast<char>(buf[i]));
}
Serial.println();

digitalWrite(LED_PIN, ledState);
ledState = 1 - ledState;
}

void setup() {
Serial.begin(115200);
Serial.println();

WiFi.persistent(false);
bool ok = WifiEspNowBroadcast.begin("ESPNOW", 3);
if (!ok) {
Serial.println("WifiEspNowBroadcast.begin() failed");
ESP.restart();
}

WifiEspNowBroadcast.onReceive(processRx, nullptr);

pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, ledState);

Serial.print("MAC address of this node is ");
Serial.println(WiFi.softAPmacAddress());
Serial.println("Press the button to send a message");
}

void sendMessage() {
char msg[60];
int len = snprintf(msg, sizeof(msg), "hello ESP-NOW from %s at %lu", WiFi.softAPmacAddress().c_str(), millis());
WifiEspNowBroadcast.send(reinterpret_cast<const uint8_t*>(msg), len);

Serial.println("Sending message");
Serial.println(msg);
Serial.print("Recipients:");
const int MAX_PEERS = 20;
WifiEspNowPeerInfo peers[MAX_PEERS];
int nPeers = std::min(WifiEspNow.listPeers(peers, MAX_PEERS), MAX_PEERS);
for (int i = 0; i < nPeers; ++i) {
Serial.printf(" %02X:%02X:%02X:%02X:%02X:%02X", peers[i].mac[0], peers[i].mac[1], peers[i].mac[2], peers[i].mac[3], peers[i].mac[4], peers[i].mac[5]);
}
Serial.println();
}

void loop() {
if (digitalRead(BUTTON_PIN) == LOW) { // button is pressed
sendMessage();

while (digitalRead(BUTTON_PIN) == LOW) // wait for button release
;
}

WifiEspNowBroadcast.loop();
delay(10);
}

    Uma boa alternativa é utilizar a lib ESP-NOW da prórpia Espressif, como sugerido pelo José Gustavo. É um protocolo para comunicação entre ESPs que dispensa um intermediário (um roteador, ou um Broker - no caso do MQTT).

Referências:

https://www.espressif.com/en/products/software/esp-now/overview

https://docs.espressif.com/projects/esp-idf/en/latest/api-reference...

https://github.com/espressif/arduino-esp32/tree/master/libraries/ES...

  

Ola.. perfeito o ESP now.. mas.......

A mesma pergunta que fiz ao nosso amigo Jose Augusto, faço á voce!

Esse exemplo abaixo eu consigo fazer a comunicação entre os ESPs perfeitamente, mas eu gostaria que  o rele do outro ESP só fique acionando o tempo que o botão estiver apertado (acho que é PushBoton) e desligar assim que eu soltar o botão..  No exemplo o rele muda de estado toda vez que aperto o botao.. ou seja ora ligado, ora desligado!!

pode me dar uma dica onde mexer??

Grato

exemplo EspNowBroadcast.ino

#include <WifiEspNowBroadcast.h>
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#elif defined(ESP32)
#include <WiFi.h>
#endif

static const int BUTTON_PIN =5; // "flash" button on NodeMCU, Witty Cloud, etc
static const int LED_PIN = 16; // ESP-12F blue LED

int ledState = HIGH;

void processRx(const uint8_t mac[6], const uint8_t* buf, size_t count, void* cbarg) {
Serial.printf("Message from %02X:%02X:%02X:%02X:%02X:%02X\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
for (int i = 0; i < count; ++i) {
Serial.print(static_cast<char>(buf[i]));
}
Serial.println();

digitalWrite(LED_PIN, ledState);
ledState = 1 - ledState;
}

void setup() {
Serial.begin(115200);
Serial.println();

WiFi.persistent(false);
bool ok = WifiEspNowBroadcast.begin("ESPNOW", 3);
if (!ok) {
Serial.println("WifiEspNowBroadcast.begin() failed");
ESP.restart();
}

WifiEspNowBroadcast.onReceive(processRx, nullptr);

pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, ledState);

Serial.print("MAC address of this node is ");
Serial.println(WiFi.softAPmacAddress());
Serial.println("Press the button to send a message");
}

void sendMessage() {
char msg[60];
int len = snprintf(msg, sizeof(msg), "hello ESP-NOW from %s at %lu", WiFi.softAPmacAddress().c_str(), millis());
WifiEspNowBroadcast.send(reinterpret_cast<const uint8_t*>(msg), len);

Serial.println("Sending message");
Serial.println(msg);
Serial.print("Recipients:");
const int MAX_PEERS = 20;
WifiEspNowPeerInfo peers[MAX_PEERS];
int nPeers = std::min(WifiEspNow.listPeers(peers, MAX_PEERS), MAX_PEERS);
for (int i = 0; i < nPeers; ++i) {
Serial.printf(" %02X:%02X:%02X:%02X:%02X:%02X", peers[i].mac[0], peers[i].mac[1], peers[i].mac[2], peers[i].mac[3], peers[i].mac[4], peers[i].mac[5]);
}
Serial.println();
}

void loop() {
if (digitalRead(BUTTON_PIN) == LOW) { // button is pressed
sendMessage();

while (digitalRead(BUTTON_PIN) == LOW) // wait for button release
;
}

WifiEspNowBroadcast.loop();
delay(10);
}

  Como mencionado pelo RV, siga as sugestões de postagem. A fim de melhorar e facilitar a organização do post e análise do seu código, coloque-o em um arquivo em anexo ao invés de pro no corpo da mensagem.

    Mas, resumindo, em um pseudo-código, você pode fazer algo do tipo:

   if(botao_pressionado)

            envia(liga_rele); 

   else

           envia(desliga_rele);

Dessa forma será enviado o comando de ligar enquanto o botão estiver pressionado. Soltando-o, o comando de desliga será enviado.

teste essa mudança que fiz 

Anexos

Ola´,tudo bem? Nossa!! praticamente é isso que preciso..mas notei que as vezes ele liga o led quando eu aperto botão e as vezes ele desliga o led quando aperto o botao.. preciso que fique ligado ao apertar e desligado ao soltar..

Mas de resto, perfeito!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço