Você está na página 1de 35

WEBSOCKETS

Por Fernando Koyanagi


Intenção dessa aula

1. Apresentar um exemplo de WebSocket


utilizando ESP32 e NodeJS.

2. Apresentar instalação e configuração do


NodeJS.
Demonstração
Recursos usados
• ESP32
• Led
• Resistor 330 ohm
• Protoboard
• Jumpers
• Computador WebSocket Server
Links onde
comprei os
componentes

Em www.fernandok.com
forum.fernandok.com
Instagram
fernandok_oficial

Telegram
fernandok_oficial
Instalação do Node
Primeiro é necessário que o Node esteja instalado na sua máquina.
Acesse:
https://nodejs.org/en/download/
Baixe a versão compatível com o seu sistema operacional.
Instalação do Node
Após o download finalizar execute o instalador.
É recomendado desativar o antivírus (caso exista) para evitar problemas na instalação.
Instalação do Node
Siga a instalação padrão...
Instalação do Node Variáveis de Ambiente

Para que o sistema reconheça o comando node é necessário adicionar o local


onde o node foi instalado às variáveis de ambiente do sistema.
Clique com o botão direito em Computador e selecione Propriedades
Instalação do Node Variáveis de Ambiente
Vá em Configurações avançadas do sistema
Instalação do Node Variáveis de Ambiente
Vá em Variáveis de Ambiente
Instalação do Node Variáveis de Ambiente
Em Variáveis do sistema, procure por Path e clique em Editar
Instalação do Node Variáveis de Ambiente
Clique em Novo
Digite: C:\Program Files\nodejs (ou o local onde o node está instalado)
Clique em OK
E por fim reinicie a máquina
Iniciando servidor
Abra o prompt de comando dentro da pasta onde está o código
NodeEchoWebSocket e execute:

node websocket.js
Iniciando servidor
Conceda a permissão de acesso do Firewall
Iniciando servidor
Pronto, uma mensagem será exibida informando a porta em que o
servidor está utilizando.
Montagem
Montagem
Código
Bibliotecas necessárias
• WebSocket Client ESP32
https://github.com/gilmaimon/ArduinoWebsockets/
Fluxograma ESP32
Setup Loop
Código ESP32 Declarações e Variáveis

#include <ArduinoWebsockets.h> // Bilioteca WebSockets

const char* ssid = "NOME_REDE"; // Nome da rede


const char* password = "SENHA_REDE"; // Senha da rede
const char* websockets_server_host = "192.168.0.115"; // IP do servidor websocket
const uint16_t websockets_server_port = 8080; // Porta de conexão do servidor

// Utilizamos o namespace de websocket para podermos utilizar a classe WebsocketsClient


using namespace websockets;

// Objeto websocket client


WebsocketsClient client;

// Led
const int led = 23;
Código ESP32 Setup
void setup()
{
// Iniciamos a serial com velocidade de 115200
Serial.begin(115200);

// Definimos o pino como saída


pinMode(led, OUTPUT);

// Conectamos o wifi
WiFi.begin(ssid, password);

// Enquanto não conectar printamos um "."


while(WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(1000);
}

// Exibimos "WiFi Conectado"


Serial.println("Connected to Wifi, Connecting to server.");
Código ESP32 Setup
// Tentamos conectar com o websockets server
bool connected = client.connect(websockets_server_host, websockets_server_port, "/");

if(connected) // Se foi possível conectar


{
Serial.println("Connected!"); // Exibimos mensagem de sucesso
// Enviamos uma msg "Hello Server" para o servidor
client.send("Hello Server");
} // Se não foi possível conectar
else
{
Serial.println("Not Connected!"); // Exibimos mensagem de falha
}
// Iniciamos o callback onde as mesagens serão recebidas
client.onMessage([&](WebsocketsMessage message)
{
// Exibimos a mensagem recebida na serial
Serial.print("Got Message: ");
Serial.println(message.data());
// Ligamos/Desligamos o led de acordo com o comando
if(message.data().equalsIgnoreCase("ON"))
digitalWrite(led, HIGH);
else
if(message.data().equalsIgnoreCase("OFF"))
digitalWrite(led, LOW);
});
}
Código ESP32 Setup
// Tentamos conectar com o websockets server
bool connected = client.connect(websockets_server_host, websockets_server_port, "/");

if(connected) // Se foi possível conectar


{
Serial.println("Connected!"); // Exibimos mensagem de sucesso
// Enviamos uma msg "Hello Server" para o servidor
client.send("Hello Server");
} // Se não foi possível conectar
else
{
Serial.println("Not Connected!"); // Exibimos mensagem de falha
}
// Iniciamos o callback onde as mesagens serão recebidas
client.onMessage([&](WebsocketsMessage message)
{
// Exibimos a mensagem recebida na serial
Serial.print("Got Message: ");
Serial.println(message.data());
// Ligamos/Desligamos o led de acordo com o comando
if(message.data().equalsIgnoreCase("ON"))
digitalWrite(led, HIGH);
else
if(message.data().equalsIgnoreCase("OFF"))
digitalWrite(led, LOW);
});
}
Código ESP32 Loop

void loop()
{
// De tempo em tempo, o websockets client
checa por novas mensagens recebidas
if(client.available())
client.poll();

delay(1);
}
Código
Fluxograma Node
Código Node Declarações e variáveis

var WebSocketServer = require('websocket').server;


var http = require('http');

// Porta que o server irá escutar


const port = 8080;

// Cria o server
var server = http.createServer();
Código Node server.listen e wsServer

// Server irá escutar na porta definida em 'port'


server.listen(port, () => {
// Server está pronto
console.log(`Server está executando na porta ${port}`);
});

// Cria o WebSocket server


wsServer = new WebSocketServer({
httpServer: server
});
Código Node wsServer.on

// Chamado quando um client deseja conectar


wsServer.on('request', (request) => {
// Estado do led: false para desligado e true para ligado
let state = false;

// Aceita a conexão do client


let client = request.accept(null, request.origin);

// Chamado quando o client envia uma mensagem


client.on('message', (message) => {
// Se é uma mensagem string utf8
if (message.type === 'utf8') {
// Mostra no console a mensagem
console.log(message.utf8Data);
}
});
Código Node Envios para os clients e evento de conexão fechada

// Cria uma função que será executada a cada 1 segundo


(1000 millis) para enviar o estado do led
let interval = setInterval(() => {
// Envia para o client "ON" ou "OFF" dependendo do
estado atual da variável state
client.sendUTF(state? "ON" : "OFF");
// Inverte o estado
state = !state;
}, 1000);// Tempo entre chamadas => 1000 millis = 1 segundo

// Chamado quando a conexão com o client é fechada


client.on('close', () => {
console.log("Conexão fechada");
// Remove o intervalo de envio de estado
clearInterval(interval);
});
});
Em www.fernandok.com
Download arquivos PDF e INO do código fonte

35

Você também pode gostar