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 Eletrônica. Mostrar todas as postagens
Mostrando postagens com marcador Eletrônica. Mostrar todas as postagens

quarta-feira, 5 de fevereiro de 2020

Circuito Amplificador HI-FI para Fone de Ouvido estéreo de 35mW com CI LM4910

Circuito Amplificador HI-FI para Fone de Ouvido estéreo de 35mW com CI LM4910

Olá a Todos!!!

No post de hoje, iremos apresentar um circuito amplificador de alta qualidade HI-FI para Fone de Ouvido estéreo de 35mW com Circuito Integrado LM4910, e tudo isso com pouquíssimo componentes externos.
O LM4910 é um amplificador de potência de áudio projetado principalmente para aplicativos de fones de ouvido em aplicativos de dispositivos portáteis. Ele é capaz de fornecer 35mW de potência média contínua a uma carga de 32Ω com menos de 1% de distorção (THD + N) de uma fonte de alimentação de 3,3VDC.
O LM4910 utiliza uma nova topologia de circuito que elimina capacitores de acoplamento de saída e capacitores de bypass de meia alimentação. O LM4910 contém circuitos avançados de pop e clique, que eliminam ruídos causados ​​por transientes que, de outra forma, ocorreriam durante a ativação e desativação.
Os amplificadores de potência de áudio Boomer foram projetados especificamente para fornecer potência de saída de alta qualidade com uma quantidade mínima de componentes externos. Como o LM4910 não requer capacitores de acoplamento de saída, capacitores de bypass de meia fonte ou capacitores de auto-inicialização, é ideal para aplicações portáteis de baixa potência, onde o espaço e o consumo de energia são os principais requisitos.
O LM4910 possui um modo de desligamento de baixo consumo de energia, ativado acionando o pino de desligamento com lógica baixa. Além disso, o LM4910 possui um mecanismo interno de proteção contra desligamento térmico. O LM4910 também é estável em ganho de unidade e pode ser configurado por resistores externos de ajuste de ganho.

Características

  • Elimina capacitores de acoplamento de saída do amplificador de fone de ouvido
  • Elimina o capacitor bypass de meia alimentação
  • Os circuitos avançados de clicar e clicar elimina ruídos durante a ativação e desativação
  • Modo de desligamento de corrente ultra baixa
  • Unidade de ganho estável
  • Operação 2.2V - 5.5V
  • Disponível em pacotes MSOP, LLP e SOIC que economizam espaço

Aplicações

  • Smartphones
  • PDAs
  • Retorno para Headphone
Na figura 2 logo abaixo, temos o diagrama esquemático do circuito Circuito Amplificador HI-FI para Fone de Ouvido estéreo de 35mW com CI LM4910, é uma montagem bastante simples, com poucos componentes externos para se montar. A entrada de áudio é estéreo dois canais, e você pode estar  colocando um Plug P10 fêmea estéreo ou um Plug P2 fêmea estéreo, no pino 3 do LM4910 temos o pino que aciona o MUTE do sistema amplificador, você pode está aplicando a tensão de entrada positiva nele para acionar o MUTE, ou desligando ela para deixar o sistema no estado normal de funcionamento.  
Fig. 2 - Circuito Amplificador HI-FI para Fone de Ouvido estéreo de 35mW com CI LM4910

Lista de Materiais

CI 1 ------------------------- Circuito Integrado LM4910 
R1, R2, R3, R4 ------------ Resistor 20K
C1, C2 ---------------------- Capacitor Eletrolítico 0.39uF
C3 --------------------------- Capacitor Eletrolítico 1uF
Outros ---------------------- Headphone, Fios, Soldas e Etc.

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


segunda-feira, 27 de janeiro de 2020

Circuito Transmissor de FM com Transistor BF494

Circuito Transmissor de FM com Transistor BF494

Olá a Todos!!!

Fig. 1 - Transmissor de FM  com Transistor BF494
No post de hoje, iremos apresentar um simples circuito transmissor de Frequência Modulada FM utilizando um só transistor de saída o BF494, que tem uma potência de transmissão de aproximadamente 0.3W, com um alcance que pode chegar a mais de 100m de distância, dependendo das barreiras, e tudo isso com um único transistor, o circuito oscilador tem um range de frequência que pode ser sintonizado na faixa de Freqüência Modulada, FM entre 88 à 108 Mhz, o circuito é bastante estável, e podemos utiliza-lo como um microfone sem fio, um transmissor para rádio testes, link para transmitir audio e etc. e tudo isso com uma ótima qualidade de sonora.
O circuito transmissor de FM Frequência Modulada apresentado, é um dispositivo sem fio que opera em uma faixa de alta frequência, ele é capaz de transmitir sinais de audio para a atmosfera através de ondas eletromagnéticas, e pode ser recebido por um circuito receptor de FM sintonizado na mesma frequência que o transmissor está a operar, e podemos reproduzir sinais de; músicas, voz, instrumentos musicais e etc.,  no receptor de FM.

Características

  • Alta sensibilidade de captação de audio
  • Tensão de alimentação de 3 à 9V 
  • Circuito simples de montar
  • Alcance média em condição favorável 100m
  • Alta sensibilidade na entrada

Obs. Existem Leis que dizem respeito a telecomunicação, não utilize equipamentos de telecomunicação sem a autorização das entidade responsável pela transmissão de Rádio Frequências. Nosso site ensina eletrônica aplicada a vários seguimentos, tudo isso para incrementar o conhecimento, não apoiamos qualquer tipo de operação ilegal. Para qualquer operação com RF, entre e certifique-se da legalização no órgão responsável. ANATEL - Agência Nacional de Telecomunicações.


Aplicação

  • Transmissor de audio
  • Link de audio para instrumentos
  • Microfones sem fios
  • Microfone Espião
  • Rádio de FM caseira
Na figura 2 logo abaixo, temos o diagrama esquemático do circuito transmissor de FM, é uma montagem bastante simples, com poucos componentes para se montar. A modulação do audio é estabelecida através do microfone de eletreto, você pode também retirar o resistor 1 de 4.7K e colocar um Plug P10 fêmea por exemplo, para estar utilizando com um instrumento musical como uma guitarra, um baixo ou cavaquinho ou qualquer outro instrumento que você queira deixá-lo sem fio.
O ajuste da frequência desse transmissor é dada através do ajuste de trimmer CV1. A bobina L1 deve ter de 4 a 5 voltas de fio esmaltado 22 AWG com diâmetro de 1 cm com núcleo de ar, a antena pode ser um pedaço de fio rígido com um comprimento entre 15 a 40cm, e deve ser soldada próximo ao meio da bobina, a partir da segunda bobina depois do coletor do transistor, e todos os capacitores são de cerâmicos.  
Fig. 2 - Diagrama esquemático Transmissor de FM  com Transistor BF494

Lista de Materiais

T 1 ------------------- Transistor NPN  BF494
R1 -------------------- Resistor 4.7K
R2 -------------------- Resistor 8.2K
R3 -------------------- Resistor 5.6K
R4 -------------------- Resistor 47Ω
C1 ------------------- Capacitor cerâmico/poliéster 100nF
C2 ------------------- Capacitor cerâmico/poliéster 10nF
C3 ------------------- Capacitor cerâmico 5.6pF
C4 ------------------- Capacitor cerâmico/poliéster 220nF
Mic ------------------ Microfone de Eletreto
CV1 ----------------- Trimmer porcelana 3.3pF
Bobina -------------- Ver texto
Outros -------------- Fios, Soldas e Etc.


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


sexta-feira, 17 de janeiro de 2020

Circuito Amplificador Classe D 3.7W com CI MAX98306

Circuito Amplificador Classe D 3.7W com CI MAX98306

Olá a Todos!!!

Fig. 1 - Circuito Amplificador Classe D
No post de hoje, iremos apresentar um amplificador estéreo de 3,7W Classe D que oferece desempenho de áudio tão bom, que pode ser confundido com um Classe AB, no entanto com a eficiência de um Classe D. É um circuito de fácil construção, devido ao pequeno número de componentes externos.
Este dispositivo oferece cinco configurações de ganho selecionáveis (6dB, 9dB, 12dB, 15dB e 18dB) definidas por uma única entrada de seleção de ganho (GAIN).
Os circuitos de controle de limitação de emissões ativas, taxa de borda e overshoot combinados com um esquema de modulação por espectro de espalhamento sem filtro (SSM) fornecem excelente desempenho EMI, eliminando a necessidade de filtragem de saída encontrada nos dispositivos tradicionais Classe D. Esses recursos reduzem a contagem de componentes do aplicativo.
A corrente de repouso do Circuito integrado é de 2,0mA com uma fonte de 3,7V aumenta a vida útil da bateria em aplicações portáteis.
O Circuito Integrado MAX98306 está disponível em um pacote TDFN de 14 pinos (3mm x 3mm x 0,75mm) especificado na faixa de temperatura estendida de -40NC a + 85NC.

Características principais

  • Potência de saída 3.7W a 3Ω, 10% THD, 1.7W a 8Ω, 10% THD, com alimentação de 5V
  • Passa o limite de EMI não filtrado com até 309cm de cabo do alto-falante
  • PSRR alto de 83dB a 217Hz
  • Modulação por Espectro de Espalhamento e Limitação de Emissões Ativas
  • Cinco ganhos selecionáveis por pinos
  • Excelente supressão de clique e pop
  • Proteção térmica e de sobrecorrente
  • Modo de desligamento por corrente baixa
  • Economia de espaço, 3 mm x 3 mm x 0,75 mm, TDFN de 14 pinos

                  Aplicações

                  • Smartphones
                  • Comprimidos
                  • Telefone celular
                  • Alto-falantes acessórios
                  • Leitores MP3
                  • Leitores de áudio portáteis
                  • Telefones VoIP
                  Na Figura 2 temos o diagrama esquemático do circuito amplificador de audio classe D, para podermos acompanhar as montagens e a disposição dos componentes, como podemos visualizar, esse circuito só tem 3 componentes externos, que são dois capacitores de desacoplamento na entrada, e temos também um capacitor de filtro na conexão de tensão que serve para evitar interferências na linha de tensão.
                  Fig. 2 - Diagrama do Circuito Amplificador Classe D

                  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


                  segunda-feira, 13 de janeiro de 2020

                  O que é ESP-NOW - E como Funciona? - Código exemplo explicado!!!

                  O que é ESP-NOW - E como Funciona? Código exemplo explicado!!!

                  Olá a Todos!!!

                  No Post de hoje, iremos abordar um assunto de suma importância para quem trabalha, desenvolve, ou projeta circuitos para automação e controle IoT da vida... Iremos entender melhor o Protocolo ESP-NOW. Para quem já está no contexto, sabe que existem vários tipos de protocolos abordados sobre os ESPs, seja ESP32ESP8266 ou ESP8285
                  O ESP-NOW é mais um protocolo desenvolvido pela empresa Chinesa Espressif Sistemas, e permite que vários dispositivos se comuniquem entre si sem utilizar a rede Wi-Fi padrão. 

                  O ESP-NOW permite um controle direto e de baixa latência, menor que 10ms, podendo controlar vários dispositivos inteligentes tais como, luzes, dispositivos remotos, controles sem fios e etc, sem a necessidade de conexão com um roteador. Este método é eficiente em termos de economia de energia e conveniente para ser utilizado em dispositivos que trabalhe com pilhas ou baterias, como controles remotos, sensores de incêndio wireless, joystick sem fio e etc.
                  O protocolo é semelhante à conectividade sem fio de baixa potência de 2,4 GHz que é frequentemente implantada em mouses e teclados sem fio. Assim, o emparelhamento entre dispositivos é necessário antes de sua comunicação. Após o emparelhamento, a conexão é segura e ponto-a-ponto, sem necessidade de uma rede de apoio, e com uma velocidade de conexão surpreendentemente rápida. 
                  Com o protocolo ESP-Now, o usuário pode implementar dispositivos controladores de baixíssima energia para se comunicar com dispositivos clientes; tais dispositivos de controle podem ter duração de bateria dependendo do tipo de uso de vários anos.

                  O que é o Protocolo ESP-NOW

                  O protocolo ESP-NOW é um protocolo de comunicação M2M (Machine To Machine) ou seja, é a comunicação entre ESPs8266 (mestre e esclavo) ou mesmo, ambos os seguimentos, devido ao protocolo ESP-NOW ter também os modos de Mestre/Escravo cujo o dispositivo podem se tornar mestre e escravo ao mesmo tempo, que interagem entre si, podendo responderem ambos comandos enviados por outro ESP, e ainda podendo responder não só ponto à ponto, mas, um ESP Mestre/Escravo pode responder ou enviar comandos para outros ESPs escravos, mestres, ou mestre/escravo.

                  Recursos do protocolo ESP-NOW

                  • Comunicação Uni-cast criptografada e não criptografada.
                  • Dispositivos pares criptografados e não criptografados.
                  • Carga útil de até 250 bytes.
                  • A função de retorno de chamada de envio que pode ser configurada para informar a camada de aplicação o sucesso ou falha na transmissão.

                  Limitações do protocolo ESP-NOW

                  • Não Suporta BroadCast
                  • Pares criptografados limitados.
                  • No máximo 10 pares criptografados são suportados no modo Station; 6 no máximo no modo SoftAP ou SoftAP + Station. Vários pares não criptografados são suportados, no entanto, seu número total deve ser menor que 20, incluindo pares criptografados.
                  • A carga útil é limitada a 250 bytes.

                  Como funciona o protocolo ESP-NOW

                  O funciona com um protocolo de comunicação WI-FI sem conexão, definido pelo Espressif. No ESP-NOW, os dados do aplicativo são encapsulados em um quadro de ação específico do fornecedor e depois transmitidos de um dispositivo WI-FI para outro sem conexão. A CTR com o protocolo CBC-MAC (CCMP) é usada para proteger o quadro de ação por segurança.
                  Iremos exemplificar o funcionamento do protocolo ESP-NOW dando um exemplo de comunicação básico, nesse exemplo iremos utilizar um par de NodeMCU ESP8266 pelo qual iremos enviar dados para um outro NodeMCU ESP8266, e iremos explicar o código por partes para que possamos entender melhor o funcionamento dessa comunicação.
                  Começaremos pelo biblioteca espnow.h que será utilizada para estabelecer a comunicação entre os ESP8266, será essa biblioteca que iremos utilizar em nosso exemplo, as funções intrínsecas na biblioteca espnow.h utilizados para execução das comunicações são bastante abrangentes, no entanto iremos centralizar nas principais funções seguindo um exemplo de comunicação entre dois NodeMCU, que irá estabelecer uma comunicação entre eles e um dos ESP8266 irá acionar um botão e o outro receberá essa informação e irá acender o LED.

                  Inicializando ESP-NOW

                  O primeiro passo para fazer essa comunicação entre os ESPs8266 é inicializar a biblioteca, existem duas bibliotecas mais conhecidas desenvolvidas para ESPs, a primeira é a biblioteca: esp_now.h, que é uma biblioteca desenvolvida para ser utilizada com ESP32. e a outra é biblioteca espnow.h, essa é uma biblioteca desenvolvida para ser utilizada com o ESP8266 e é a biblioteca que iremos utilizar em nosso exemplo.

                  Código ESP-NOW do "Master"

                  O termo utilizado "Master" na verdade é uma atribuição que fazemos para determinar qual será o ESP que irá "comandar" digo "entre aspas" pois todos os ESPs estão em modo STA "Station", que nesse caso ambos podem ser "Master" não ha distinção entre ambos, então utilizamos a atribuição só para termos base e entendermos melhor os códigos.
                  Nas primeiras linhas - iniciaremos o código chamando as bibliotecas que são pertinentes para o uso com o ESP8266:
                  8
                  9
                  10
                  11
                  #include <ESP8266WiFi.h>                                      
                  extern "C" {
                  #include <espnow.h>
                  }
                  

                  Na linha 13 - Temos o endereço Mac do Módulo ESP Slave, e é ele que irá receber os comandos, e acionará "as cargas" os LEDs. 
                  Na linha 14 - definimos o canal da transmissão WI-FI para o canal 4. 
                  E na linha 15 - temos uma variável tipo inteira para comutar o estado anterior do Led, já estamos determinando o estado de inicialização dela no nível baixo, LOW.
                  13
                  14
                  15
                  uint8_t mac[] = {0x36, 0x33, 0x33, 0x33, 0x33, 0x33};                               
                  #define WIFI_CHANNEL 4
                  int prevstate = LOW;

                  Na Linha 19 à 23 - temos a declaração das estruturas de controle de dados 1 e 2, que devem estar correspondidas com o ESP Slave, e deverá ser programado com as mesmas configurações. No primeiro parâmetro temos a estrutura de controle de dados 1, será o (buttonpressed) que corresponderá o pressionar do botão.
                  19
                  20
                  21
                  22
                  23
                  struct __attribute__((packed))                               
                  DataStruct {
                  char text[32];
                  };
                  DataStruct buttonpressed;

                  Na Linha 25 à 29 - Temos a estrutura de controle de dados 2, que será o (buttonreleased) que corresponderá quando soltarmos o botão.
                  25
                  26
                  27
                  28
                  29
                  struct __attribute__((packed)) 
                  DataStruct {
                  char text[32];
                  };
                  DataStruct2 buttonreleased;
                  

                  Depois dos processos de declarações, estruturas, e inclusão de variáveis, entraremos no Void setup() onde iremos atribuir os parâmetros de pinagens, inicialização das funções, os modos com que o controlador irá funcionar, ou seja, uma configuração inicial geral.

                  Na Linha 32 - Iniciamos a função void setup()
                  Na linha 33 
                  - Declaramos a GPIO D1 como entrada, utilizando o parâmetro INPUT_PULLUP, que estabelece o resistor pullup interno, fazendo com que não precisemos colocar um resistor externo.
                  Na linha 34 - Declaramos a GPIO D0 como Saída, que será utilizada com o LED de indicação.
                  Na linha 35 - Temos a inicialização do Serial Monitor e o parâmero de velocidade de transferência de dados setada em (115200).

                  32
                  33
                  34
                  35
                  void setup() {                                            
                     pinMode(D1,INPUT_PULLUP);
                     pinMode(D0,OUTPUT);
                     Serial.begin(115200);

                  Na Linha 37 - Iniciamos o modo em que o ESP irá trabalhar que no caso, estamos utilizando o Modo Station "STA", ambos os ESPs irão trabalhar com esse mesmo modo.
                  Na Linha 38 - Iniciamos a função que certifica de que nada irá estar conectado ao ESP antes de ele iniciar os parâmetros de transmissão ESP-NOW.
                  37
                  38
                  
                  WiFi.mode(WIFI_STA);                                          
                  WiFi.disconnect();
                  

                  Na Linha 39 - Utilizamos a função Serial.printf() para imprimir o endereço Mac do módulo Master ESP8266.
                  Na Linha 40 - Utilizamos a função Serial.printf() para imprimir o endereço Mac do Módulo Slave ESP8266.
                  Na Linha 41 Utilizamos a função Serial.printf() para imprimir o Canal utilizado para fazer a transmissão e recepção entre os módulos.
                  39
                  40
                  41
                  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);
                  

                  Na Linha 42 - Faz-se uma comparação declarando uma condicional if, que verifica se a função esp_now_init(), que inicia o protocolo ESP-NOW, foi inicializada corretamente, essa função tem dois valores de retorno: 0 = Erro, e 1 = OK, então na comparação, analisa-se a função esp_now_init(), se o valor de retorno for igual a 1, a inicialização foi estabelecida com sucesso, se o valor de retorno for igual a 0, na próxima linha...
                  Na Linha 44 - Ele imprime no Serial Monitor a mensagem de falha na inicialização.
                  42
                  44
                  if (esp_now_init() != 0){
                  Serial.println("*** ESP_Now initialization failed");}
                  

                  Na Linha 46 - Temos a função que determinará o modo de trabalho do ESP8266, que no nosso caso, estamos colocando-a como Master:
                  Existem ainda dois modos a mais que podem ser implementadas substituindo os parâmetros apropriados: 
                  ESP_NOW_ROLE_SLAVE  para coloca-lo no modo Slave.
                  ESP_NOW_ROLE_COMBO para coloca-lo no modo Master + Slave

                  Na Linha 47 - Temos a função que adiciona os dados requeridos do Slave; Armazena o Endereço MAC; Seta o Modo de operação Módulo; Seta o Canal do Módulo; Seta a chave de 16 bytes necessária para a comunicação ESP-NOW; E seta o comprimento da chave, que deve ter 16 bytes
                  No nosso caso, estamos passando esses dois últimos parâmetros com NULL, e 0. Quando colocamos zero no ultimo parâmetro de retorno, isso quer dizer que a comunicação está OK.
                  Na Linha 48 - temos a função strcpy() que copia a string "Button pressed" e aponta para a fonte de destino a string tipo char "text" que está concatenada com a estrutura de dados buttonpressed.
                  Na Linha 49 - Temos a mesma função, o que difere é a string e para onde ela aponta.
                  46
                  47
                  48
                  49
                  50
                  esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);                                             
                  esp_now_add_peer(mac, ESP_NOW_ROLE_SLAVE, WIFI_CHANNEL, NULL, 0);
                  strcpy(buttonpressed.text,"Button pressed");
                  strcpy(buttonreleased.text,"Button Released");
                  Serial.println("Setup finished");
                  

                  Na Linha 54 - Entramos  na função void loop, que é a função que fica rodando todo o programa que estiver dentro dessa função, no nosso caso fizemos outra função dentro dela.
                  Na Linha 55 - Temos a função sendData, que constantemente fica analisando se houve o pressionar da chave Switch, e se sim, ele envia esses dados para o ESP Client.
                  54
                  55
                  
                  void loop() {                                       
                      sendData();
                  

                  Na Linha 59 - Entramos  na função void sendData, que como já dito acima é responsável por verificar o pressionar do botão e enviar se caso foi pressionado ou solto.
                  Na Linha 60 - Declaramos uma variável "inttipo Inteira, que recebe a função digitalRead(D1), que ler se a chave Switch que está ligado na GPIO D1 foi pressionada, caso ela seja LOW ou HIGH, a variável currentstate recebe essa informação, e as mantém na sua memória.
                  59
                  60
                  void sendData() {                                       
                    int currentstate = digitalRead(D1);

                  Na Linha 61 - Temos a função if, que faz um comparação lógica se a variável global, descrita no início do programa prevstate é diferente da variável currentstate que recebeu a leitura da GPIO D1. 
                  Na Linha 62 - Entramos em outro if dentro do if anterior, que faz uma comparação se o estado da variável currentstate é igual a HIGH ou LOW
                  61
                  62
                  if(prevstate != currentstate){                                 
                    if(currentstate == HIGH){
                  

                  Na Linha 63 -  Temos uma variável bs de 8 bits que recebe o operador sizeof que retorna o tamanho da string buttonpressed. e armazena na varável bs.
                  Na Linha 64 -  Temos a função memcpy padrão que armazena todo conteúdo que está dentro dela na memória.
                  63
                  64
                  
                  uint8_t bs[sizeof(buttonpressed)];                               
                    memcpy(bs, &buttonpressed, sizeof(buttonpressed));
                  

                  Na Linha 65 - Temos a função que envia o pacote de dados para o ESP Salve que tenha o endereço MAC cadastrado no início do código, como já apresentado na Linha 6. 
                  Essa função é seguido de três parâmetros que vale a pena abordar:
                  1° Parâmetro: 
                  Endereço MAC  Se for NULL, o pacote será enviado para todos os endereços MAC gravados pelo ESP-NOW.
                  2° Parâmetro: 
                  Dados a ser enviado
                  3° Parâmetro: 
                  Tamanho dos dados
                  Na Linha 66 - Temos a já bastante conhecida função que imprime no serial monitor a string buttonpressed.
                  Na Linha 67 - Temos a também conhecida função que escreve na porta digital IO o estabelecido dentro da sua função com dois parâmetros (Porta, Estado).
                  65
                  66
                  67
                  esp_now_send(NULL, bs, sizeof(buttonpressed));                          
                    Serial.println(buttonpressed.text);
                    digitalWrite(D0, LOW);

                  Na Linha 68 - Temos a função else if que faz a comparação, só que desta vez, é para o movimento oposto, ou seja se o botão foi solto, ele armazena os dados se LOW ou HIGH
                  Na Linha 69 - Também temos a mesma variável bs de 8 bits que recebe o operador sizeof que retorna o tamanho da string buttonreleased. e armazena na varável bs.
                  Na Linha 70 Também temos a função memcpy padrão que armazena todo conteúdo que está dentro dela na memória.
                  Na Linha 71 Temos a função que envia o pacote de dados para o ESP Salve que tenha o endereço MAC cadastrado no início do código, como já apresentado na Linha 6. 
                  Na Linha 72 - Temos a já bastante conhecida função que imprime no serial monitor a string buttonreleased.
                  Na Linha 73 - Temos a também conhecida função que escreve na porta digital IO o estabelecido dentro da sua função com dois parâmetros (Porta, Estado).
                  Na Linha 75 - Temos a variável global prevstate recebendo uma nova atualização do ultimo estado da variável currentstate.
                  68
                  69
                  70
                  71
                  72
                  73
                  75
                  }else if(currentstate == LOW){                   
                      uint8_t bs[sizeof(buttonreleased)];
                      memcpy(bs, &buttonreleased, sizeof(buttonreleased));
                      esp_now_send(NULL, bs, sizeof(buttonreleased));
                    Serial.println(buttonreleased.text);
                    digitalWrite(D0, HIGH);}
                  }prevstate = currentstate;
                  

                  E aqui finalizamos a explicação básica do código ESP-NOW Master.

                  Código ESP-NOW do "Slave"

                  No Slave, iremos resumir, daremos explicações só nos parâmetros que não foram explicados no código do Master acima, para não ficar tão repetitivo.
                  Nas primeiras linhas - Assim como o Master iniciaremos o código chamando as bibliotecas que são específicas para o ESP8266, com a diferença que temos a biblioteca user_interface.h para se incluir, essa biblioteca é necessária para acessar os Timer`s. do ESP8266.
                  7
                  8
                  9
                  10
                  
                  #include <ESP8266WiFi.h>                                      
                  extern "C" {
                  #include <espnow.h>
                  #include <user_interface.h>
                  

                  Na Linha 17,18,19 - Temos uma função void initVariant(), que seta o endereço MAC Access Point do ESP8266, pelo MAC que você determina na String mac.
                  17
                  18
                  19
                  void initVariant() {                          
                    WiFi.mode(WIFI_AP);
                    wifi_set_macaddr(SOFTAP_IF, &mac[0]);


                  Na Linha 45 - Temos a função que determinará o modo de trabalho do ESP8266, que no nosso caso, estamos colocando-a como Slave.
                  Na Linha 46 - Temos a função de registro do CallBack que é responsável por  registrar as informações vinda do Master, com o argumento da função que será executada e está declarada dentro da função cb.
                  45
                  46
                  
                  esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);                             
                  esp_now_register_recv_cb(receiveCallBackFunction);
                  



                  Na Linha 55 - Temos a função que recebe os dados vindo do ESP Controle, e que será utilizado para fazer o disparo do LED.
                  Na Linha 56 - Também temos a função memcpy padrão que armazena todo conteúdo que está dentro dela na memória.

                  Na Linha 62 - Temos a função que faz um flip-flop do Led1, ou seja, ele faz a leitura do estado do Led1 e determina seu estado inverso ao estado dele mesmo. Ou seja: cada vez que entra na função receiveCallBackFunction ele escreve o estado do Led1 ao seu estado anterior... uma vez liga, outra vez desliga.
                  55
                  56
                  62
                  void receiveCallBackFunction(uint8_t *senderMac, uint8_t *incomingData, uint8_t len) {         
                    memcpy(&myData, incomingData, sizeof(myData));;
                   digitalWrite(Led1, !digitalRead(Led1));



                  E aqui também termina as principais partes do código do Salve.

                  O código utilizado esta disponível para baixar no link direto logo abaixo, sinta-se à vontade para baixar e fazer suas próprias modificações.

                  Click Aqui para Baixar: 


                  Qualquer dúvida, ou sugestões ou mesmo correções, "a final de contas, somos todos eternos aprendizes", pode escrever nos comentários, e no que pudermos responder, faremos!!!

                  Se inscreva no nosso Blog!!! Click Aqui FVM Learning!!!
                  Forte abraço.

                  Deus vos Abençoe
                  Shalom