Decolando seu projeto no IoT: conversor socket/serial para microcontroladores usando esp8266-01

Font Size

Você já percebeu como a área tecnológica está mudando de forma surpreendente nas últimas décadas? É comum usarmos uma série de dispositivos eletrônicos que servem para adaptar uma tecnologia em uma versão mais eficiente. Procure aí pela sua casa ou trabalho um adaptador de tomada, um conversor digital  para televisão ou mesmo um conversor HDMI/VGA.

Na área de automação não é diferente. Um profissional  de automação às vezes precisa converter um padrão tradicional e consagrado em outros padrões que estão na linha de frente da Indústria 4.0. Pensando nisso, a seguir  será detalhado uma forma simples e de baixo custo de transformar um padrão de comunicação sem fio  em um padrão serial com fio  usado em diversos tipos de microcontroladores como PIC, ATMEL, ARM etc. Afinal, microcontrolador que não se comunica, se trumbica também!

Ideia principal

Quem trabalha na área sabe que não é apenas uma coincidência que  automação rima com comunicação. Quando fazemos um curso de microcontroladores, a primeira forma de “conversar” com o mundo externo é através de cabos que usam a comunicação serial  conhecida como UART (Universal Asynchronous Receiver/Transmitter).

Até aqui a mágica parece bem interessante. Mas, e se você desejar acionar uma carga sem usar cabos? Se desejar usar o computador para abrir a porta da sua casa, porém não está com vontade de passar o cabo serial  pela sua sala?

O esp8266-01 é nossa solução! A ideia principal é criar um conversor serial para microcontrolador com wifi. Isto é, levando em conta que o nosso amigo esp8266-01 pode criar uma rede sem fio usando a pilha de protocolos TCP/IP, vamos utilizar uma interface conhecida como socket para criar uma porta de comunicação entre o servidor , que nesse caso é o próprio esp8266-01 e um cliente que pode ser um computador ou um celular. A figura 1 e a figura 2 representam esta ideia do antes e do depois:

Figura 1 – Antes: Comunicação tradicional via serial UART
Figura 2 – Depois: Envio e recepção de comandos pelo wifi

Concluindo, o esp8266 serve como uma ponte entre os dados do wifi e a porta serial e funcionando de forma que não altere os dados. Vale destacar que esta aplicação pode ser usada tanto para aplicações mais simples como o uso de relés, como para aplicações utilizando protocolos de comunicação mais avançados como o protocolo Modbus-RTU ou outras aplicações em IoT.

Material

Programa do conversor serial/socket  para microcontrolador com wifi

Primeiramente, vamos apresentar o programa  1 que representa a utilização do conversor serial/socket utilizando uma rede própria criada pelo ESP8266-01. Em resumo, a mensagem que chega via socket do client TCP/IP sai pela serial e de forma análoga, a mensagem que chega via serial vai para o cliente TCP/IP via socket.

#include <ESP8266WiFi.h>
const char *ssid = "rede_AP";	   //o esp8266 cria esta rede wifi, não é a rede do roteador local
const char *password = "abcd1234"; //senha passa acessar a rede
WiFiServer server(502);		   //define a porta 502 para comunicação (padrão modbus, mas poderia ser qualquer outra porta livre)
char data[250], dcr[250];	   //variáveis para armazenar o caracteres da transmissão/recepção
int ind = 0, icd = 0;
WiFiClient client;
void setup()
{
    Serial.begin(9600);		    //taxa de transmissão
    IPAddress staticIP(192, 168, 4, 2); // IP estático do dispositivo
    IPAddress gateway(192, 168, 4, 1);  // Endereço gateway IP
    IPAddress subnet(255, 255, 255, 0); // Máscara de subrede
    WiFi.mode(WIFI_AP);		    // Trabalhando como Access Point
    WiFi.softAP(ssid, password, 2, 0);
    WiFi.config(staticIP, gateway, subnet);
    server.begin();
    delay(5000);
    Serial.println("Server started");
    Serial.println(WiFi.softAPIP()); //mostra o IP pela serial - opcional
}
void loop()
{
    if (!client.connected())
    { //verifica a conexão com um client
        client = server.available();
    }
    else
    {

        //********INICIO DA ROTINA SERIAL - WIFI***********

        if (Serial.available() > 0)
        {
            while (Serial.available())
            {				  //aguarda dados da serial
                dcr[icd] = Serial.read(); //armazena em um vetor
                icd++;
            }
            for (int j = 0; j < icd; j++)
            {			      //laço for para transmitir os dados para o client
                client.print(dcr[j]); //transmite dados do vetor para o cliente
            }
        }

        //********INICIO DA ROTINA WIFI - SERIAL***********

        if (client.available() > 0)
        {
            while (client.available())
            {				   //aguarda dados do cliente
                data[ind] = client.read(); //armazena em um vetor
                ind++;
            }
            client.flush();
            for (int j = 0; j < ind; j++)
            {			       //laço for para transmitir os dados pela serial
                Serial.print(data[j]); //transmite dados do vetor para a serial
            }
        }
        icd = 0;
        ind = 0;
    }
}

 

Gravando o Esp8266-01

Entre as opções mais tradicionais podemos gravar o esp8266-01 utilizando um gravador ou conversor FTDI de 3,3V conforme os links a seguir:

Mas não tenho gravador, e agora?

Como o esp8266-01 não aceita tensões maiores que 3.3V, podemos utilizar o próprio adaptador  para reduzir a tensão de 5V do padrão TTL para 3,3V. Basta  fazer a ligação mostrada na figura 3, utilizando um pedaço de fio BEM FINO e qualquer conversor que trabalha com saída em RS232 TTL (como 0 PL2303  ou CH340):

 

Figura 3 – Gravando o ESP8266-01 pelo próprio adaptador serial 5V/3.3V (esquerda)

 

 

 

 

 

 

Para gravar utilize os mesmos procedimentos dos exemplos dos links anteriores, mas não esqueça de retirar o jumper (destaque em amarelo da figura 3) para que o ESP8266-01 volte a funcionar normalmente após a gravação.

Agora os fios estão por um fio…

Estamos quase lá. Precisamos só definir quem vai enviar os dados para o microcontrolador utilizando uma conexão socket. Lembre que o esp8266-01 é transparente, ou seja, só entrega e recebe mensagem sem ninguém saber que ele existe.

A seguir são descritas duas opções de configuração do cliente TCP/IP utilizando um celular e um computador para testar o conversor serial para microcontrolador com wifi.

Enviando e recebendo dados por um celular

Como forma de testar a nossa comunicação via celular, vamos utilizar o aplicativo TCP client, desenvolvido pela Solae Systems. Este aplicativo cria um cliente TCP/IP no celular que é capaz de enviar e receber informações através do ESP8266-01. Não esqueça de entrar na rede wifi do ESP8266-01 antes de tentar fazer qualquer comunicação. As figuras 4 ilustra a rede com o nome “rede_AP” criada pelo ESP8266-01.

Figura 4 – Entrando na rede wifi do esp8266-01

Deve-se executar o programa recém instalado TCP Client e então criar o servidor clicando no símbolo  “+” conforme a figura 5.

Figura 5 – Atualizando a lista de servidores

Conforme você viu anteriormente no programa do esp8266-01  consideramos o IP do programa  fixo e sendo assim configuramos o IP definido no programa do esp8266-01 (192.168.4.1) e a porta  502 da interface socket no celular, conforme ilustrado na figura 6.

Figura 6 – Configurando a porta da interface socket

Enviando e recebendo dados por um computador

Similar ao exemplo anterior, agora vamos utilizar um computador para entrar na rede wifi do esp8266-01 utilizando  as opções de conexão de rede. Vários programas podem ser utilizados para fazer essa comunicação, mas para simplificar vamos utilizar um programa de supervisão básica onde precisamos apenas digitar o IP e a porta, conforme ilustrado na figura 7.

Figura 7 – Programa para enviar dados via interface socket

A seguir o vídeo de teste com o programa para ligar e desligar o led utilizando a placa FABPIC versão 1.2 e placa de potência. Mais detalhes desta plataforma de hardware podem ser vistos aqui.

Video 1 – Teste do conversor socket serial

Teste final

Agora que você já aprendeu a configurar o lado do cliente e a gravar o programa no conversor no esp8266-01 precisamos testar a comunicação serial  que sai e entra do esp8266-01. Por fim, para testar a aplicação de nosso conversor precisamos ter outro microcontrolador que execute alguma ação ao receber os dados enviados pela serial. Porém,  neste ponto que chegamos torna-se necessário que você tenha alguma experiência em programação e gravação de  microcontroladores  para podermos utilizar o nosso conversor.

POr exemplo, vamos elaborar um programa  que ao receber um caractere  “L” ele irá ligar um led e irá desligar  este mesmo led ao receber um caractere “D” pela serial . Lembrando  que  o caractere é enviado pela interface socket através do esp8266-01 e convertido para o padrão serial TTL para comunicar com o microcontrolador definido pelo usuário.

A receita final

Cada pessoa tem um gosto que é refletido em uma preferência pessoal de microcontrolador e compilador. Por isso, nossos ingredientes da receita para finalizar o teste de nosso conversor são três programas: um programa para arduino uno e dois programas com o microcontrolador PIC18F4550; um compilado pelo  compilador  CCS e o outro programa utilizando o compilador MikroC. Ou seja, todos sendo escolhidos ao melhor gosto de quem for utilizar o nosso conversor.

const int ledPin = 13; // Led nativo do arduino
void setup() {
Serial.begin(9600);//taxa de transmissão 9600bps
pinMode(ledPin, OUTPUT); // Pino 13 será de saída digital
}
 
void loop()
{
int vel;//tirar ()
if (Serial.available()) { // Verificar se há caracteres disponíveis pela serial
char caractere = Serial.read(); // Armazena caractere lido
switch (caractere) {
      case 'L':
        digitalWrite(ledPin, 1);// se o valor enviado for igual a "L" liga o led no pino 13
        break;
      case 'D':
        digitalWrite(ledPin, 0);// se o valor enviado for igual a "D" desliga o led no pino 13
        break;
}}}

Na figura 8 são mostradas as ligações do esp8266-01 e seu conversor com a placa arduino uno.

Figura 8 – Comunicação adaptador  com Arduino UNO
#define led pin_d0 
#include <18F4550.h>
#fuses HS,CPUDIV1,PLL5,USBDIV
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
void main()
{
while(true)
   {
char selection;
printf("\r\nSelecione:\r\n");//Pequeno menu com as opções
printf(" 1) L - ligar led \r\n");
printf(" 2) D - desligar led \r\n");
do    {
      selection=getc();
      } while (!((selection=='L')||(selection=='D')));//Espera que o caractere enviado seja "L" ou "D".
if (selection=='L')// se o valor enviado for igual a "L" liga o led no pino D0
      {output_high(led);}
else
      {output_low(led);}// se o valor enviado for igual a "D" liga o led no pino D0
   }
}

 

char byte_read;
void main(){
UART1_Init(9600);
TRISD = 0x00; // Configura porta D como saída
while(1) // Loop infinito
{
byte_read = UART1_Read(); // Lê o byte enviado pela serial
if (byte_read=='L') // se o valor enviado for igual a L liga o led no pino D0
{PORTD.F0 = 1;}
if (byte_read=='D') // se o valor enviado for igual a D desliga o led no pino D0
{PORTD.F0 = 0;}
}
}

A seguir são mostradas as ligações do esp8266-01 e seu conversor com o microcontrolador pic18F4550. Vale destacar que a figura representa apenas a comunicação do microcontrolador, sendo necessário incluir a alimentação elétrica e os elementos extras para seu funcionamento como o cristal oscilador, capacitores e o botão de reset.

Figura 9 – Comunicação adaptador esp8266-01 com o pic18F4550 (Ligações apenas da comunicação com o conversor)

 

Conclusão

Chegamos ao final de nosso projeto e espero que você tenha aprendido bastante. Concluindo, ao longo da nossa prática foi apresentada uma forma bem simples de converter um padrão consagrado de comunicação serial em uma rede sem fio, representando  diversas vantagens no que tange principalmente a economia de cabos e a facilidade de utilização de equipamentos em uma rede wifi.

Adicionalmente, o conversor serial para microcontrolador com wifi apresenta um custo razoavelmente baixo e conseguimos implementar uma solução em três plataformas diferentes, capazes de potencializar novos projetos na Industria 4.0 e em aplicações IoT.

Todos os programas desta prática estão disponíveis para baixar no seguinte endereço.

Referência

BRITO, Fábio Timbó; BRITO, Felipe Timbó. Protocolos de comunicação. Curitiba: LT, 2015

Crédito das imagens não autorais:

www.pixabay.com (159115,2168193,47581)

 


	

Posts relacionados

Módulo I2C para LCD 16×2 e Arduino

por autocore
5 anos ago

Monitorando ambiente com NodeMCU

por autocore
8 anos ago

Criando um seletor de cargas com sensor capacitivo

por Danilo Nogueira
6 anos ago
Sair da versão mobile