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

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

quarta-feira, 21 de agosto de 2019

NodeMCU ESP8266 Pinout GPIO, Pinagem

Pinout ESP8266 NodeMCU

O NodeMCU ESP8266 é um módulo que contem 30 pinos de entrada e saída, que são os GPIOs, e são eles os responsáveis pela leitura de sensores de entrada e comandos de saída para módulos de cargas externas. Segue abaixo a figura ilustrativa dos Pinos GPIOs e todos as suas descrições.

É importante ficar atento que nem todos as GPIOs estão acessíveis nas placas de desenvolvimento, agora, independente da placa de desenvolvimento que você estiver utilizando todas as GPIOs  funcionam especificamente da mesma maneira.

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, 20 de agosto de 2019

Alarme de Segurança com Sensor PIR e ESP8266 - Sensor de Movimento

Alarme de Segurança com Sensor PIR e ESP8266 - Sensor de Movimento

Olá a Todos!!!


A tecnologia tem avançado a passos largos todos os dias, e o mundo moderno trás consigo esses avanços, todos os dias deparamos sem perceber com; sistemas automáticos de iluminação, portas automáticas em lojas e shopping, alarmes contra roubo em casas e estabelecimentos comerciais, dispositivos de descarga em mictórios e luzes automáticas nos banheiros e etc... E o ponto central dessa tecnologia, está em um equipamento "Sensor" conhecido como Sensor PIR.
E no post de Hoje, vamos fazer um sensor PIR se comunicar com o NodeMCU ESP8266, e detectar a presença de alguém, e ativar um alarme sonoro utilizando um Buzzer. Você também pode acompanhar o passo a passo em nosso vídeo que está disponível no final desse Post.

Sensor PIR HCSR501

O sensor PIR - Pyroelectric ou Passive Infrared Sensor - Sensor Piroelétrico ou Passivo Infravermelho. Ele e quem detectar a presença de qualquer corpo que emita ondas de calor e ondas infravermelhas, ele detectará  instantaneamente a presença de um "intruso"  e irá notificar através de um alarme, que pode ser uma campainha ou um buzzer, uma luz e etc. 

Buzzer

Existe dois tipos de Buzzer, um é o buzzer passivo, que é bastante conhecido e utilizado em campainha de cartões de natais, twitters, feito de piezo elétrico, e os ativos que tem a diferença de ter um circuito ativo que gera um sinal em uma determinada frequência gerando o som contínuo.
Esse é o iremos utilizar em nosso projeto, o ativo que tem suas tensão de funcionamento entre 3 à 24V, o que se encaixa perfeitamente em nosso projeto.

Controlador NodeMCU ESP8266

O NodeMCU é uma plataforma de IoT de código aberto. Inclui firmware que é executado no SoC ESP8266 Wi-Fi da Espressif Systems e hardware baseado no módulo ESP-12. O termo "NodeMCU" por padrão refere-se ao firmware em vez dos kits de desenvolvimento.

Funcionamento

O que iremos fazer aqui é utilizar o NodeMCU como controlador que irá receber um sinal digital do Sensor PIR, e irá processar essa informação e determinar o tempo que irá manter o Buzzer ativo, que será determinado pelo usuário que irá programar. 
A montagem do circuito é bastante simples, não requer nenhum alto nível de conhecimento, pois o sensor tem apenas 3 pinos: VCC - OUT - GND.
No NodeMCU só vai receber o sinal na porta D0 e vai responder através da porta D4 de saída para ligar um Buzzer, que você pode utilizar com um módulo relê e ligar uma luz por exemplo, um alarme, um led e etc.

Diagrama do Circuito

Como podemos ver no diagrama esquemático do circuito na figura 2, não teremos dificuldades alguma para executar a montagem.
Fig. 2 - Digrama esquemático Alarme de Segurança com Sensor PIR e ESP8266 - Sensor de Movimento

Lista de Materiais

  1. ESP8266
  2. Detector HCSR501 PIR. 
  3. Buzzer ativo

O Código

Código foi inscrito na plataforma Arduíno, e você pode utilizá-lo e modificá-lo de acordo com suas necessidades. Aconselhamos a você baixar o arquivo .ino que estamos disponibilizando, pois quando copiamos e colamos, dependendo do seu navegador, algumas acentuações saem diferente do que foi programado, por esse motivo disponibilizamos o código fonte para baixar no link abaixo.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//=============================================================================================// // Edited and Adapted by: Engineer Jemerson Marques, On: 26.03.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!!! // //---------------------------------------------------------------------------------------------// #define Pin_Alarm D4 // Buzzer alarm connected to GPIO-14 or D5 of nodemcu #define PIR_Sensor D0 // PIR sensor output connected to GPIO-5 or D1 of nodemcu int Waiting_Time = 5000; // Time that your buzzer stay on in milliseconds, exemple; 10000 is 10 seconds void setup() { pinMode(PIR_Sensor, INPUT); // PIR sensor as input pinMode(Pin_Alarm, OUTPUT); // Buzzer alaram as output digitalWrite(Pin_Alarm, LOW); // Initially buzzer off } void loop(){ int state = digitalRead(PIR_Sensor); // Continuously check the state of PIR sensor delay(500); // Check state of PIR after every half second if(state == HIGH){ digitalWrite (Pin_Alarm, HIGH); // If intrusion detected ring the buzzer delay(Waiting_Time); // Ring buzzer for time the you put in integer WaitTimer in seconds } else { digitalWrite (Pin_Alarm, LOW); // No intrusion Buzzer off } } //======================================== www.fvml.com.br ==================================================

Convido você para assistir o passo a passo da montagem e fizemos também os testes com o circuito, segue abaixo o nosso vídeo:

ARQUIVOS PARA BAIXAR:

Você também pode baixar o arquivo .ino  e o diagrama esquemático no link abaixo:
Link Direto: Arquivos para baixar


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


domingo, 11 de agosto de 2019

Comunicação entre 4 ESP8266 com central ESP com Roteador

Comunicação entre 4 ESP8266 com central ESP com Roteador

Olá a Todos!!!

No Post de hoje, iremos fazer a comunicação entre 4 ESP8266, sendo um deles a Central que receberá os comandos de cada ESP, identificará e ligará a carga correspondente a cada ESP, que no nosso caso, estamos utilizando LEDs para exemplificar, e todos conectado em seu Modem Roteador Wireless.

Para a realização deste procedimento, é necessário você já ter as bibliotecas do ESP instalada na IDE Arduíno.

Se você ainda não instalou. Veja o nosso Post:

Para darmos início, precisamos fazer a montagem de acordo com o esquemático na imagem ilustrativa, tanto o esquemático do CLIENT como o esquemático do SERVER.

Diagrama esquemático do Client

Todos os Clients são ligados da mesma forma, então quantos Clients você colocar, só estará limitado pelo tipo de Roteador que você tiver, pois as conexões serão feitas através do roteador, e a identificação de cada Client, é feito alterando no código o nome: Cliente 01, Cliente 02, Cliente 03 e etc.. O diagrama esquemático está disposto na Figura 2 Abaixo.
Fig. 2 - Diagrama esquemático do Client

Diagrama Esquemático do Server

O server utiliza 5 Leds no total, 4 leds externos conectados nas GPIO D0, D2, D3, D5, e o led Onboard, na própria placa, o led na porta D0, identifica se algum cliente conectou, se houve conexão em algum cliente, ele acende e mantem-se ativado, os leds das portas D2, D3 e D5 são as portas GPIO que recebe o comando e ativa cada porta de acordo com os três clientes, o diagrama esquemático está disposto na Figura 03 logo abaixo.
Fig 03 - Diagrama esquemático do Servidor
Se você é acostumado a fazer projetos com o ESP8266, já deve ter notado que não estou utilizando resistores, porque não é necessita utilizar resistores para ligar as chaves Micro Switch, pois podemos setar as portas de entrada dos ESPs com o comando Pull_Up, e assim evitar a utilização de resistores, e nos leds também não é necessário, pois as portas dos ESPs vão de 0 à 3,3v, e a alimentação da maioria dos leds é muito próximo a isso.

Depois de montado, verifique todas as conexões, as "portas" GPIO de saída para os LEDs, verifique a polarização do LEDs, para não estar invertida, pois se tiver invertida o mesmo não irá acender, verifique as GPIOs de entrada das Micro Switch, que deve seguir como no esquemático, um lado da chave vai para a porta que você programou, no nosso caso a porta é a D0 do ESP.

Logo abaixo temos o código completo da Central, e do Cliente para você copiar. Sempre aconselhamos você baixar o arquivo .ino direto pois dependendo do navegador, ele pode modificar as pontuações e as acentuações dando erro no código, por esse motivo deixamos no link abaixo os arquivos disposto para você baixar, para você que deseja melhorar os conhecimentos, temos o vídeo no nosso canal, "Está no final da página" que explicamos o básico do código Client e do Server.

Código Fonte do Servidor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
75
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
96
97
98
99
90
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
//===========================================================================================// // SERVER // // Adapted by: Engineer Jemerson Marques, On July 29, 2019 - by Engineer Jemerson Marques // // Communication between 4 ESPs with ESP8266 central with Router // // The code was edited and adapted for this project. // // Available in FVM Learning website: https://www.fvml.com.br and on // // Youtube channel https://www.youtube.com/c/FVMLearning - I hope you have fun - Good luck // //-------------------------------------------------------------------------------------------// //-- Libraries Included -------------------------------------------------------------- #include <ESP8266WiFi.h> //------------------------------------------------------------------------------------ // Define I/O Pins #define LED0 2 // WIFI Module LED #define LED1 D0 // Connectivity With Client #define LED2 D2 // Connectivity With Client #1 #define LED3 D3 // Connectivity With Client #2 #define LED4 D5 // Connectivity With Client #3 #define MAXSC 4 // MAXIMUM NUMBER OF CLIENTS //------------------------------------------------------------------------------------ // WIFI Module Config //------------------------------------------------------------------------------------ char ssid[] = "FVML"; // SSID of your home WiFi char pass[] = "fvmlearning"; // password of your home WiFi String Message; // VARIABLE RECEIVE DATA FROM OTHER CLIENTS WiFiServer server(80); // THE SERVER AND THE PORT NUMBER WiFiClient Clients[MAXSC]; // THE SERVER CLIENTS (Devices) IPAddress ip(192, 168, 25, 240); // IP address of the server IPAddress gateway(192, 168, 25, 1); // gateway of your network IPAddress subnet(255, 255, 255, 0); // subnet mask of your network //==================================================================================== void setup() { // Setting The Serial Port Serial.begin(115200); // Computer Communication WiFi.config(ip, gateway, subnet); // forces to use the fix IP WiFi.begin(ssid, pass); // connects to the WiFi router while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } server.begin(); // Setting The Mode Of Pins pinMode(LED0, OUTPUT); // WIFI OnBoard LED Light pinMode(LED1, OUTPUT); // Indicator For Client Connectivity pinMode(LED2, OUTPUT); // Indicator For Client Connectivity pinMode(LED3, OUTPUT); // Indicator For Client Connectivity pinMode(LED4, OUTPUT); // Indicator For Client Connectivity } //==================================================================================== void loop() { AvailableClients(); // Checking For Available Clients AvailableMessage(); // Checking For Available Client Messages } //==================================================================================== void AvailableClients() { if (server.hasClient()) { // Read LED0 Switch To Low If High. if (digitalRead(LED0) == HIGH) digitalWrite(LED0, LOW); digitalWrite(LED1, HIGH); // Light Up LED1 for (uint8_t i = 0; i < MAXSC; i++) { if (!Clients[i] || !Clients[i].connected()) //find free/disconnected spot { if (Clients[i]) // Checks If Previously The Client Is Taken { Clients[i].stop(); } if (Clients[i] = server.available()) // Checks If Clients Connected To The Server { Serial.println("New Client: " + String(i + 1)); } continue; // Continue Scanning } } //no free/disconnected spot so reject WiFiClient Clients = server.available(); Clients.stop(); } else { digitalWrite(LED0, HIGH); // This LED Blinks If No Clients Where Available delay(250); digitalWrite(LED0, LOW); delay(250); } } //==================================================================================== void AvailableMessage() { for (uint8_t i = 0; i < MAXSC; i++) //check clients for data { if (Clients[i] && Clients[i].connected() && Clients[i].available()) { while (Clients[i].available()) { Message = Clients[i].readStringUntil('\r'); Clients[i].flush(); ClientNumber(); Serial.println("Client No " + String(i + 1) + " - " + Message); } } } } // ================================================================================= void ClientNumber() { if (Message == "<Cliente 01-1>") { // Check client number, 01 = client 1, and after trace, status 1 = on, 0 = off digitalWrite(LED2, HIGH); } else if (Message == "<Cliente 01-0>") { digitalWrite(LED2, LOW); } if (Message == "<Cliente 02-1>") { digitalWrite(LED3, HIGH); } else if (Message == "<Cliente 02-0>") { digitalWrite(LED3, LOW); } if (Message == "<Cliente 03-1>") { digitalWrite(LED4, HIGH); } else if (Message == "<Cliente 03-0>") { digitalWrite(LED4, LOW); } } //======================================== www.fvml.com.br ================================================

Código Fonte do Client

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
75
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
96
97
98
99
90
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156

//===========================================================================================// // CLIENT // // Communication between 4 ESPs with ESP8266 central with Router // // Adapted by: Engineer Jemerson Marques, On July 29, 2019 - by Engineer Jemerson Marques // // The code was edited and adapted for this project. // // Available in FVM Learning website: https://www.fvml.com.br and on // // Youtube channel https://www.youtube.com/c/FVMLearning - I hope you have fun - Good luck // //-------------------------------------------------------------------------------------------// //------------------------------------------------------------------------------------ // Libraries Needed For This Project //------------------------------------------------------------------------------------ #include <ESP8266WiFi.h> // The Basic Function Of The ESP NOD MCU //------------------------------------------------------------------------------------ // Defining I/O Pins //------------------------------------------------------------------------------------ #define LED0 2 // WIFI Module LED #define LED1 D0 // Indicate Connectivity With Client #1 #define BUTTON D1 // Connectivity ReInitiate Button //------------------------------------------------------------------------------------ // WIFI Authentication Variables //------------------------------------------------------------------------------------ char ssid[] = "FVML"; // SSID of your home WiFi char pass[] = "fvmlearning"; // password of your home WiFi //------------------------------------------------------------------------------------ // WIFI Module Mode & IP //------------------------------------------------------------------------------------ IPAddress server(192, 168, 25, 240); // the fix IP address of the server WiFiClient client; //------------------------------------------------------------------------------------ // BUTTON Variables //------------------------------------------------------------------------------------ int ButtonState; int LastButtonState = LOW; int LastDebounceTime = 0; int DebounceDelay = 50; const String ClientType = "Cliente 01"; //------------------------------------------------------------------------------------ // LED Delay Variables //------------------------------------------------------------------------------------ int LEDState = LOW; unsigned long CurrMillis = 0; unsigned long PrevMillis = 0; unsigned long Interval = 1000; //==================================================================================== void setup() { // Setting The Serial Port ---------------------------------------------- Serial.begin(115200); // Computer Communication // Setting The Mode Of Pins --------------------------------------------- pinMode(LED0, OUTPUT); // WIFI OnBoard LED Light pinMode(LED1, OUTPUT); // Indicator For Client #1 Connectivity pinMode(BUTTON, INPUT_PULLUP); // Initiate Connectivity digitalWrite(LED0, HIGH); // Turn WiFi LED Off // Starting To Connect -------------------------------------------------- WiFi.begin(ssid, pass); // connects to the WiFi router if (WiFi.status() == WL_CONNECTED) { WiFi.disconnect(); WiFi.mode(WIFI_OFF); delay(50); } // Printing Message For User That Connetion Is On Process --------------- Serial.println("!--- Connecting To " + WiFi.SSID() + " ---!"); // WiFi Connectivity ---------------------------------------------------- CheckWiFiConnectivity(); // Checking For Connection // Stop Blinking To Indicate Connected ---------------------------------- digitalWrite(LED0, LOW); Serial.println("!-- Client Device Connected --!"); /*/ Printing IP Address -------------------------------------------------- Serial.println("Connected To : " + String(WiFi.SSID())); Serial.println("Signal Strenght : " + String(WiFi.RSSI()) + " dBm"); Serial.print ("Server IP Address : "); Serial.println(client); Serial.print ("Server Port Num : "); Serial.print ("Device MC Address : "); // Printing MAC Address Serial.println(String(WiFi.macAddress())); Serial.print ("Device IP Address : "); // Printing IP Address Serial.println(WiFi.localIP()); */ // Conecting The Device As A Client ------------------------------------- ESPRequest(); } //==================================================================================== void loop() { ReadButton(); } //==================================================================================== void ReadButton() // Reading The Button { int reading = digitalRead(BUTTON); if (reading != LastButtonState) // If It Doest Match The Previous State { LastDebounceTime = millis(); } if ((millis() - LastDebounceTime) > DebounceDelay) // To Iliminate Debounce { if (reading != ButtonState) { ButtonState = reading; if (ButtonState == LOW) { LEDState = !digitalRead(LED1); digitalWrite(LED1, LEDState); Serial.println ("<" + ClientType + "-" + LEDState + ">"); client.println ("<" + ClientType + "-" + LEDState + ">"); client.flush(); } } } LastButtonState = reading; // Last Button State Concidered } //==================================================================================== void CheckWiFiConnectivity() { Serial.print("Connecting"); while (WiFi.status() != WL_CONNECTED) { digitalWrite(LED0, !HIGH); delay(250); digitalWrite(LED0, !LOW); delay(250); Serial.print("."); } } void ESPRequest() { client.stop(); // First Make Sure You Got Disconnected // If Sucessfully Connected Send Connection Message if (client.connect(server, 80)); // Connection to the server { Serial.println ("<" + ClientType + "- CONNECTED>"); client.println ("<" + ClientType + "- CONNECTED>"); } } //=================================== www.fvml.com.br ===============================================

ARQUIVOS PARA BAIXAR:

Você também pode baixar o arquivo .ino  e o diagrama esquemático no link abaixo:
Link Direto: Arquivos para baixar

Para quem deseja ver o projeto completo, a explicação do código tanto do Client como do Server e ainda ver o funcionamento em vídeo, acesse o nosso vídeo abaixo e tenha uma boa diversão.




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