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.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Gustavo Leal
Engenheiro Eletrônico pela Universidade Federal de Itajubá. Engenheiro de Aplicação na Toradex Brasil. Quando não está trabalhando com sistemas embarcados, dedica-se à música e a 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

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