FVM Learning

Nosso maior compromisso é compartilhar conhecimentos, somos simples mas não simplórios, astuto mas não pacóvio, nos posicionamos empenhados em mostrar o caminho para desmistificação do opróbrio em legítima defesa do conhecimento compartilhado. Eng. Jemerson Marques.
Mostrando postagens com marcador Embarcados. Mostrar todas as postagens
Mostrando postagens com marcador Embarcados. Mostrar todas as postagens

terça-feira, 12 de outubro de 2021

Controlando Cargas Através do Serial Monitor com Arduino ou ESP

Fig. 1 - Controlando Cargas Através do Serial Monitor com Arduino ou ESP

Olá a Todos!

No post de hoje, iremos fazer um controle de Cargas, através do Serial Monitor da IDE Arduino, utilizando a função digitalReadString(), que receberá a String que voce digitar no Serial Monitor, para acionar uma carga que iremos utilizar um LED para exemplificar. 

Mas nada impede que você possa utilizar um módulo Relé para acionar qualquer carga, como; Motor, Lâmpadas, Equipamento de som ou qualquer outra coisa que você necessite. 

Você pode se interessar também!


Quando temos um Arduino ou mesmo um ESP conectado ao PC, com o Serial Monitor, podemos enviar uma String com o comando, que em nosso exemplo será Ligar LED e Desligar LED, como isso o Arduino receberá essa String de comando e acionará o LED.

Hardware necessário

  • Placa Arduino
  • LED - Resistor de Diodo Emissor de Luz 220 Ohm - (vermelho, vermelho, marrom, dourado)
  • Fios de ligação
  • Protoboard (opcional)

O circuito

O circuito é bastante simples. Conectamos um LED em série com um resistor de 220 ohms para limitar a corrente no LED e conectamos a porta 9 do Arduino UNO conforme mostrado na Figura 2 abaixo.

Fig. 2 -  Controlando Cargas Através do Serial Monitor com Arduino ou ESP 


Foi utilizada uma protoboard para facilitar as conexões, mas você também pode conectar os fios diretamente ao Arduino.

O código

A função Serial.readString() é a responsável por lê os caracteres do buffer serial e os move para uma determinada string.

No nosso exemplo, iremos fazer algo muito simples, que é ligar e desligar um LED usando o comando digitado no Serial Monitor.

Depois de construir o circuito, conecte sua placa Arduino ao seu computador, execute o software Arduino (IDE), copie o código abaixo e cole-o em seu IDE Arduino.

Esse algoritmo foi retirado como exemplo de uma das aulas do Curso Básico de Arduino do nosso parceiro Electronic Circuits.

Para ficar claro para os mais iniciantes em programação de Arduino, vamos explicar o código linha a linha:
  • Na linha 3, declaramos ledPin associado ao pino digital 9, onde conectamos o LED.

  • Na linha 4, declaramos a String DataIn que receberá os Comandos do Serial Monitor.

  • Na linha 6, entramos na função void setup(). Esta função é lida apenas uma vez quando o Arduino ou o ESP é iniciado.

  • Na linha 7, começamos a comunicação serial declarando a função Serial.begin(). A 115200 bits de dados por segundo, esta é a velocidade na qual seu computador se comunicará com o Arduino Serial.

  • Na linha 8, definimos a porta 9 como a saída, usando a função pinMode();
1
2
3
4
5
6
7
8
9
10
// Controlando Cargas Através do Serial Monitor

int ledPin = 9;                   // LED connected to digital pin 9
String DataIn;                   // String that will receive the commands

void setup() {
  Serial.begin(115200);                 //Begin the Serial Monitor with bounce rate in 115200
  pinMode(ledPin, OUTPUT);      // Set the digital pin as output:
}
//------------------------------------- www.elcircuits.com --------------------------------------------
  • Na linha 11, entramos na função void loop() que faz exatamente o que seu nome sugere, loops consecutivamente.

  • Na linha 12, entramos em uma condicional if, para verificar se o Serial Monitor está disponível, se sim chamamos a próxima função.

  • Na linha 13, chamamos a função Serial.readString() para ler os caracteres do Serial Monitor e enviá-los ao String DataIn.

  • Na linha 15, inserimos uma condicional if, neste caso para comparar se os caracteres são os mesmos que os escritos no Monitor Serial, em nosso exemplo "acender led", se sim ...

  • Na linha 16, entramos na função digitalWrite(), o comando ativa o ledPin para o nível HIGH, ou seja, passa de 0V a 5V, que liga o LED.

  • Na linha 17, inserimos uma condicional if, que compara se os caracteres são os mesmos que os escritos no Monitor Serial, em nosso exemplo "desligar led", se sim ...
  • Na linha 18, entramos na função digitalWrite(), o comando desativa o ledPin para o nível LOW, ou seja, passa de 5V a 0V, que desliga o LED.
1
...
11
12
13
14
15
16
17
18
19
20
21
// Controlando Cargas Através do Serial Monitor

void loop() { // The loop function runs over and over again forever
  if (Serial.available()) {                   // Check if there is any data on the serial monitor
    DataIn = Serial.readString();       // String DataIn receives the data typed in the Serial Monitor
  }
  if (DataIn == "ligar led") {            // Check if the received String is equal to "ligar led"  
    digitalWrite(ledPin, HIGH);        // If yes, the function digitalWrite turn Led ON
  } if (DataIn == "desligar led") {    // Check if the received String is equal to "desligar led" 
    digitalWrite(ledPin, LOW);         // If yes, the function digitalWrite turn Led OFF 
  }
}
//------------------------------------- www.elcircuits.com --------------------------------------------

O código completo é mostrado no esboço abaixo!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Controlando Cargas Através do Serial Monitor

int ledPin = 9;                   // LED connected to digital pin 9
String DataIn;                   // String that will receive the commands

void setup() {
  Serial.begin(115200);                     //Begin the Serial Monitor with bounce rate in 115200
  pinMode(ledPin, OUTPUT);   
}

void loop() { // The loop function runs over and over again forever
  if (Serial.available()) {                   // Check if there is any data on the serial monitor
    DataIn = Serial.readString();       // String DataIn receives the data typed in the Serial Monitor
  }
  if (DataIn == "turn led on") {            // Check if the received String is equal to "turn led on"  
    digitalWrite(ledPin, HIGH);        // If yes, the function digitalWrite turn Led ON
  } if (DataIn == "desligar led") {    // Check if the received String is equal to "turn led off" 
    digitalWrite(ledPin, LOW);         // If yes, the function digitalWrite turn Led OFF 
  }
}
//------------------------------------- www.elcircuits.com --------------------------------------------

E por hoje é só, espero que tenham gostado!!!

Quaisquer dúvidas, sugestões, correções, por favor, deixe nos comentários abaixo, que em breve estaremos respondendo.

Se inscreva no nosso Blog!!! Click Aqui FVM Learning!!!

Forte abraço.

Deus vos Abençoe

Shalom


domingo, 21 de junho de 2020

Controle de potência de carga 110/220Vac. Controlado por: ESPs Arduínos ou PICs + PCI

Fig 1 - PCI - Controle de potência de carga 110/220Vac. Controlado por: ESPs Arduínos ou PICs

Olá a Todos!!!

Hoje em dia, todos nós estamos envolvidos com circuitos de automação, disparos remoto, controle de cargas remotamente e etc., e sempre utilizamos o velho e conhecido Relê, seja ele Relê de contato, utilizando bobinas com contatos de fechamento metálico, ou com os mais avançados "caros" Relê de Estado Sólidos

Mas para controlar uma carga de potência em 220V, com níveis de controle diferentes com o seu microcontrolador isolado da rede de energia, podemos dizer que não é tão simples de encontrar um módulo para dimerização e controle de carga controlado por Microcontroladores com um custo baixo. 

Foi pensando nisso que estamos a apresentar esse pequeno circuito que pode controlar eficientemente a; luminosidade de uma lâmpada incandescente,  velocidade de um motor elétrico, temperatura de uma estufa, secador de cabelos ou qualquer outro eletrodoméstico elétrico que pode ser controlado através de um dimmer

Todo esse controle se dar ao uso de um microcontrolador que pode ser um ESP8266, ESP32, Arduino, PIC ou qualquer outro Microcontrolador que você tiver utilizando, que controla o módulo de potência baseado em um TRIAC

Funcionamento do Circuito

O TRIAC é acionado através de um DIAC que conduz à partir de uma tensão de 28V, ele é quem controla o ângulo de condução do TRIAC, disparando-o em diversos pontos do sinal senoidal da rede de energia sendo assim possível aplicar potências diferentes na carga controlada.

Para controlar o disparo do TRIAC, é usado um circuito RC, de maneira que a modificação dessa resistência, dispara o TRIAC em pontos de semi-ciclos de energia da rede. 

Para conseguirmos modificarmos a resistência controlando por um Microcontrolador, implementamos um divisor somador com 3 resistores diferentes que são conectados através de um opto-acoplador, e é através desse conjunto de resistores que formamos o Req pelo qual podemos controlar o circuito RC de retardo onde Req setado no máximo valor, o tempo de carga de C1 até o disparo do DIAC é maior, pela qual ocorre um tempo maior do semi-ciclo da energia da rede fazendo com que a carga tenha uma menor potência.

Já com Req na posição mínimo a carga de C1 é rápida e o disparo do DIAC ocorre no início do semi-ciclo, tornando a potência da carga no máximo, sendo assim, podemos controlar a potência máxima e mínima na carga. 

E vale salientar que quando utilizamos esse circuito para controlar motores, ele corta uma parte do semi-ciclo, mantendo a tensão em 220V, o que significa que o torque de um motor se mantém mesmo sendo controlado em baixa velocidade, o que o assemelha ao motor DC controlado por PWM.

Na figura 2, temos o diagrama esquemático do circuito de Controle de potência de carga 110/220Vac. Controlado por: ESPs Arduínos ou PICs com TRIAC TIC246, utilizamos 3 portas digitais do Arduino, D9, D10, D11.

Para controlar o circuito de potência, foi utilizado resistores em série para controle de corrente no entre a saída digital do Arduino (5V), e o Opto-acoplador, que utiliza um LED Infra-vermelho interiormente, e sabemos que se aplicarmos uma tensão de 5V direto no LED, ele irá queimar. 

O Opto-acoplador que utilizamos foi um MOC3021, mas, você pode está substituindo pelos  MOC3020, MOC3021, MOC3022, MOC3023, OPI3020, OPI3021, OPI3022, OPI3023, MCP3020, MCP3021, MCP3022, GE3020, GE3021, GE3022, GE3023, todos são compatíveis.
Fig. 2 - Controle de potência de carga 110/220Vac. Controlado por: ESPs Arduínos ou PICs

O Opto-Acoplador MOC

As séries de Opto-acopladores MOCs são dispositivos de driver TRIAC isolados opticamente. Esses dispositivos contêm um diodo emissor de infravermelho GaAs e um comutador bilateral de silício ativado por luz, que funciona como um TRIAC. Eles são projetados para interface entre controles eletrônicos e TRIACs de potência para controlar cargas resistivas e indutivas para operações de 115 ou 220 VCA.

E é através desse fechamento que conseguimos diminuir a resistência que colocamos em seus terminais, e baixamos a queda de tensão que ocorre através dessa resistência e assim, aumentamos a carga em C1, e o disparo do DIAC ocorre no início do semi-ciclo, aumentando a potência da carga.

Por utilizarmos 3 resistores em série/ponte, conseguimos 8 combinações de resistências diferentes, e na figura 3 temos a tabela para verdade para seguirmos e podermos programar as combinações sequenciadas nas portas do Arduino.

Fig 3 - Tabela Verdade Controle de potência de carga 110/220Vac. Controlado por: ESPs Arduínos ou PICs

A Potência do Circuito

A potência total da carga que podemos colocar em nosso circuito, só dependerá unicamente do tipo de TRIAC que você vai utilizar, em nossa montagem, fizemos com o TIC246, por ser um TRIAC que suporta até 16 Amperes, que seguindo a lei de ohms, temos que:
A potência "Pé igual a  tensão "Vmultiplicado pela corrente "I":

P = V * I 

Em nosso caso:
P = 220 * 16
P = 3.520W

Ou seja, uma carga muitíssimo grande, se falamos de carga residencial, no entanto existem diversos tipos de TRIACs para ser utilizados, deixamos alguns dos mais conhecidos e fácil de se encontrar no mercado para você poder utilizar de acordo com o seu projeto
  • TIC116 para 6A
  • TIC226 ou BT137 para 8A 
  • TIC236 para 12A
  • TIC246 para 16A

Lista de Componentes

  • T1 -------------- Triac de Potência TIC246D ou substituto *ver texto*
  • D1 -------------- Diodos DIAC DB3 ou substituto
  • U1, U2, U3 --- Opto-acoplador MOC3021 ou substituto *ver texto*
  • R1 -------------- Resistor 47Ω 1/4W  (amarelo, violeta, preto)
  • R2 -------------- Resistor 6.8KΩ 1/4W  (verde, cinza, vermelho)
  • R3 -------------- Resistor 47KΩ 1/4W  (amarelo, violeta, laranja)
  • R4 -------------- Resistor 100KΩ 1/4W  (marrom, preto, amarelo)
  • R5 -------------- Resistor 220KΩ 1/4W  (vermelho, vermelho, amarelo)
  • C1 -------------- Capacitor Poliéster / Cerâmico 0.22uF ou 220nF
  • C2 -------------- Capacitor Poliéster / Cerâmico 0.12uF ou 120nF
  • J1 --------------- Conector Barra Macho 4 pinos
  • P1, P2 ---------- Terminal Kre Block Borne Conector Duplo 2 Vias
  • Diversos ------- Placa Circuito Impresso, estanho, fios, etc.

Download:

Estamos dispondo para Download o link com os arquivos para impressão da placa de circuito impresso, são eles: Gerber, PDF layout, webp, tudo isso com link direto para o Mega.

Link Direto: Arquivos, Layout PCB, PDF, GERBER

E por hoje é só, espero que tenham gostado!!!
Qualquer dúvida, digita nos comentários que logos estaremos respondendo.
Se inscreva no nosso Blog!!! Click aqui - FVM Learning!!!
Forte abraço.

Deus vos Abençoe!
Shalom!

terça-feira, 28 de abril de 2020

Como saber, obter, pegar o MAC Address do NodeMCU ESP8266 e ESP32 na IDE Arduíno

Como saber, obter, pegar o MAC Address do NodeMCU ESP8266 e ESP32 na IDE Arduíno

Olá a Todos!!!


No Post de hoje, faremos um guia rápido de como saber, obter, pegar, o endereço MAC do NodeMCU ESP8266 ou ESP32 utilizando a IDE Arduíno. 
O endereço MAC "Media Access Control" ou (Controle de Acesso de Mídia) que muitas vezes é entendido por ""Machine Access Control" ou (Controle de Acesso a Máquinas), isso quando referido a maquinas mesmo, eles são endereços de hardware exclusivo que identificam um adaptador de rede, sendo assim jamais teremos dois dispositivos com mesmo Endereço MAC.
O endereço MAC é formado por um conjunto de 6 bytes, sendo cada byte representado por dois algarismos na forma hexadecimal, como por exemplo: "00:38:0F:2V:5M:7L".

O código

O código é bastante simples, inicializa incluindo a biblioteca ESP8266WiFi.h.
#include <ESP8266WiFi.h>
extern "C" {
#include <espnow.h>#include <user_interface.h>
}

Que é a biblioteca que ativa o módulo WiFi, seguido da inclusão da biblioteca espnow.h, com a diretriz de encaminhamento extern "C", que informa ao software o caminho para a biblioteca do ESP8266 ou ESP32.

Depois já se entra no void setup.
void setup() {
  Serial.begin(115200); Serial.println();
  Serial.println("Starting fvm learning, get mac address");
Iniciamos o Serial com a função Serial.begin(115200), decorrido da velocidade do Bounce da comunicação entre o módulo e o computador na porta serial. Depois já imprimimos uma mensagem vazia, só para pular uma linha, logo após, imprimimos a mensagem de inicialização, "Inicializando o fvm leaning, obter endereço mac".

Logo esse código imprime dois tipos de Endereços Mac, O Mac Address AP "Access Point"  e o Mac Address STA "Station".
  Serial.print("This node AP mac: ");   Serial.println(WiFi.softAPmacAddress());  Serial.print("This node STA mac: ");   Serial.println(WiFi.macAddress());}

E fechamos aqui todo o código, pois como podemos visualizar, no void loop, não ha atividades alguma.
void loop() {

}
Logo abaixo temos todo o código, não ha necessidade de fazer-se nenhuma mudança, é só você copiar o código abaixo e colar na sua IDE Arduíno, ou se preferir, você pode estar baixando pelo link de Download logo abaixo do código, "Recomendável".
//==================================================================================//
// Getting Mac Address from NodeMCU ESP8266 on IDE Arduino                          //
// Created by: Engineer Jemerson Marques, On: 21.01.2019 - FVM Learning website     //
// Available at: https://www.fvml.com.br                                            //
// 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>
}

//===================================================================================
void setup() {
  Serial.begin(115200); Serial.println();
  Serial.println("Starting fvm learning get mac address");  Serial.print("This node AP mac: ");   Serial.println(WiFi.softAPmacAddress());  Serial.print("This node STA mac: ");   Serial.println(WiFi.macAddress());}

//===================================================================================
void loop() {

}
//================================ www.fvml.com.br ===================================
Muitas vezes quando copiamos o código direto do navegador, ocorre troca de caracteres, dando assim erros no código, por isso recomendamos e disponibilizamos um link direto para baixar.

Click no Botão abaixo para baixar os arquivos: 


Logo depois de ter baixado, abra o código baixado na sua IDE Arduíno, coloque o cabo USB do NodeMCU no seu computador, sete a porta que você colocou, e faça o Upload do código.
Quando o upload do código terminar, abra o Serial Monitor e lá você irá encontrar os Endereços Mac do seu NodeMCU ESP8266 ou ESP32

E por hoje é só, espero que tenham gostado!!!

Qualquer dúvida, digita nos comentários que logos estaremos respondendo.

Se inscreva no nosso Blog!!! Click Aqui FVM Learning!!!

Forte abraço.

Deus vos Abençoe

Shalom

quinta-feira, 23 de janeiro de 2020

Controlando LEDs com dois ESP8266 utilizando Protocolo ESP-NOW

ESP-NOW - Controlando LEDs com dois ESP8266 utilizando Protocolo ESP-NOW

Olá a Todos!!!

No post de hoje, iremos fazer a comunicação entre dois ESP8266, uma conexão direta sem roteadores executando a conexão, iremos acionar duas cargas, que serão simuladas utilizando dois LEDs, 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 à 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 é ESP-NOW - E como Funciona? - Código exemplo explicado!!!

O que iremos fazer é, utilizar a biblioteca espnow.h, que é uma biblioteca desenvolvida para ESP8266, e o motivo é bastante simples, uma grande maioria de pessoas teem 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 utilizam o ESP8266 assim como eu, tenho o ESP32, mas utilizo mais o ESP8266.

O que vamos precisar

  • 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, ficando teremos apenas dois LEDs no Receiver, e duas Chaves com Dois LEDs no Controle.
No Controle, os LEDs estão ligados nas GPIOs: D2 e D3, e as MicroSwitchs estão ligados nas GPIOs D1 e D4, você pode está modificando essas GPIOs, para o que mais se adeque em seu projeto, não vai fazer diferença alguma se mudarmos, só não podemos esquecer de ligá-la na porta correta e modificar na Sketch.
No Receiver, os LEDs estão ligados nas GPIOs: D0 e D1, como já mencionado acima, você pode também estar modificando diacordo com o seu projeto. Logo abaixo temos os dois códigos para completos para você poder acompanhar.

Código do 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: %i\n", 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 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 Controle como do Receiver, nós aconselhamos a 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.

Click no Botão abaixo para baixar os arquivos: 

Você pode também está acompanhando esse post em nosso canal do youtube, é uma forma de você acompanhar o funcionamento do mesmo.


E por hoje é só, espero que tenham gostado!!!

Qualquer dúvida, digita nos comentários que logos estaremos respondendo.

Se inscreva no nosso Blog!!! Click Aqui FVM Learning!!!

Forte abraço.

Deus vos Abençoe

Shalom