Usando o ESP8266 como interface Wi-Fi no Linux via SLIP

SLIP

Com a crescente demanda por dispositivos pequenos e conectados, pode surgir a necessidade de adicionar conectividade a sistemas que não possuem esta funcionalidade nativa.

 

Este artigo mostrará como utilizar o popular chip ESP8266 (com o módulo ESP-12 NodeMcu) como uma interface de rede no Linux pelo protocolo SLIP (Serial Line IP). Isso permitirá que uma conexão com a internet estabelecida via Wi-Fi no módulo seja roteada pelas linhas RX e TX de uma conexão serial.

 

Neste tutorial, utilizaremos como exemplo o computador em módulo Colibri iMX6ULL da Toradex juntamente com uma Iris Carrier Board.

 

 

O protocolo

O SLIP (Serial Line Internet Protocol) é utilizado para a comunicação utilizando IP entre duas máquinas pré-configuradas. Este tipo de conexão é chamado de link Point-to-Point.

 

Este protocolo é bastante simples e não possui recursos como controles de erro e endereço. Atualmente, o protocolo mais utilizado para este tipo de comunicação é o PPP (como em modems 3G/4G, por exemplo).

 

Apesar disso, este protocolo é bastante útil em aplicações onde os dispositivos são pré-configurados, oferecendo baixo overhead e transmissão simples de dados, onde cada frame é constituído apenas pelos dados a serem transmitidos acrescidos do caractere ASCII END.

 

 

Habilitando SLIP no kernel

 

Neste exemplo, o SLIP não vem habilitado por padrão no kernel. Seguimos estas instruções para recompilá-lo, habilitando como built-in a opção Device Drivers -> Network device support -> SLIP (serial line) support, e então gravá-lo na placa.

 

 

 

Compilando o firmware para o ESP8266 (no seu computador)

 

Na sua máquina host, baixe e instale o esp-open-sdk. Teste seu funcionamento compilando e gravando o exemplo "blinky" na placa.

 

Em outro diretório, clone o repositório esp_slip_router. Este firmware fará a conexão do ESP8266 com sua rede Wi-Fi e o roteamento via SLIP. Modifique o Makefile alterando a variável de ambiente BUILD_AREA conforme sua instalação do esp-open-sdk. Altere o arquivo user/user_config.h com as configurações da sua rede Wi-Fi (SSID e senha).

 

Execute:

 

Se a compilação for feita com sucesso, grave o firmware compilado no ESP8266 (que deve estar conectado via USB do módulo NodeMCU) executando:

 

Após a gravação, a placa reiniciará automaticamente.

 

 

Conectando o ESP8266 à sua placa via UART

 

Conecte os pinos RX e TX do módulo NodeMCU aos pinos TX e RX da sua placa de desenvolvimento, respectivamente. Na Iris Carrier Board, usaremos a UART_C: no conector X16, UART_C_TXD é o pino 35 e UART_C_RXD é o pino 34.

 

Não se esqueça da alimentação: conecte os pinos GND e 3V da placa NodeMCU aos pinos 36 e 33 da Iris Carrier Board, respectivamente. Estas ligações estão representadas na figura a seguir:

 

 

Instalando dependências

 

No Linux, utilizaremos o comando slattach, que faz parte do pacote net-tools da Linux Foundation.

 

Neste exemplo, o pacote não está disponível nos repositórios. Portanto, compilaremos esta dependência utilizando Yocto/OpenEmbedded.

 

Siga estas instruções para configurar o OpenEmbedded no seu computador e compile a recipe net-tools:

 

Copie os pacotes .ipk gerados para sua placa. Eles devem estar em deploy/ipk/armv7at2hf-neon.

 

Então instale-os na sua placa:

 

Configurando o ESP8266 como interface de rede no Linux

 

Com o ESP8266 conectado, execute o seguinte comando na sua placa:

 

Isto ligará o dispositivo serial line que está na UART_C (mapeada como /dev/ttymxc4 no computador-em-módulo utilizado) com uma baud rate de 115200 utilizando o protocolo SLIP.

 

Então execute:

 

Este comando criará uma nova interface de rede (sl0) com endereço de rede 192.168.240.2 e endereço Point-to-Point 192.168.240.1. Estes endereços vêm por padrão e podem ser alterados no arquivo user_config.h no firmware.

 

Agora que o ESP8266 está funcionando como um roteador, você pode acessar o console de configuração do firmware por telnet:

 

Se você configurou SSID e senha no arquivo user_config.h, o ESP8266 já deverá estar conectado à sua rede Wi-Fi. Confira executando:

 

Caso deseje alterar SSID e senha, execute:

 

 

Acessando a internet

 

Para acessar a internet usando a interface criada, primeiro adicione a rota:

 

E o servidor DNS que foi mostrado no comando *show* no console do firmware acima (192.168.0.1 neste exemplo):

 

A internet já deverá estar funcionando. Faça um teste pingando um endereço:

 

Ou baixando um arquivo:

 

Note que, como a implementação do protocolo SLIP pelo slattach limita a velocidade da UART a 115200 baud, a velocidade da conexão será um pouco lenta, mas suficiente para comunicação de um dispositivo IoT.

 

Boa comunicação! 🙂

 

 

Saiba mais

 

Usando modem GSM/3G/4G no Linux Embarcado

O que é o protocolo NTCIP de comunicação?

Aplicações e Perfis do Bluetooth Low Energy (BLE)

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Gustavo Leal
Engenheiro Eletrônico pela Universidade Federal de Itajubá. Engenheiro de Aplicações na Toradex Brasil. Quando não está trabalhando com sistemas embarcados, dedica-se à música, impressão 3D e vídeos de gatinhos.

5
Deixe um comentário

avatar
 
2 Comment threads
3 Thread replies
3 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
André FelicianoGustavo LealGiovanni Bauermeister Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
André Feliciano
Membro
André Feliciano

Gustavo,

Também dá para usar essa esquema em uma Raspberry ?

André Feliciano
Membro
André Feliciano

Valeu Gustavo. Parabéns pelo artigo.

Giovanni Bauermeister
Membro
Giovanni Bauermeister

Muito legal essa solução Gustavo. Já dá pra pensar numa carrier board com um ESP8266 embarcado hehe