Manual

do

Maker

.

com

Usando o Linux da Arduino Industrial pelo ATmega32u4

Usando o Linux da Arduino Industrial pelo ATmega32u4

Dando sequência à série de artigos sobre esse Arduino, vamos ver agora como aproveitar os recursos do Linux da Arduino Industrial dentro do sketch do Arduino. No artigo anterior mostrei como acessar o sistema operacional por ssh porque precisava também saber quais ferramentas de sistema estão disponíveis no Linino (o Linux do Arduino Industrial 101). Agora vou mostrar algumas das facilidades que a plataforma oferece.

Programar o sketch no CodeBlocks

Vamos juntar dois prazeres? Programar uma board dessas já quebra a rotina, mas programar no CodeBlocks e ter o recurso de auto-complete é melhor ainda! Se vocẽ ainda não viu como configurar o CodeBlocks para programar seu Arduino, sugiro que dê uma lida nesse outro artigo.

Como eu citei anteriormente, pode haver dúvida em relação ao nome da placa. Antes de criar o projeto, foi necessário saber como que a Arduino Industrial 101 é identificada pelo PlatformIO. Para isso, digitei um comandinho:

platformio boards|egrep -i 101

Se você der uma olhadinha no artigo anterior, vai reparar que esse nome está disposto na interface do Arduino Industrial 101. O nome da board é chiwawa. Tendo identificado a board, posso dizer seguramente os comandos para criarmos o projeto:

cd && mkdir 101 && cd 101
platformio init --ide codeblocks --board chiwawa

Agora é só abrir a IDE CodeBlocks e abrir o arquivo platformio.cbp. Como descrito nesse artigo, os arquivos do projeto devem ficar dentro do diretório src. Não podemos nos esquecer de fazer o include do header Arduino.h para poder compilar e também para contarmos com o recurso de auto-completação.

Instalar dependências no Linux da Arduino Industrial

Para fazermos essa interação do ATmega32u4 com a MIPS, devemos previamente instalar alguns pacotes. Se ainda não sabe como fazer o login por ssh em sua Arduino Industrial 101, dê uma lida nesse artigo. Agora estou utilizando a Bridge.h para esse tutorial, mas pretendo mostrar algumas coisas com  a Ciao.h também.

Faça login por ssh e digite os comandos:

opkg update
opkg upgrade arduinoos python python-mini
opkg install ciao
reboot

Experimento

Vamos verificar o status de uma página. Se tudo estiver ok, o header de uma página normalmente devolve o código HTTP 302 Found. Para esse teste, vamos utilizar a página da Uol.

Primeiro, conectei ao Linino por ssh. É bom que se saiba um pouco de shell script para fazer essa tarefa, senão você acaba caindo em outro problema, mas com um pouco de pesquisa no google você consegue fazer praticamente qualquer coisa. E é capaz de você não querer fazer mais nada diretamente em C. Dessa vez vou explicar em detalhes para entender o conjunto de comandos no shell e nos próximos artigos só coloco o comando.

Fazer download da página inicial

A informação que quero está bem na página inicial, em algum lugar. Primeiro fiz o download bruto pra analisar o retorno. Para fazer esse download, usei a ferramenta chamada curl:

curl --header --url uol.com.br

A consulta ao host (feita diretamente no Linux da Arduino Industrial para testar).

Antes de mostrar o comando, preciso falar de um conceito de shell script. A saída de um comando é a entrada de outro. A saída de um comando é passada para outro comando através de pipe ("|"). Ex:

echo "hello world"|egrep hello

Como existe a palavra "hello" na frase, o grep exibe o resultado completo na saída do terminal. Se a palavra "hello" não existisse, nada seria exibido. Isso é um filtro, nesse caso.

Você pode estar se perguntando: " O que isso tem a ver com Arduino"? - Eu digo que agora, com o Arduino Industrial 101, tem tudo a ver. Nós vamos usar isso em nosso sketch.

Só uma nota importante: O Linux da Arduino Industrial é baseado no OpenWRT, que por sua vez utiliza o busybox, que contempla toda a base de comandos da raíz do sistema. Por isso, sempre que for compor comandos, execute na shell desse sistema, porque os comandos tem comportamento diferente de um sistema compilado para x86.

Filtrar o campo de status

E antes que apareça um gênio do shell script pra dizer que faz melhor, eu digo que eu também faço. Digitei as primeiras coisas que vieram na cabeça pra agilizar o resultado, não planejei nada, mas se você aprender shell script, vai ver que dá pra melhorar.

Para filtrar o campo desejado, juntei os comandos curl, egrep e sed.

A linha que utilizaremos será essa:

String commandShell = "curl --header --url uol.com.br|egrep '[[:digit:]]{3}'|sed -re 's/(\<.?title\>)//g'";

Nesse comando, o curl recolhe o header completo. Essa saída é passada para o comando grep, que seleciona somente a linha que contém o código, seja ele qual for. A saída da expressão regular com o comando grep é a entrada para o comando sed, que remove as tags HTML da linha utilizando uma expressão regular também, e assim temos apenas 302 Found como resultado:

302_found.webp

Agora precisamos capturar a resposta e exibir na serial. Aqui fazemos algo simples, mas poderiamos fazer outras coisas; tocar um buzzer, acender um LED, fazer uma comunicação com um servidor remoto, etc. Inclusive, poderiamos acessar o servidor web remoto e reiniciar o serviço HTTP caso encontrassemos erros (se o site estivesse sob nosso controle, claro).

Sketch para comunicação com o Linux da Arduino Industrial

E o sketch fica com pouquíssimas linhas, sem nenhuma complicação:

/*
Exemplo de interação com o Linux da Arduino Industrial
*/
#include <Arduino.h>
#include <Process.h>
#include <Bridge.h>

String commandShell = "curl --header --url uol.com.br|egrep '[[:digit:]]{3}'|sed -re 's/(\\<.?title\\>)//g'";

void setup() {
  Bridge.begin();
  SerialUSB.begin(9600);

  //Aguarda a comunicação serial
  while (!SerialUSB);
}

void loop() {
  Process p;

  p.runShellCommand(commandShell);

  //aguarda a finalização do processo...
  while (p.running());

  //...então lê a saída.
  String result = "";
  while (p.available()) {
      result += (char) p.read();
  }
  if (result.length() > 1){
     SerialUSB.print("Site uol.com.br: ");
     SerialUSB.println(result);
  }
  delay(10000);  //delay de 10 segundos para verificar novamente
}

Tem muito mais coisas que pretendo mostrar, esse simples artigo é só pra ir formando a ideia, mas teremos coisas muito mais elaboradas!

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.