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 Automação. Mostrar todas as postagens
Mostrando postagens com marcador Automação. Mostrar todas as postagens

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




terça-feira, 26 de novembro de 2019

O que é Protocolo MQTT e como Funciona? Principais Aplicações

O que é Protocolo MQTT e como Funciona? Principais Aplicações

Olá a Todos!!!

No post de hoje, iremos entender o que é o protocolo MQTT (Message Queuing Telemetry Transport), de que forma ele funciona, e quais são suas principais aplicações no mundo IoT.

O que é MQTT?

Fig 1 - O que é Protocolo MQTT e como Funciona?
MQTT é um protocolo de mensagens publish/subscribe, projetado para o transporte de telemetria em enfileiramento de mensagens simples e leve, com baixa largura de banda, e protocolo de conectividade  machine-to-machine (M2M) ou "máquina para máquina", que funciona no topo do protocolo TCP / IP
Ele foi projetado para conexões remotos onde um "pequeno tamanho de código" é necessário ou a largura de banda da rede é limitada.
Ao utilizar o protocolo MQTT, você pode enviar comandos para controlar portas de saídas, ler e publicar dados de sensores, controlar remotamente esses dispositivos e muito mais. Você pode estabelecer comunicação entre vários dispositivos.

Quem projetou o MQTT?

O MQTT foi projetado pelo Dr. Andy Stanford-Clark, da IBM, e Arlen Nipper, da Arcom (atual Eurotech), em 1999, para fazer a conexão dos sistemas de telemetria de oleoduto por satélite.
Embora tenha começado como um protocolo proprietário, foi liberado Royalty livre em 2010 e tornou-se um padrão OASIS em 2014.

Quais os Padrões do MQTT?

Existem as versões V5.0 e V3.1.1 que agora são padrões OASIS (V3.1.1 também foi ratificado pela ISO).
Como o MQTT está relacionado ao protocolo SCADA e ao MQIsdp?
O “protocolo SCADA” e o “MQ Integrator SCADA Device Protocol” (MQIsdp) são nomes antigos do que agora é conhecido como MQ Telemetry Transport (MQTT). O protocolo também é conhecido como “WebSphere MQTT” (WMQTT), embora esse nome também não seja mais utilizado.

O MQTT utiliza alguma portas padrão?

Certamente sim. A porta padrão utilizada pelo MQTT TCP / IP 1883 que é uma porta reservada com o IANA para uso com o MQTT. A porta TCP / IP 8883 também está registrada, para usar o MQTT sobre SSL.

O MQTT tem suporte para segurança?

Podemos passar um nome de usuário e senha com um pacote MQTT na V3.1 do protocolo. A criptografia através da rede pode ser tratada com SSL, independentemente do protocolo MQTT em si (vale a pena notar que o SSL não é o mais leve dos protocolos e adiciona uma sobrecarga de rede significativa). Segurança adicional pode ser adicionada por um aplicativo que criptografa dados que envia e recebe, mas isso não é algo embutido no protocolo, a fim de mantê-lo simples e leve.

Quais são as vantagens do MQTT?

O protocolo MQTT permite que seu sistema SCADA acesse dados da IoT. O MQTT traz muitos benefícios poderosos para o seu processo:
  • Distribua informações com mais eficiência
  • Aumentar a escalabilidade
  • Reduza drasticamente o consumo de largura de banda da rede
  • Reduza as taxas de atualização para segundos
  • Muito adequado para sensoriamento remoto e controle
  • Maximizar a largura de banda disponível
  • Sobrecarga extremamente leve
  • Muito seguro com segurança baseada em permissão
  • Usado pela indústria de petróleo e gás, Amazon, Facebook e outras grandes empresas
  • Economiza tempo de desenvolvimento
  • O protocolo de publicação / assinatura coleta mais dados com menos largura de banda em comparação com os protocolos de pesquisa.

Como o MQTT Funciona

MQTT é um protocolo de publicação / assinatura que permite que dispositivos de borda de rede publiquem em um broker. Os clientes se conectam a esse broker, que medeia a comunicação entre os dois dispositivos. Cada dispositivo pode se inscrever ou se registrar em tópicos específicos. Quando outro cliente publica uma mensagem em um tópico inscrito, o broker encaminha a mensagem para qualquer cliente que se inscreveu.
MQTT é bidirecional e mantém o reconhecimento da sessão com estado. Se um dispositivo de borda de rede perder a conectividade, todos os clientes inscritos serão notificados com o recurso "Última Vontade e Testamento" do servidor MQTT, para que qualquer cliente autorizado no sistema possa publicar um novo valor de volta no limite de borda dispositivo de rede, mantendo a conectividade bidirecional.
A leveza e eficiência do MQTT possibilitam aumentar significativamente a quantidade de dados que estão sendo monitorados ou controlados. Antes da invenção do MQTT, aproximadamente 80% dos dados eram deixados em locais remotos, embora várias linhas de negócios pudessem ter usado esses dados para tomar decisões mais inteligentes. Agora, o MQTT torna possível coletar, transmitir e analisar mais dados sendo coletados.
Diferentemente do modelo usual de consulta / resposta de muitos protocolos, que tendem a saturar desnecessariamente as conexões de dados com dados inalteráveis, o modelo de publicação / assinatura do MQTT maximiza a largura de banda disponível.

Principais Aplicações

O protocolo MQTT, foi a princípio um protocolo utilizado para realizar conexões dos sistemas de telemetria de oleoduto por satélite, como já mencionado nos tópicos acima, mas que atualmente se expandiu e largos passos na história dos sistemas de automação, devido ao seu protocolo de mensagens publish/subscribe, projetado para o transporte de telemetria em enfileiramento de mensagens simples e leve, com baixa largura de banda, protocolo de conectividade M2M que funciona no topo do protocolo TCP / IP, ele é bastante utilizado em conexões remotos e com poucas linhas de código para fazê-lo funcionar. Com esse protocolo, podemos enviar comandos para controlar portas GPIO de uma central de controle, como os ESP8266, ESP32, Arduínos entre outros, já bastante difundidos aqui em nosso Blog, podendo ler e publicar dados de sensores, controlar remotamente esses dispositivos e muito mais. Você pode estabelecer comunicação entre vários outros dispositivos, tais como integração entre Assistentes virtuais, como o Echo Dot Alexa, Google Home entre outros.

Documentação MQTT em Inglês

Especificações de Protocolo

O MQTT v3.1.1 é um padrão ISO e OASIS mais antigo. A especificação está disponível no site da OASIS em Inglês na página Web em HTML ou em PDF.

O MQTT v5.0 é um padrão OASIS. A especificação está disponível no site da OASIS em Inglês na página Web em HTML ou em PDF.

Para referência com versão anterior do MQTT v3.1 está disponível Aqui.

O MQTT-SN v1.2, conhecido como MQTT-S, está disponível Aqui. O MQTT para redes de sensores é destinado a dispositivos incorporados em redes não TCP / IP, como o Zigbee.
O MQTT-SN é um protocolo de mensagens de publicação / assinatura para redes sem fio de sensores (WSN), com o objetivo de estender o protocolo MQTT além do alcance da infraestrutura TCP / IP para soluções de sensores e atuadores.

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, 6 de setembro de 2019

Como Hackear Circuito Módulo Relé para funcionar com ESP8266 3.3V

Como Hackear Circuito Módulo Relé para funcionar com ESP8266 3.3V

Olá a Todos!!!

Fig. 1 - Módulo Relé alterado para trabalhar com ESP8266
No post de hoje, iremos fazer uma pequena alteração no circuito do módulo Relé que irá possibilita-lo a ser utilizado com o ESP8266 ou ESP32, pois os módulos de relé de 5 volts, não conseguem ser acionados por uma fonte de trigger de 3.3V, fazendo com que muitos se decepcionem depois que comprar sem saber que não vai funcionar, iremos fazer isso em um passo a passo de forma fácil e substituindo apenas um componente, o transistor PNP SMD 2TY por um transistor NPN de uso geral como os BCs, Cs, 2Ns e etc..

O Módulo

O módulo que temos é esse mostrado na figura 2 é um módulo de um só acionamento, ou seja, um relé independente, que é alimentado por 5V, então quando se utiliza um ESP8266 para acionamento de cargas com o módulo Relé, ele não responde, pois esse módulo so aciona o relé com uma tensão Trigger de 5V
Fig. 2 - Módulo Relé 1 canal 5V
Esse relé é ativado por um transistor PNP SMD 2TY que é o S8550, como podemos observa-lo na figura 3 logo abaixo, onde podemos ver a disposição dos componentes de perto.

Fig. 3 - Disposição dos componentes na placa do módulo original
Esse transistor tem uma tensão Vbe de 5 volts, e em série com a base ele tem um resistor de 1K limitador de corrente, como podemos observar no diagrama esquemático da  figura 4, mesmo se você colocar direto na porta do GPIO do ESP8266, "que não é recomendado" você não conseguirá ativar esse módulo, pois não terá corrente suficiente para ativar o Trigger do Módulo.
Fig. 4 - Diagrama Esquemático circuito original Módulo Relé

O Circuito Alterado

O que fizemos de primeiro foi, substituir o transistor por um transistor de uso comum, como os da linha BCs, Cs, 2Ns, e tantos outros que você pode escolher, o que é de fato importante é atentarmos a pinagem do transistor que você irá colocar na placa do módulo, nós escolhemos transistor NPN, por ser mais comum em nosso estoque e em placas de sucata, temos aos montes esses transistores de uso geral, podemos verificar na comparação entre os três módulos, o primeiro da esquerda é o original, sem alteração, o segundo está utilizando o transistor C945 e o terceiro da direita está utilizando o BC548, como podemos observar os transistores C945 e BC548 são diferenciado pela pinagem coletor e emissor, que são um inverso do outro, fazendo com que inverter-se-mos os lados dos transistores em cada módulo, a base de ambos é no pino central. ficando assim como ilustrado na figura 5 logo abaixo.
Fig. 5 - Os três módulos, da esquerda Original, do centro com C945 e da direita com BC548
Você pode colocar outro transistor do tipo PNP, e isso te daria até menos trabalho, pois não precisarias alterar praticamente nada no circuito. No nosso caso, com o transistor NPN, tivemos que inverter a alimentação do circuito, ou seja onde temos o Pino VCC, é agora GND, e onde temos o Pino GND, é agora VCC, e ainda tivemos que inverter o Diodo que é acoplado ao relé, e também inverter a polarização dos dois LEDs, como podemos ver no diagrama esquemático da  figura 6 logo abaixo.
Fig. 6 - Diagrama esquemático do circuito módulo relé alterado

O Funcionamento

O que diferencia o funcionamento do módulo com transistor PNP e transistor NPN em modos gerais, é  o acionamento da carga, ex.: O módulo normal "sem alteração" é ativado com pulso negativo, ou seja, ele fica ativo em quanto a porta GPIO estiver em Baixa "LOW", e ele desativa quando a porta GPIO estiver em Alta "HIGH". No nosso circuito o processo é inverso, o que denota, que ele trabalha de forma "normal", se a porta GPIO estiver em Alta, o relé será ativado e senão, o relé será desativado.

Convidamos você a assistir o nosso vídeo no nosso canal do youtube com esse tutorial passo a passo.

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

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

Se inscreva no nosso Blog!!! Click aqui - FVM Learning!!!

Forte abraço.

Deus vos Abençoe

Shalom



segunda-feira, 26 de agosto de 2019

Como Instalar a Biblioteca Blynk na IDE Arduíno

Como Instalar a Biblioteca Blynk na IDE Arduíno

Olá a Todos!!!

No post de hoje, nós iremos fazer um rápido passo a passo de como instalar a biblioteca do APP Blynk na IDE Arduíno.

Então vamos começar!!!

A biblioteca Blynk deve ser instalada manualmente, então vamos seguir esse passo a passo para não cometer nenhum erro.

1° Baixar

É necessário baixar a biblioteca do Blynk no site do GitHub, link abaixo.
Link direto Github oficial do blink: Click Aqui: GitHub
Irá aparecer essa janela para você como ilustrada na figura 2 abaixo:
Figura 2
Escolha a opção que está grifado e com a seta vermelha "Blynk_Realease_v0.6.1.zip" e baixe, logo depois descompacte o mesmo para podermos instalar.

2° Instalação

Após descompactar o arquivo Blynk_Release_v0.6.1.zip. Você notará que o arquivo contém várias pastas e várias bibliotecas. 
OBS.: Muitas vezes fazemos instalações da plataforma IDE Arduíno, e ficam pastas das antigas instalações, para não cometer erros, aconselhamos você encontrar a localização da sua pasta de bibliotecas direto no software da IDE, então; 

Vá para o menu superior na IDE Arduíno:
Selecione: Arquivo Preferências

Figura 3

Logo depois você verá na caixa de diálogo na aba:
Configurações Local do Sketchbook:
Na caixa de diálogo, você encontrará o endereço da biblioteca da IDE Arduíno.
Copie esse endereço

Figura 4

Abra o Windows Explorer, ou o Meu Computador
Na barra de endereço Cole o endereço que você copiou na IDE Arduíno, e pressione a tecla Enter


Figura 5

Dentro da pasta que você baixou e descompactou, virá duas pastas: libraries tools
Copie a pasta libraries para a pasta biblioteca da IDE Arduíno
Ficará assim como ilustrada na figura 6
Figura 6
Depois vá na pasta que você baixou novamente e Copie a pasta tools e Cole para a pasta tools da sua IDE Arduíno, como ilustrado na figura 7 abaixo.


Figura 7

Toda a estrutura da suas pastas da suas bibliotecas deverão ficar assim, junto com suas outras bibliotecas (se você os tiver):

Meu Computador / Disco Local / Arquivos de Programa(x86) / bibliotecas / Blynk
Meu Computador / Disco Local / Arquivos de Programa(x86) / bibliotecas / BlynkESP8266_Lib

Meu Computador / Disco Local / Arquivos de Programa(x86) / tools / BlynkUpdater
Meu Computador / Disco Local / Arquivos de Programa(x86) / tools / BlynkUsbScript

Lembrando que:
A pasta bibliotecas devem ir para bibliotecas e a pasta tools devem ir para tools

Você também pode acompanhar esse passo a passo em nosso canal no YouTube, logo abaixo.





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