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 Internet das Coisas. Mostrar todas as postagens
Mostrando postagens com marcador Internet das Coisas. Mostrar todas as postagens

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

quarta-feira, 7 de agosto de 2019

Como Instalar Sistema Elétrico dispositivos Relé WiFi Sonoff para Automação

Como Instalar Sistema Elétrico dispositivos Relé WiFi Sonoff para Automação

Olá a todos!!!

No post de hoje, iremos fazer um passo a passo de Como Instalar o Sistema Elétrico do dispositivos Relé WiFi Sonoff para Automação, e mostraremos quais os dispositivos são compatíveis com o APP da E-WeLink, que é o APP que controla esses dispositivos, esse passo a passo também poderá ser aplicados para outros modelos de dispositivos Sonoff. Se você não sabe, ou deseja conhecer mais detalhes sobre o Sonoff, dê uma olhada no nosso POST:


Então vamos a instalação.

A instalação elétrica das ligações do dispositivo Sonoff são bastantes simples, porém, tenha muita precaução. 

Preste muita atenção: 
L N = Load and Neutral. 

Para nós:"Brasil"
F N = Fase e Neutro
Os cabos L, N de Entrada de energia "que vem da sua rede" devem se conectar com o lado “INPUT”.
Os cabos L, N de Saída de energia "que alimentará os seus eletro-eletrônicos" devem se conectar com o lado "OUTPUT".
Lembre-se de NÃO confundir as instruções!

Para evitar qualquer problema de segurança, por favor, siga as instruções conexão da fiação elétrica como segue na figura 1 abaixo:
Fig. 1 - Ligações Elétrica Dispositivo Sonoff
Não existe polaridade para as ligações pois elas são do tipo AC "Alternada".  Porém para se fazer uma ligação SEGURA, é aconselhável que você conecte os terminais da sua rede elétrica da maneira que está apresentado na figura 1.

Rele WIFI Sonoff só desliga uma linha dos dois fios, o "L" que é o fase, ou seja a outra linha fica ligado direto, então se você inverter, quem será desligado será o NEUTRO e não o FASE. 

O aplicativo: E-WeLink

O APP E-WeLink tecnicamente suporta todos os produtos ITEAD Smart Home e além dos produtos Itead ele suporta vários outros produtos de fabricantes diferentes, listamos abaixo alguns dos principais produtos Itead:
  • Interruptor Inteligente WI-FI
  • Interruptor Inteligente RF
  • Dispositivo Sonoff TH
  • Dispositivo Sonoff SV
  • Lâmpada  Inteligente Slampher
  • Tomada  Inteligente
  • Interruptor Medidor De Energia e Tensão
  • Ventilador Inteligente
  • Led dimerizado, etc.
Listamos abaixo algumas das principais funções de comandos suporta  pelo APP E-WeLink são várias as funções, porém listamos as principais e as mais corriqueiras:
  • Ligar / desligar remotamente
  • Status de tomadas remota
  • Dimerização
  • Status de rastreamento
  • Tempo e horários
  • Compartilhamento de dispositivos 
  • Gerenciamento de agrupamentos 
  • Cenas inteligente. 

INSTALAÇÃO DO APP E-WeLink

  1. Vá ao Goggle Play no seu Smartphone, baixe o APP do eWeLink, se você não encontrar, deixamos a opção para baixar Clicando AQUI. Você também tem a opção de utilizar o QR CODE apontando o seu Smartphone, para o QR CODE na caixa do Sonoff para fazer o download do eWeLink.
  2. Instale o aplicativo em seu Smartphone "Passos padrões como qualquer outro APP"
  3. Registre uma nova conta. Você precisará digitar seu número de telefone e senha (pelo menos 8 caracteres). Insira a confirmação por SMS código para registrar. 
  4. Entre com sua conta.
E pronto já pode ir se divertindo com esse maravilhoso mundo da automaçã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!!! isso nos ajuda bastante.

Forte abraço.

Deus vos Abençoe

Shalom

sábado, 3 de agosto de 2019

Como Programar o ESP8266 no Modo DEEP-SLEEP para Economizar Bateria

Como Programar o ESP8266 em DEEP-SLEEP para Economizar Bateria

Olá a Todos!!!

No Post de hoje, iremos falar sobre uma função na programação do ESP8266, que faz com que ele entre em Deep-Sleep - Modo de Suspensão ou Sono Profundo, trazendo o benefício de economizar energia, para quem utiliza o ESP8266 com baterias ou pilhas, pois como sabemos, os ESPs não são tão econômicos assim se compararmos com os Arduínos. Se você usa um módulo ESP-12E alimentada por pilhas ou  baterias, depois que utilizamos por um período de tempo, irás perceber que as baterias não duram muito tempo. Como a maioria dos módulos ESP8266, não é possível alterar o hardware para economizar energia, mas, é possível utilizando funções específicas no códigos para esse fim. Se utilizar-mos as funções de suspensão com o ESP8266, ele consumirá menos energia e as suas baterias dependendo do modo de escolha, durarão por muito mais tempo.

Tipos de Suspensões: Sleep Modes

O chip da série ESP8266 oferece 3 modos de suspensão configuráveis. Modem-sleep, Light-sleep,  Deep-sleep. Que fornecemos alguns soluções de economia de energia relacionadas a esses modos de suspensão. Os usuários podem escolher e configurar os modos conforme necessário. Todos eles têm propósitos diferentes e devem ser usados ​​em diferentes aplicações, para mais informação, você pode estar visitando nosso Post que fala sobre os 3 Modos de Suspensões do ESP8266 clicando no link abaixo:

Como funcionam os Modos: Modem-sleep - Light-sleep - Deep-sleep - No ESP8266

Modo Deep-sleep Características

Ao contrário dos outros dois modos, com o Modo Deep-Sleep o sistema não pode entrar em repouso profundo automaticamente. Os usuários podem chamar a função de interface system_deep_sleep para ativar imediatamente o Deep-sleep.
Neste modo, o chip desligará a conectividade Wi-Fi e a conexão de dados; somente o módulo RTC que é a função utilizada para o ESP contar o tempo que ficará funcionando, o pino RST está sempre HIGH enquanto o ESP8266 estiver funcionando. No entanto, quando o pino RST recebe um sinal LOW, ele reinicia o microcontrolador.
Se você definir um timer no Modo Deep-Sleep, quando o timer terminar, o GPIO 16 enviará um sinal LOW. Isso significa que, quando o GPIO 16 for conectado ao pino RST, ele ativará o ESP8266 toda vez que o Timer terminar.

Exemplo de uso simples com o Modo Deep-Sleep:


  1. O ESP8266 conecta-se a sua rede WI-FI
  2. Realiza uma ação (lê um sensor, publica uma mensagem MQTT, etc)
  3. Dorme por um número definido em microssegundos (µs).
  4. E esse processo se repete continuamente

Ativando o Modo Deep-sleep por Tempo

Para que o Modo Deep-Sleep seja ativado conectamos o pino RST ao pino  GPIO16 que na maioria dos módulos é identificado pelo pino D0.

OBS.: É necessário desconectar o jumper da GPIO16 (D0) ao pino RST para podermos fazer o upload do código no módulo, e só conecta-lo depois de ter executado o Upload na Sketch para que funcione corretamente.
Fig. 2 - Como Programar o ESP8266 no Modo DEEP-SLEEP para Economizar Bateria


Configurar o Modo Deep-sleep

Os usuários podem configurar o modo de trabalho do código durante o wake-up do Modo Deep-Sleep através da Código abaixo para ajustar o consumo médio de energia durante a execução de longa duração. Nestes exemplos, vamos utilizar a IDE do Arduíno, e o código está disposto logo abaixo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//=============================================================================================//
// Edited and Adapted by: Engineer Jemerson Marques, On: 19.07.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!!!          //
//---------------------------------------------------------------------------------------------//

const int SleepTimeSeconds = 20;    // Time to sleep (in seconds)

void setup() { Serial.begin(115200); Serial.setTimeout(2000); // Wait for serial to initialize. while(!Serial) { } // Deep sleep mode for 30 seconds, the ESP8266 wakes up by itself when GPIO 16 (D0 in NodeMCU board) is connected to the RESET pin Serial.println("I'm awake, but I'm going into deep sleep mode for 20 seconds"); ESP.deepSleep(SleepTimeSeconds * 1000000); } void loop() { }
//----------------------------- 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

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, 19 de julho de 2019

Web Server com ESP8266 - Controlando Dispositivos Remotamente

Web Server com ESP8266 - Controlando Dispositivos Remotamente

Olá a todos!!!


No post de hoje, iremos criar um simples Servidor Web que irá hospedar uma página da web e controlar qualquer dispositivo remotamente de qualquer lugar do mundo. Iremos utilizar o módulo NodeMCU, que é nada menos que o ESP8266, com alguns recursos de comunicação via USB, o que facilita a nossa montagem, você pode utilizar qualquer tipo de ESP8266, o Wemos, 12E, ESP01, qualquer um funcionará. Saiba mais sobre os módulos ESP e suas características no link abaixo.

Conhecendo ESP8266, Especificações e comparações com ESP32 e Arduino

Iremos também utilizar a  IDE Arduíno para realizarmos a programação, e utilizaremos o ESP no modo AP - Access Point e o modo STA - Station.
Se você não instalou as bibliotecas na IDE Arduíno, você pode dar uma olhada no passo a passo que temos em nosso post, clicando no link abaixo.

Instalando Biblioteca do Modulo ESP8266 na IDE Arduíno

Com esse projeto, podermos controlar uma carga, como por exemplo, motores, ventiladores, luz, Ar-condicionado, ou qualquer outro tipo de carga que você desejar, utilizando apenas um módulo simples de Relay, para exemplificar utilizaremos um LED na saída, e o NODEMCU - ESP8266, que será programado como um Servidor Web. Iremos acessar o conteúdo em uma página WEB de um navegador qualquer, pois o software é inscrito em HTML, e hospedada no Servidor ESP, ele será a interface de controle que iremos programar na IDE Arduíno.

O design

O design elaborado é bastante simples, porém depende do quanto você é conhecedor da linguagem HTML, pois a parte de gráfica é feita utilizando a HTML e CSS, se você tem afinidade com essa linguagens, podes elaborar um design mais sofisticado, porém, para nossa ilustração, fizemos esse design básico, como mostrado nas figuras abaixo. O dispositivo inicializa com os botões no modo Desligado Figura 3, então quando pressionamos qualquer tecla, ele muda seu estado de Desligado para Ligado e o Status na parte superior dos botões mudam de OFF para ON confirmando que o dispositivo que você colocou na porta D0 ou D1 foi ativado, e vice-versa.

Fig. 2 - Botão 01 Ligado
Fig. 3 - Botões Desligados
Fig. 4 - Botões Ligados



















O que é Web-server e como ele funciona?

Um Servidor Web é o local onde são armazenadas as páginas da Web, e através de um programa que utiliza protocolo HTTP (Hypertext Transfer Protocol) para processá-los e entregá-los aos clientes da Web, em resposta às suas solicitações, essas solicitações podem advim de um navegador em nosso Computador, Tablet, Smartphone, ou qualquer outro tipo de navegação, a comunicação inicia-se através de uma solicitação de uma determinada página da Web usando a solicitação HTTP GET e o Servidor responde com o conteúdo dessa página da web. 

O Código Web Server

Logo abaixo temos o código escrito na IDE Arduíno. Nós aconselhamos a você baixar no link direto que estamos disponibilizando logo abaixo do código, porém, depois de baixar, você deve substituir o SSID que é o nome da sua rede, e o PASSWORD, que é a senha da sua rede. Se precisar, podes mudar as portas de saída dos LEDs, que no nosso caso, estamos utilizando as portas D0 e D1 para os LED1 e LED2.

//==================================================================================//
// Adapted by: Engineer Jemerson Marques, On: 14.07.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          //
//----------------------------------------------------------------------------------//

//------------------------------------------------------------------------------------
// Libraries Needed For This Project
//------------------------------------------------------------------------------------
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

//------------------------------------------------------------------------------------
// WIFI Module Config, SSID and PASSWORD
//------------------------------------------------------------------------------------

//WiFiServer server(80);

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

const char* ssid = "your ssid";            // Enter SSID here
const char* password = "your password";    // Enter Password here

ESP8266WebServer server(80);

//------------------------------------------------------------------------------------
// Defining I/O Pins
//------------------------------------------------------------------------------------
#define   LED1      D0        // LED 1
#define   LED2      D1        // LED 2
bool      LED1_State = LOW;
bool      LED2_State = LOW;

//=====================================================================================
void setup() {
  Serial.begin(115200);
  delay(100);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);

  Serial.println("Connecting to ");
  Serial.println(ssid);

  //connect to your local wi-fi network
  WiFi.config(ip, gateway, subnet);       // forces to use the fix IP
  WiFi.begin(ssid, password);

  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.on("/led1on", handle_led1on);
  server.on("/led1off", handle_led1off);
  server.on("/led2on", handle_led2on);
  server.on("/led2off", handle_led2off);
  server.onNotFound(handle_NotFound);

  server.begin();
  Serial.println("HTTP server started");
}

//=====================================================================================================
void loop() {
  server.handleClient();
  if (LED1_State)
  {
    digitalWrite(LED1, HIGH);
  }
  else
  {
    digitalWrite(LED1, LOW);
  }

  if (LED2_State)
  {
    digitalWrite(LED2, HIGH);
  }
  else
  {
    digitalWrite(LED2, LOW);
  }
}

//===================================================================================================
void handle_OnConnect() {
  LED1_State = LOW;
  LED2_State = LOW;
  Serial.println("GPIO16 Status: OFF | GPIO5 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1_State, LED2_State));
}

void handle_led1on() {
  LED1_State = HIGH;
  Serial.println("GPIO7 Status: ON");
  server.send(200, "text/html", SendHTML(true, LED2_State));
}

void handle_led1off() {
  LED1_State = LOW;
  Serial.println("GPIO7 Status: OFF");
  server.send(200, "text/html", SendHTML(false, LED2_State));
}

void handle_led2on() {
  LED2_State = HIGH;
  Serial.println("GPIO6 Status: ON");
  server.send(200, "text/html", SendHTML(LED1_State, true));
}

void handle_led2off() {
  LED2_State = LOW;
  Serial.println("GPIO6 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1_State, false));
}

void handle_NotFound() {
  server.send(404, "text/plain", "Not found");
}

//===========================================================================================================
String SendHTML(uint8_t led1stat, uint8_t led2stat) {
  String fvml = "<!DOCTYPE html> <html>"
                "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">"
                "<title>LED Control</title>"
                "<style>html { font-family:  Helvetica; display: inline-block; margin: 0px auto; text-align: center;}"
                "body{background: linear-gradient(to bottom, #000066 0%, #000099 100%); margin-top: 50px;} h1 {color: #00cc00;margin: 50px auto 30px;}"
                "h3 {color: #00cc00;margin-bottom: 50px;}h4 {color: #ffd699;margin: 50px auto 30px;}"
                ".button {display: block;width: 110px;background-color: #1abc9c;border: none;color: white;padding:"
                "13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}"
                ".button-on {background-color: #9494b8;}"
                ".button-on:active {background-color: #ff471a;}"
                ".button-off {background-color: #0066ff;}"
                ".button-off:active {background-color: #2c3e50;}"
                "p {font-size: 14px;color: #888;margin-bottom: 10px;}"
                "</style>"
                "</head>"
                "<body>"
                "<h1>CONTROLE DE DISPOSITIVOS REMOTO</h1>"
                "<h3>FVM Learning</h3>\n";

  if (led1stat) {
    fvml += "<p>Dispositivo 1 Status: ON</p><a class=\"button button-off\" href=\"/led1off\">Ligado</a>\n";
  } else {
    fvml += "<p>Dispositivo 1 Status: OFF</p><a class=\"button button-on\" href=\"/led1on\">Desligado</a>\n";
  }

  if (led2stat) {
    fvml += "<p>Dispositivo 2 Status: ON</p><a class=\"button button-off\" href=\"/led2off\">Ligado</a>\n";
  } else {
    fvml += "<p>Dispositivo 2 Status: OFF</p><a class=\"button button-on\" href=\"/led2on\">Desligado</a>\n";
  }
    fvml += "<h4><em>By: Eng. Jemerson Marques</em></h4>\n"
            " <p style='color:green;'> To more about this, visit us - <a href='https://www.fvml.com.br'style='color:green'>FVM Learning</a>.</p>\n"
            "</body>\n"
            "</html>\n";
  return fvml;
}


ARQUIVOS PARA BAIXAR:

Você também pode baixar os arquivos .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



terça-feira, 9 de julho de 2019

Comunicação e Controle entre Dois ESPs8266 Ponto a Ponto - Peer-to-Peer

Comunicação e Controle entre Dois ESPs8266 Ponto a Ponto - Peer-to-Peer

Olá a Todos!!!

No post de hoje, iremos fazer um simples projeto mostrando como estabelecer uma comunicação direta entre  dois ESPs8266 Ponto a Ponto "peer-to-peer"com controle de carga "utilizando LEDs como exemplo"  e isto utilizando a própria rede Wi-Fi do seu roteador.
Nesse tipo de topologia, você pode controlar um a cada outro ESP independentes, e com baixa latência, com a funcionalidade de recuperação automática em caso de perda da conexão Wi-Fi ou desligamento de uma das placas conectadas.

Comunicação e Controle entre Dois ESPs8266 Ponto a Ponto - Peer-to-Peer

FUNCIONAMENTO

A princípio descreveremos o funcionamento básico da comunicação entre os dois ESPs, criamos um ESP como um AP "Ponto de Acesso" que será o Servidor, e outro ESP como uma  STA "Estação"que será o nosso Cliente. Em seguida, eles estabelecerão uma comunicação através da rede Wi-Fi. Cliente envia um comando através de uma chave "Switch, Push-button" para o Servidor, e quando o Servidor receber esse comando através da rede Wi-Fi, ele ligará a carga definida, "utilizamos o LED como exemplo". Da mesma forma, o Servidor envia um comando para o Cliente, e quando o Cliente receber esse comando, ele ligará a carga definida no GPIO pré-definido.

Par podermos dar prosseguimento a esse projeto, pré-supomos que você já tenha instalado as bibliotecas na IDE do Arduíno, se não instalou, sugerimos a você que veja nosso outro Post:Instalando Biblioteca do Modulo ESP8266 na IDE Arduíno

Se você já instalou, vamos prosseguir...

COMPONENTES NECESSÁRIOS

Os seguintes componentes são necessários para construir este projeto:
  • 2 - NodeMCU (ESP8266-12E)
  • 2 - Chave tipo contato - (Micro-switch, Push-button, Micro Chave, Etc...)
  • 2 - LEDs
  • 2 - Protoboards (Se necessário, podes utilizar fios jumpers direto)
  • Fio jumpers, (macho-fêmea) para ligação das chaves e Leds
  • 2 Cabos Mini-USB - (Pode utilizar só um, grava 1 ESP de cada Vez)

ESQUEMÁTICO

Os esquemas para este projeto é bastante simples, só precisaremos conectar a Micro-Switch na porta GPIO D1 e o LED na porta GPIO D0, como sugerido na Figura 2, ambos, tanto o AP - Access Point quanto o STA - Station, são as mesmas ligações. Você pode mudar essas portas sem problemas, só não esqueça de editar o código e setar parâmetros de acordo com a porta que você colocou no código do seu ESP8266.

Figura 2 - Diagrama Esquemático - Comunicação e Controle Ponto a Ponto

Os Códigos

Logo abaixo temos os códigos tanto do AP - Access Point quanto do STA - Station, ambos seguem os mesmos princípios,

AP - Access Point - "Ponto de Acesso"

Receiver_P2P_FVML

//==================================================================================//
// Adapted by: Engineer Jemerson Marques, On: 27.06.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          //
//----------------------------------------------------------------------------------//

//------------------------------------------------------------------------------------
// Libraries Needed For This Project
//------------------------------------------------------------------------------------
#include <SPI.h>
#include <ESP8266WiFi.h>    // The Basic Function Of The ESP NOD MCU

//------------------------------------------------------------------------------------
// WIFI Module Config
//------------------------------------------------------------------------------------
char ssid[] = "YourSSID";                  // SSID of your home WiFi
char pass[] = "YourPassword";              // password of your home WiFi

WiFiServer server(80);

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

//------------------------------------------------------------------------------------
// Defining I/O Pins
//------------------------------------------------------------------------------------
#define       LedBoard   2        // WIFI Module LED
#define       LED1      D0        // LED Receiver One
#define       SWITCH    D1        // Button

//====================================================================================
void setup() {
  Serial.begin(115200);                   // only for debug
  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();                         // starts the server
  Serial.println("Connected to wifi");
  Serial.print("Status: ");   Serial.println(WiFi.status());        // some parameters from the network
  Serial.print("IP: ");       Serial.println(WiFi.localIP());
  Serial.print("Subnet: ");   Serial.println(WiFi.subnetMask());
  Serial.print("Gateway: ");  Serial.println(WiFi.gatewayIP());
  Serial.print("SSID: ");     Serial.println(WiFi.SSID());
  Serial.print("Signal: ");   Serial.println(WiFi.RSSI());
  Serial.print("Networks: "); Serial.println(WiFi.scanNetworks());

  pinMode(LedBoard, OUTPUT);
  pinMode(LED1, OUTPUT);
  pinMode(SWITCH, INPUT_PULLUP);
  digitalWrite(LED1, LOW);
}

void loop() {
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  digitalWrite(LedBoard, HIGH);
  String request = client.readStringUntil('\r');
  client.flush();

  if (request == "I am Transmitter") {
    digitalWrite(LedBoard, LOW);
    digitalWrite(LED1, !digitalRead(LED1));
    Serial.print("Data Received: "); Serial.println(request);
    delay(200);
    digitalWrite(LedBoard, HIGH);
  }

  int reading = digitalRead(SWITCH);
  if (reading == LOW) {
    digitalWrite(LedBoard, LOW);
    client.print("I am Receiver\r");
    delay(200);
    digitalWrite(LedBoard, LOW);
  }
  client.println("Receiver\r");      // sends the answer to the client
  digitalWrite(LedBoard, HIGH);
  delay(100);
}

STA - Station - "Estação" - Cliente ESP8266

Transmmiter_P2P_FVML

//==================================================================================//
// Adapted by: Engineer Jemerson Marques, On: 27.06.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          //
//----------------------------------------------------------------------------------//

//------------------------------------------------------------------------------------
// Libraries Needed For This Project
//------------------------------------------------------------------------------------
#include <SPI.h>
#include <ESP8266WiFi.h>    // The Basic Function Of The ESP NODEMCU

//------------------------------------------------------------------------------------
// Defining I/O Pins
//------------------------------------------------------------------------------------
#define       LedBoard     2        // WIFI Module LED
#define       LED1        D0        // LED1
#define       BUTTON_1    D1        // Button 1

//------------------------------------------------------------------------------------
// WIFI Authentication Variables
//------------------------------------------------------------------------------------
char ssid[] = "YourSSID";                   // SSID of your home WiFi
char pass[] = "YourPassword";               // password of your home WiFi

//------------------------------------------------------------------------------------
// WIFI Module Mode & IP
//------------------------------------------------------------------------------------
IPAddress server(192,168,25,240);           // the fix IP address of the server
WiFiClient client;

//====================================================================================
void setup() {
  pinMode(LedBoard, OUTPUT);                // Initiate the Onboard Led Output
  Serial.begin(115200);                     // only for debug
  WiFi.begin(ssid, pass);                   // connects to the WiFi router
  while (WiFi.status() != WL_CONNECTED) {
    digitalWrite(LedBoard, LOW);
    Serial.print(".");
    delay(500);
  }
  Serial.println("Connected to wifi");
  Serial.print("Status: "); Serial.println(WiFi.status());    // Network parameters
  Serial.print("IP: ");     Serial.println(WiFi.localIP());
  Serial.print("Subnet: "); Serial.println(WiFi.subnetMask());
  Serial.print("Gateway: "); Serial.println(WiFi.gatewayIP());
  Serial.print("SSID: "); Serial.println(WiFi.SSID());
  Serial.print("Signal: "); Serial.println(WiFi.RSSI());
  
  pinMode(LedBoard, OUTPUT);        // Initiate the Onboard Led Output
  pinMode(LED1, OUTPUT);
  pinMode(BUTTON_1, INPUT_PULLUP);  // Initiate the ESP Pin: INPUT_PULLUP - Its mean that you no need put resistor
  digitalWrite(LED1, LOW);
}
//====================================================================================
void loop() {
 
  ContinuousConnection();
}

//====================================================================================

 void ContinuousConnection(){
  client.connect(server, 80);                       // Connection to the server
  digitalWrite(LedBoard,HIGH);
  ReadButton();                                     // Read Button from Transmitter
 }
//====================================================================================

void ReadButton() {
  int reading = digitalRead(BUTTON_1);
  if (reading == LOW) {
    digitalWrite(LedBoard, LOW);                     // to show the communication only (inverted logic)
    client.print("I am Transmitter\r");
    delay(200);
    digitalWrite(LedBoard,HIGH);                     // to show the communication only (inverted logic)
  }else{
   ClientContinue(); 
  } 
}

//====================================================================================
void ClientContinue(){
  client.println("Transmmiter");                      // sends the message to the server
  String answer = client.readStringUntil('\r');       // receives the answer from the sever
  client.flush();
  
  if (answer == "I am Receiver") {                    // compares if the response of the receiver is equal to 'SWITCH'
    digitalWrite(LED1, !digitalRead(LED1));           // if it changes the status of the LED
    digitalWrite(LedBoard, LOW);
    Serial.println("Data Received: " + answer);
    delay(200);                                       // client will trigger the communication 200 milliseconds
    digitalWrite(LedBoard, HIGH);
  }
}
//====================================================================================

ARQUIVOS PARA BAIXAR:

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

Você pode também ver esse vídeo com detalhes de montagem e explanação do código em nosso canal



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