banner

IOT Poderosa com NodeJS ESP32



Hoje quero te apresentar um exemplo de WebSocket utilizando ESP32 e NodeJS. Neste caso, o Node no lado do servidor, uma das melhores opções de linguagem para isso, acredito eu. Vou, portanto, te mostrar a instalação e configuração do NodeJS, através de um exemplo bem simples.






RECURSOS USADOS

  • ESP32
  • Led
  • Resistor 330 ohm
  • Protoboard
  • Jumpers
  • Computador WebSocket Server






INSTALAÇÃO DO NODE

Primeiro é necessário que o Node esteja instalado na sua máquina.
Baixe a versão compatível com o seu sistema operacional.


Após o download finalizar execute o instalador.
É recomendado desativar o antivírus (caso exista) para evitar problemas na instalação.


Siga a instalação padrão...



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



Vá em Configurações avançadas do sistema


Vá em Variáveis de Ambiente


Em Variáveis do sistema, procure por Path e clique em Editar


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:
1. npm install
2. node websocket.js


Conceda a permissão de acesso do Firewall


Pronto, uma mensagem será exibida informando a porta em que o servidor está utilizando.







MONTAGEM







CÓDIGO

Bibliotecas necessárias

WebSocket Client ESP32


Fluxograma ESP32




Código ESP32

Declarações e Variáveis

#include <ArduinoWebsockets.h>

const char* ssid = "NOME_REDE"; // Nome da rede
const char* password = "SENHA_REDE"; // Senha da rede
const char* websockets_server_host = "192.168.3.144"; // IP do servidor websocket
const int 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;


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.");




    // Tentamos conectar com o websockets server
    bool connected = client.connect(websockets_server_host, websockets_server_port, "/");

    // Se foi possível conectar
    if(connected) 
    {
        // Exibimos mensagem de sucesso
        Serial.println("Connected!");
        // Enviamos uma msg "Hello Server" para o servidor
        client.send("Hello Server");
    }   // Se não foi possível conectar
    else 
    {
        // Exibimos mensagem de falha
        Serial.println("Not Connected!");
        return;
    }
    
    // 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);
    });
}



Loop



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



Código Node

Fluxograma 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();


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
});


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);
        }
    });


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);
    });
});





FAÇA O DOWNLOAD DOS ARQUIVOS

PDF

INO





2 comentários:

Tecnologia do Blogger.