17 de maio de 2021

Do bit Ao Byte

Embarcados, Linux e programação

Socket server com ESP32

arrays dinâmicos em C++ | Interagir com ponteiros | Alocação de memória | Ponteiros em C/C++ | Socket server com ESP8266 | Socket server com ESP32 | Socket server com Python | Socket client com ESP32 | Sistema de arquivos no ESP8266

Se leu o artigo sobre a implementação de socket com ESP32 usando LWIP, esse artigo te deixará aliviado. Vamos ver como fazer uma implementação simples de socket server com ESP32, quase idêntico ao socket server com ESP8266. Ainda nessa semana você perceberá a razão pela qual estou escrevendo tanto sobre sockets, acompanhe.

Ainda que seu interesse seja exclusivamente na implementação do socket server com ESP32, recomendo a leitura do artigo sobre o mesmo tema, mas para ESP8266. É uma leitura curta, e cito alguns conceitos importantes; deve ser uma leitura agradável para você que acompanha os artigos do blog. De qualquer modo, teremos também os vídeos explanativos em nosso canal DobitaobyteBrasil no Youtube. Não tenho dedicado tempo, nem tive capricho até hoje, mas decidi melhorar a qualidade dos vídeos, tanto em áudio como em visual. Convido-o a apreciar e sugerir!

Na implementação do socket server com ESP32, simplesmente incluímos a biblioteca WiFi, criamos o server e o client para ler os dados recebidos. Usando uma estrutura quase idêntica com ESP8266, fazemos a leitura e tratamento dos dados de forma semelhante a uma comunicação serial em pouquíssimas linhas, tornando esse método ideal para comunicação M2M. E se precisar implementar uma interface com usuário, existem diversas possibilidades que não HTTP. Em outro artigo relacionado devo mostrar uma aplicação para facilitar a comunicação quando interfaceando com o usuário, que também permitirá preservar o código, evitando intervenção de terceiros, quando seu projeto ou produto depender dessa condição.

#include <WiFi.h>
 
#define SSID   "suaRede";
#define PASSWD "suaSenha";
 
WiFiServer sockServ(123);
 
void setup() {
    Serial.begin(9600);
    delay(1000);
    WiFi.begin(SSID, PASSWD);
 
    while (WiFi.status() != WL_CONNECTED){delay(100)};
 
    Serial.print("IP: ");
    Serial.println(WiFi.localIP());
 
    sockServ.begin();
}
 
void loop() {
    WiFiClient client = sockServ.available();
    if (client) {
        while (client.connected()) {
            while (client.available()>0) {
                char c = client.read();
                client.write(c);
            }
            delay(10);
        }
        client.stop();
        Serial.println("Fim da conexao");
    }
}

Para interfacear com o usuário escreverei um programa em Qt bem simples mostrando alguns exemplos, daí escrevo outro artigo e faço também um vídeo.

Para fazer a comunicação com o socket M2M, basta abrir um TCP client e fazer a comunicação. Mas esse é assunto para outro artigo. Nos encontramos por aqui!

 

Revisão: Ricardo Amaral de Andrade