Controlando LEDs com dois ESP8266 utilizando Protocolo ESP-NOW
Olá a Todos!
No post de hoje, faremos a comunicação entre dois ESP8266, uma conexão direta sem roteadores executando a conexão, acionaremos duas cargas, que serão simuladas utilizando dois LEDs, e utilizaremos o protocolo de comunicação ESP-NOW.
Essa protocolo foi desenvolvido pela fabricante chinesa ESPRESSIF. Esse protocolo tem sido bastante utilizado em muitos Gadgets como: Mouses sem fios, teclados sem fio, sensores de incêndios Wireless, controles remotos, etc. por ter uma conexão rápida e direta e com pouco consumo de energia.
Se você não conhece esse protocolo, ou deseja saber mais sobre ele, recomendamos a você dar uma olhadinha em nosso POST que explica o código detalhando por etapas e cada parte dos processos do código:
O que faremos é, utilizar a biblioteca espnow.h, sendo uma biblioteca desenvolvida para ESP8266, e o motivo é bastante simples, uma grande maioria de pessoas têm o ESP8266, e códigos utilizando a biblioteca espnow.h que é a biblioteca utilizada no ESP8266, são bastante difíceis.
O mais comum de se encontrar são códigos que utilizam a biblioteca esp-now.h biblioteca utilizada no ESP32, mas, a grande maioria ainda utiliza o ESP8266 assim como eu, tenho o ESP32, mas utilizo mais o ESP8266.
Você pode se interessar também!
- Unit DualMCU: A Poderosa Placa de Desenvolvimento com ESP32 e Raspberry Pi RP2040!
- Como Ler Valores Analógicos ADC Usando NodeMCU ESP8266 – IDE Arduíno!
- Como Hackear Circuito Módulo Relé para funcionar com ESP8266 & ESP32 com 3.3V
- Como utilizar o Botão Flash do NodeMCU ESP8266
- Piscando LEDs Independentes sem delay() utilizando Função millis()
- Alarme de Segurança com Sensor PIR e ESP8266 – Sensor de Movimento
O que precisaremos!
- Precisaremos ter instalado a biblioteca espnow.h na IDE Arduíno. Se você não o fez, ou estar em dúvidas se já está instalado, confere no nosso post, como instalar a biblioteca espnow.h na IDE Arduíno.
- 2 – ESP8266
- 4 – LEDs “2 opcionais”
- 2 – Chave Micro-Switch
- Protoboards, Fios rabichos, etc.
A montagem é bastante simples, teremos apenas dois LEDs no Circuito Receiver, e duas Micro-Chaves com Dois LEDs no Circuito Controle.
No Circuito Controle, os LEDs estão ligados nas GPIOs: D2 e D3, e as Micro-Chaves estão ligados nas GPIOs D1 e D4, você pode está modificando essas GPIOs, para o mais adequado em seu projeto, não fará diferença alguma se mudarmos, só não podemos esquecer de ligá-la na porta correta e modificar o código na (Sketch).
No Circuito Receiver, os LEDs estão ligados nas GPIOs: D0 e D1, como já mencionado acima, você pode também estar modificando conforme o seu projeto. Logo abaixo temos os dois códigos para completos para você poder acompanhar.
Código do Circuito Controle
//=================================================================================================// // MASTER // // Controlling LEDs with Two ESP8266 Uses ESP-NOW Protocol // // Edited and Adapted by: Engineer Jemerson Marques, On: 22.12.2019 - FVM Learning website // // Available at: https://www.fvml.com.br and on Youtube channel // // https://www.youtube.com/c/FVMLearning - I hope you have fun - Good luck // //-------------------------------------------------------------------------------------------------// #include <ESP8266WiFi.h> extern "C" { #include <espnow.h> } // This is the slave MAC Address which receives the data uint8_t mac[] = {0x5C, 0xCF, 0x7F, 0x4C, 0x82, 0x5C}; //AP MAC SLAVE'S ADDRESS #define WIFI_CHANNEL 4 int prevstate_1 = LOW; int prevstate_2 = LOW; // Data structure, must be the same for the slave struct __attribute__((packed))DataStruct { char text[32]; }; DataStruct button_1; DataStruct button_2; //===================================================================================================== void setup() { pinMode(D1, INPUT_PULLUP); pinMode(D4, INPUT_PULLUP); pinMode(D2, OUTPUT); pinMode(D3, OUTPUT); Serial.begin(115200); Serial.println(); Serial.println("Starting EspnowController.ino"); WiFi.mode(WIFI_STA); // Station mode for esp-now controller WiFi.disconnect(); Serial.printf("This mac: %s, ", WiFi.macAddress().c_str()); Serial.printf("slave mac: %02x%02x%02x%02x%02x%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); Serial.printf(", channel: %in", WIFI_CHANNEL); if (esp_now_init() != 0) { Serial.println("*** ESP_Now initialization failed"); } esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER); esp_now_add_peer(mac, ESP_NOW_ROLE_SLAVE, WIFI_CHANNEL, NULL, 0); strcpy(button_1.text, "Button 01 pressed"); strcpy(button_2.text, "Button 02 pressed"); Serial.println("Setup finished"); } //====================================================================================================== void loop() { sendData(); } //====================================================================================================== void sendData() { int currentstate_1 = digitalRead(D4); if (prevstate_1 != currentstate_1) { if (currentstate_1 == LOW) { uint8_t bs[sizeof(button_1)]; memcpy(bs, &button_1, sizeof(button_1)); esp_now_send(mac, bs, sizeof(button_1)); Serial.println(button_1.text); digitalWrite(D2, !digitalRead(D2)); } } prevstate_1 = currentstate_1; int currentstate_2 = digitalRead(D1); if (prevstate_2 != currentstate_2) { if (currentstate_2 == LOW) { uint8_t bs[sizeof(button_2)]; memcpy(bs, &button_2, sizeof(button_2)); esp_now_send(mac, bs, sizeof(button_2)); Serial.println(button_2.text); digitalWrite(D3, !digitalRead(D3)); } } prevstate_2 = currentstate_2; } //========================================== www.fvml.com.br ===========================================
Código do Circuito Receiver
//=================================================================================================// // SLAVE // // Controlling LEDs with Two ESP8266 Uses ESP-NOW Protocol // // Edited and Adapted by: Engineer Jemerson Marques, On: 22.12.2019 - FVM Learning website // // Available at: https://www.fvml.com.br and on Youtube channel // // https://www.youtube.com/c/FVMLearning - I hope you have fun - Good luck // //-------------------------------------------------------------------------------------------------// #include <ESP8266WiFi.h> extern "C" { #include <espnow.h>#include <user_interface.h> } uint8_t mac[] = {0x5C, 0xCF, 0x7F, 0x4C, 0x82, 0x5C}; //AP MAC SLAVE'S ADDRESS //=====================================================================================================int Led1 = D0; int Led2 = D1; void initVariant() { WiFi.mode(WIFI_AP); wifi_set_macaddr(SOFTAP_IF, &mac[0]); } //=====================================================================================================#define WIFI_CHANNEL 4// Must match the controller structstruct __attribute__((packed))DataStruct { char text[32]; unsigned int time;}; DataStruct receivedData;//===================================================================================================== void setup() { Serial.begin(115200); Serial.println(); Serial.println("Starting EspnowSlave.ino");Serial.print("This node AP mac: "); Serial.println(WiFi.softAPmacAddress());Serial.print("This node STA mac: "); Serial.println(WiFi.macAddress());pinMode(Led1, OUTPUT); pinMode(Led2, OUTPUT);if (esp_now_init() != 0){ Serial.println("*** ESP_Now init failed");while (true) {}; }esp_now_set_self_role(ESP_NOW_ROLE_SLAVE); esp_now_register_recv_cb(receiveCallBackFunction); Serial.println("End of setup - waiting for messages");} //====================================================================================================== void loop() { } //====================================================================================================== void receiveCallBackFunction(uint8_t *senderMac, uint8_t *incomingData, uint8_t len) { memcpy(&receivedData, incomingData, sizeof(receivedData)); String DataCompare = String(receivedData.text); if(DataCompare == "Button 01 pressed"){ digitalWrite(Led1, !digitalRead(Led1)); Serial.println(" Message = " + DataCompare); } if(DataCompare == "Button 02 pressed"){ digitalWrite(Led2, !digitalRead(Led2)); Serial.println(" Message = " + DataCompare); } } //========================================== www.fvml.com.br ===========================================
Logo abaixo temos um link com os arquivos dos códigos do Circuito Controle como do Circuito Receiver.
Recomendamos você baixar e não copiar no código acima, pois pode vir com algum erro de acentuação ou qualquer outra coisa, então disponibilizamos o link para baixar.
Clique no Link Abaixo Para Descarregar os arquivos:
>>> Arquivos para Baixar! <<<
Você pode também está acompanhando esse post em nosso canal do YouTube, é uma forma de você acompanhar o funcionamento do mesmo.
Pessoal, o trabalho é grande, escrever, montar, testar, elaborar a PCI, armazenar para baixar, tudo isso dá muito trabalho, e nada cobramos por isso!
E por hoje é só, espero que tenham gostado!
Qualquer dúvida, digita nos comentários que logos estaremos respondendo.
Se inscreva no nosso Blog! Clique Aqui — FVM Learning!
Forte abraço.
Deus vos Abençoe
Shalom!
English
Español




