Raspberry Pi – descobrindo IP para acesso headless

A Raspberry Pi, conhecidíssima plataforma computacional, tornou-se um coringa das aplicações que exigem o uso de um sistema operacional. Podendo ser utilizada com monitores HDMI, VGA, controlando displays LCD ou até mesmo em modo headless, o leque possível de aplicação desta plataforma é gigantesco. Em termos de consumo energético e cabeamento, sem dúvida operá-la em modo headless (seja por VNC ou via SSH) é a melhor opção. E é justamente sobre como descobrir o IP da Raspberry Pi a qualquer momento (para acesso headless) de que esse artigo se trata.

Conectividade à rede: IP fixo ou dinâmico?

Quando se trata em operação headless, é fundamental se descobrir o endereço da placa na rede (IP). Neste ponto, nos deparamos com três possibilidades:

  1. Fixar um IP à placa
  2. Comunicar através de hostname
  3. Utilizar IP dinâmico (DHCP)

Quanto à fixar um IP, não é uma solução muito interessante. Motivo: se ao entrar na rede já existir algum dispositivo com o IP desejado, problemas acontecerão. Dessa forma, esta ideia é válida desde que toda a rede esteja endereçada em faixas bem definidas, algo que pode ser impossível em alguns dispositivos que não permitam fixar o IP.

Já quanto a se comunicar via hostname, esta é uma boa ideia, mas não pode ser tão simples assim configurar um hostname válido para toda sua rede. Além disso, se existirem dois hostnames iguais na rede, problemas acontecerão (similar à situação de dois IPs idênticos em uma rede).

Portanto, resta-nos utilizar IP dinâmico / DHCP. Desta forma, basicamente nada é preciso além de se informar a rede desejada para se conectar e a senha. Portanto, a garantia de não haver IPs duplicados ficará sob responsabilidade do roteador. Resumindo: a opção “menos traumática” seria utilizar IP dinâmico.

Ok, mas como saber qual o IP da Raspberry Pi (“de fora” / sem estar em um terminal do sistema operacional da placa)?

 

Aí é que entra o assunto desde artigo. Aqui, irei mostrar uma solução simples para tal.

A ideia é simples: acessar diretamente a Raspberry Pi (diretamente = com um monitor, teclado e mouse, enfim, como um computador comum) e fazer um script em Python capaz de mandar, via MQTT, o seu IP na rede local para o broker em um determinado tópico (e fazer com que este script seja executado automaticamente ao final do boot da placa). Em posse do tópico e conectado no broker (usando um client MQTT qualquer, como MQTTLens ou MyMQTT, por exemplo), é possível saber em qualquer momento o IP da Raspberry Pi na rede local e, finalmente, utilizá-lo para acessar a placa via SSH ou VNC (ou seja, em “modo headless”).

Para fazer isso, siga o procedimento abaixo:

  1. Acesse a Raspberry Pi como um computador normal (conectar teclado, mouse e monitor à placa). Certifique-se que a Raspberry Pi tem acesso à Internet.
    Instale a biblioteca para se conectar a brokers MQTT com o seguinte comando:

     
  2. Abra o console / terminal e dirija-se a pasta home com o seguinte comando:

     

    Agora é chegada a hora de criarmos o script. Crie o arquivo de script Python e abra-o no editor nano com o seguinte comando:

     

  3. Cole o conteúdo abaixo no editor.IMPORTANTE: altere o tópico de publish para não ocorrer coincidência com tópico que alguém já esteja usando no broker. Após feito isso, pressione Ctrl + x e confirme o salvamento do arquivo.Observe que o script começa já com um delay de 60 segundos. Este delay existe para que se garanta que o Linux já inicializou por completo (sobretudo quanto à conectividade de rede) antes do script rodar.

     

     

  4. Agora é a hora de fazer com que seu script inicie automaticamente assim que a Raspberry Pi bootar. Para isso, acesse o arquivo /etc/rc.local com o seguinte comando:

    E, no arquivo, antes da linha exit(0), adicione a seguinte linha:

    Após feito isso, pressione Ctrl + x e confirme o salvamento do arquivo.
    Pronto! Agora basta reiniciar a Raspberry Pi, usar um client qualquer de MQTT para dar subscribe no tópico escolhido e aguardar a mensagem MQTT contendo o IP da Raspberry Pi na sua rede local! Observe o resultado de um teste que eu fiz (utilizando o client MQTTLens):

Gostou do artigo? Tem dúvidas? Tem críticas? Comente abaixo!