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

modem

A necessidade de equipamentos embarcados conectados à internet continua crescendo a cada dia. Uma ótima opção quando não se tem internet cabeada ou Wi-Fi é buscar cobertura das redes de telefonia móvel. Sendo assim, este tutorial apresenta as configurações necessárias para conectar uma placa utilizando Linux Embarcado à internet por meio do link PPP (Point-to-Point Protocol).

 

Equipamento Utilizado

 

Para este tutorial foi utilizado o módulo Colibri iMX6S em conjunto com a placa Colibri Evaluation Board, ambos da Toradex. A Colibri Evaluation é uma placa recomendada para desenvolvimento de projetos, que disponibiliza uma variedade de interfaces de conectividade, incluindo USB 2.0, 100 Mbit Fast Ethernet, I2C, SPI, RS232, RS485 e CAN. As interfaces multimídia disponíveis incluem áudio analógico, HDMI, LVDS, VGA e LCD TFT.

 

Para realizar a conexão com a internet, é possivel executar todo o tutorial com qualquer modem USB ou Serial. Atente-se apenas a adaptar a interface usada do “/dev” e aos comandos “ATs” devido ao fato de que cada modem tem sua própria lista de comandos.

 

No nosso caso, nos baseamos em um modem 3G da Huawei modelo E173s, com um SIM card da Operadora Vivo.

 

Preparando o KERNEL

 

Para utilizar modens USB por meio do protocolo PPP, é necessário que o kernel Linux possua suporte a algumas funcionalidades. Sendo assim, caso não esteja pré-selecionado no kernel, será necessário adicionar alguns itens. Para compilar o Kernel, sugiro que usem o artigo abaixo como base:

 

http://developer.toradex.com/software-resources/arm-family/linux/board-support-package/build-u-boot-and-linux-kernel-from-source-code


Basicamente o processo para compilar o kernel se resume nos seguintes passos:

  • Configuração da toolchain;
  • Baixar o kernel do repositório;
  • Configurar as características padrão do processador (defconfig);
  • Alterá-las para sua aplicação;
  • Compilar.

 

Quando você estiver no passo de alterar as configurações padrões, entre no menuconfig e certifique-se de habilitar as seguintes opções:

 

 

 

Programas necessários

 

Para configurar e conectar o modem à internet, o Linux utiliza além dos drivers do kernel, um software a nível de aplicação que gerência a conexão. Normalmente as imagens da Toradex já vem com o PPP instalado.

 

Caso você não tenha o programa "ppp" instalado, e você tenha uma imagem baseada em Yocto ou Openembedded, adicione ao arquivo “local.conf” o pacote PPP:

 

 

 

Testando comunicação com Modem

 

Após ter instalado todos os drivers e programas necessários, é possível identificar se sua placa reconheceu o modem através do /dev. Basicamente o driver simula a conexão USB em várias conexões seriais.

 

Execute o comando para buscar as interfaces /dev/ttyUSB.

 

 

Se os arquivos ttyUSB0, ttyUSB1 … e ttyUSB2 forem encontrados, o modem USB foi reconhecido.

 

Caso você queira ir mais a fundo nos testes, é possível usar um terminal serial como "minicom" para iniciar a comunicação com o modem e validar a comunicação com o mesmo.

 

No meu caso o meu modem estava configurado com velocidade 115200.

 

 

 

Configurando os Arquivos do PPP

 

Após ter validado a conexão serial com o modem é hora de criar os arquivos de configuração para conexão com a internet.

 

Você deverá ser capaz de encontrar a pasta "/etc/ppp". Iremos criar alguns arquivos dentro dela para realizar a conexão.

 

Primeiro, iremos criar o arquivo de configuração do PPP:

 

 

No meu caso iremos usar o arquivo de autenticação PAP (variam em relação à operadora).

 

 

O próximo passo foi criar o arquivo dentro da pasta /etc/ppp/peer.

 

Nele estão as configurações para cara operadora e o caminho para o arquivo chat.

 

Para a Vivo foi criado o seguinte arquivo:

 

 

Agora iremos criar o arquivo responsável por enviar os comandos AT para o módulo 3G estabelecer a conexão com a internet. Esse arquivo varia conforme o módulo usado.

 

 

 

Conectando à Internet

 

Em seguida iremos executar o programa PPP e analisar os log’s para verificar a execução de cada comando AT.

 

 

Após executado, abra o arquivo de LOG.

 

 

No meu caso obtive o seguinte resultado:

 

 

Conforme visto no log, o script chat é executado passo a passo até obter:

 

 

Você pode validar a sequência de comando necessária para chegar até o connect por meio do terminal serial. Uma vez validado você pode gerar seu chat script personalizado.

 

Após verificar que foi possível obter um IP da operadora, veja se a interface de rede ppp0 está ativa:

 

 

 

Testando a conexão

 

Em seguida, teste a conexão com a internet pingando algum IP externo:

 

 

Para configurar o DNS podemos usar o comando a seguir, e então “pingar” uma URL. Por exemplo:

 

 

Setup para teste de conexão com modem
Figura 1 - Setup para teste de conexão

 

Podemos evitar que o arquivo resolv.conf seja reescrito quando a placa é reiniciada com o comando:

 

 

Agora é possível acessar a placa via SSH de um computador externo conectado na internet usando o comando a seguir:

 

 

 

Configurando um nome Host para nosso IP

 

Outra coisa que podemos fazer é dar ao nosso IP um nome host. Para isso utilizamos o serviço do site NoIP. Foi criada uma conta gratuita e adicionado um Host. No nosso caso foi escolhido toradex.noip.me.

 

Configurando um nome Host para nosso IP usando modem 3G
Figura 2 - Configurando um nome Host para nosso IP

 

Após criado um host no site podemos acessar a placa com o comando:

 

 

No nosso caso, sempre que reiniciamos a conexão ou o modem 3G, recebemos um novo endereço IP. Então se tentarmos conectar com a placa novamente, vamos notar que não temos mais acesso. Para contornar esse problema, existe o método chamado DNS Dinâmico (Dynamic Domain Name System). O site noip.me também oferece o serviço de DNS Dinâmico. Algumas informações para realizar esse processo de troca de IP podem ser encontradas aqui. Basicamente precisamos fazer um http request para o site deles contendo informações como IP, nome do host, nome de usuário e senha.

 

Para fazer esse request foi feito um programa em Python, que é executado quando iniciamos a conexão do modem, e basicamente segue a seguinte sequência:

 

Fluxograma do programa em Python - modem 3G
Figura 3 - Fluxograma do programa em Python

 

 

Após criado o programa em python e tornado o mesmo executável com o comando chmod +x, podemos colocá-lo na pasta /etc/ppp/ip-up.d/ que é a pasta onde se encontram os scripts executados após o link da conexão ppp ser estabelecido ou criar dentro dessa pasta um pequeno script que chama nossa aplicação em Python.

 

No diretório /etc/ppp/ se encontram os arquivos como ip-down, ip-up, ppp_on_boot e também os arquivos que criamos no início do artigo. Sinta-se livre para abrir esses arquivos e verificar o que cada um faz.

 

O ip-up é o script que chama outro script ou programa em python localizado dentro da pasta ip-up.d.

 

No nosso caso criamos um pequeno script dentro da pasta ip-up.d:

 

 

Obs: O script não tem a terminação .sh.

 

Note que todos os comandos print dentro do programa em python podem ser vistos depois no arquivo de log.

 

 

Se tudo foi configurado corretamente, sempre que recebemos um novo IP da Vivo ao realizarmos uma nova conexão, o sistema automaticamente atualiza o nosso Host criado no noip.com, tornando possível o acesso à placa qualquer que seja o seu endereço IP.

 

A partir disso, é possivel realizar muitas outras atividades com relação a redes. Uma delas é compartilhar a internet da placa em que temos conectado o modem 3G USB com algum outro computador via ethernet. Para isso configuramos uma rede LAN básica entre dois computadores e usamos o seguinte comando na placa:

 

 

Além do compartilhamento de internet também é possível fazer port forwarding e muitas outras funções de rede.

 

 

Considerações Finais

 

Conforme visto no tutorial, o sistema operacional Linux te traz diversas funcionalidades já prontas. Sendo assim, basta apenas configurá-las corretamente para obter acesso à interface de rede ppp0. Outro ponto importante é que, independentemente da interface de rede usada, o modo de programar é o mesmo e o gerenciamento do meio (eth0, wlan0 ou ppp0) pelo qual a conexão vai ser estabelecida é feito automaticamente pelo Linux dependendo das rotas. Para aqueles que requerem o uso de redes em projetos e prezam pela flexibilidade do sistema, a utilização do Linux em sistemas embarcados traz uma grande facilidade.

 

 

Referências

 

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.

Raul Munoz
Raul Rosetto Muñoz é graduado em Engenharia Elétrica pela Universidade São Francisco. Desde 2008, tem trabalhando na área de sistemas embarcados. No começo da sua carreira trabalhou com desenvolvimento de software para microcontroladores. Nos últimos 4 anos, tem focado no desenvolvimento e customização de Linux embarcado. Atualmente é engenheiro de aplicação e vendas na empresa Toradex Brasil, empresa global com matriz na Suíça qual desenvolve computadores em módulo de alta performance.
recentes antigos mais votados
Notificar
trackback

[…] Artigo: Usando modem GSM/3G/4G no Linux Embarcado […]