openFrameworks na Raspberry Pi

Neste artigo vou ensinar a instalar e configurar o openFrameworks (oF) em uma Raspberry Pi, para que você consiga utilizar essas ferramentas poderosas para criar instalações artísticas, projeções, protótipos interativos, ou qualquer coisa no âmbito de expressão criativa.

Creative Coding

 

Enquanto a ampla maioria dos desenvolvedores cria código para desenvolver soluções computacionais para determinados problemas, existem alguns malucos usando código como meio de expressão criativa e artística. O termo Creative Coding designa um conceito parecido com Arte Computacional, porém mais amplo, ficando na intersecção das áreas da Ciência, Tecnologia, Arte e Design, entre outras.

 

Este curta da PBS resume um pouco do conceito de forma bem interessante.

 

 

A Creative Applications Network também faz uma ótima curadoria de diversos projetos. Dentre as ferramentas mais populares utilizadas nesse contexto, temos:

  • openFrameworks (baseada em C++, tema do nosso artigo);
  • Processing (baseado em Java, com uma IDE que deu origem à famosa IDE do Arduino);
  • Cinder (baseada em C++, porém menos cross platform quando comparado ao oF);
  • vvvv (programação visual, licença não comercial concedida pelo vvvv group);
  • Pure Data (programação visual, BSD License);
  • Max/MSP (programação visual, proprietário).

 

Quanto a uma ser melhor que a outra, é um longo debate. No fim das contas, depende muito do que você quer fazer, e como quer fazer. Além disso, muitas vezes o artista não possui um background de programação forte, podendo assim optar por ferramentas mais simples e introdutórias como Processing ou Pure Data.

openFrameworks

 

O openFrameworks é um toolkit C++ open source feito para auxiliar o processo criativo de artistas fornecendo um framework de experimentação simples e intuitivo.

 

O oF foi pensado de forma a servir como uma “cola” de propósito geral, unindo diversas bibliotecas bastante populares, tais como:

  • OpenGL, GLEW, GLUT, libtess2, e cairo para gráficos;
  • rtAudio, PortAudio, OpenAL, Kiss FFT, e FMOD para entrada, saída e análise de áudio;
  • FreeType para fontes;
  • FreeImage para carregar e salvar imagens;
  • Quicktime, Gstreamer e videoInput para grabbing e playback de vídeos;
  • POCO para aplicações focadas em redes/internet;
  • OpenCV para visão computacional;
  • Assimp para carregamento de modelos 3D.

 

O openFrameworks é distribuído sob a MIT License. Isso dá a todos a liberdade de usar o openFrameworks em qualquer contexto: comercial ou não comercial, público ou privado, código aberto ou fechado.

 

O desenvolvimento do openFrameworks é totalmente colaborativo. Ele é resultado da contribuição de várias pessoas que se envolvem em diversas discussões e colaboram com addons e projetos. Atualmente o desenvolvimento é coordenado por Zachary Lieberman, Theo Watson e Arturo Castro.

 

O openFrameworks tenta balancear usabilidade e simplicidade (o core das versões mais antigas do oF foram amplamente usadas para ensinar C++ e OpenGL), especialmente para aqueles que estão mais acostumados com outras linguagens e ambientes, uma vez que a maioria do pessoal envolvido com arte multimídia começa com o Processing.

 

O openFrameworks é bastante poderoso: ele permite o uso de bibliotecas avançadas como OpenCV, permite acesso em baixo nível a hardware de processamento gráfico e possibilita acesso a periféricos como câmeras e outros dispositivos.

 

 

 

Raspberry Pi

Acredito que a maioria dos leitores já conhecem a famosa Raspberry Pi, então sua apresentação será breve. Um computador ARM pequeno e barato, que apesar de suas relativas limitações quando comparada a um Desktop moderno, ainda consegue lidar tranquilamente com recursos como OpenGL ES e processamento de áudio e vídeo com aceleração em hardware. Assim, a Raspberry Pi é uma ótima plataforma para aplicações multimídia.

 

 

oF na Raspberry Pi

 

Durante a escrita deste artigo, o openFrameworks está na versão 0.9.3, e a distribuição da RPi recomendada para esse release é o Raspbian Jessie. O Raspbian Jessie ainda usa binários arm6, apesar das versões mais recentes da RPi já possúirem arm7 e arm8. Caso você queira utilizar uma distro com binários arm7, o oF disponibiliza um download específico para essa arquitetura, contudo alguns recursos ainda não foram amplamente testados, e problemas inesperados podem ocorrer.

 

Neste tutorial cobrirei apenas a utilização do Raspbian Jessie, e também pressuponho que você está trabalhando com um ambiente Linux em seu PC.

 

 

Instalando Raspbian Jessie

 

1 - Baixe a imagem do Raspbian Jessie da página de downloads da Pi aqui;

 

2 - Use o gparted (ou alguma outra ) para formatar o cartão SD para FAT32;

 

3 - Vá para o diretório onde você baixou a imagem (no meu caso ~/Downloads) e extraia o .zip:

 

 

4 - Conecte o cartão SD e execute df -h para listar os dispositivos montados:

 

 

5 - A coluna da esquerda vai mostrar os nomes dos dispositivos montados. O cartão SD vai estar com um nome parecido com "/dev/mmcblk0p1" ou "/dev/sdc1". A última parte do nome (“p1” e “1” nos exemplos anteriores) é apenas o número da partição, e o nome do cartão SD inteiro na verdade será algo parecido com "/dev/mmcblk0" ou "/dev/sdc". Caso apareça mais de um nome, com números diferentes no final, isso apenas significa que o cartão está formatado com mais de uma partição.

 

6 - Desmonte a partição do cartão SD com o comando umount, substituindo o "/dev/sdc1" pelo nome da partição do seu cartão. Caso o cartão possua mais de uma partição, repita o processo para todas elas:

 

 

7 - Grave a imagem no cartão com o comando dd. Certifique-se de que o argumento de if= é o path correto para sua .img e o argumento de of= é o nome correto do seu cartão SD (do cartão inteiro, não uma partição específica). Esse processo pode demorar um pouco, tenha paciência.

 

 

8 - Rode o comando sync como super usuário para limpar o cache e ter certeza de que é seguro retirar o cartão:

 

 

9 - Remova o cartão e insira na RPi.

 

 

Configurando a RPi

 

Podemos inserir comandos na RPi por SSH (remotamente, a partir do seu computador na rede) ou utilizando um teclado USB e um monitor ou TV. Apesar de o SSH dispensar o uso do teclado e tela, ambos precisam ser utilizados inicialmente para habilitar o SSH.

 

1 - Conecte um teclado USB e um monitor com um cabo HDMI ou uma TV com um cabo RCA na RPi;

2 - Ligue a RPi. Se ela entrar direto na interface gráfica, abra um terminal;

3 - Se ela pedir login:

 

 

4 - Digite o seguinte comando:

 

 

5 - Selecione a opção “1 Expand Filesystem” e aperte Enter;

6 - Selecione a opção “9 Advanced Options” e aperte Enter;

6.1 - Selecione “A3 Memory Split” e aperte Enter;

6.2 - Digite 64 e selecione OK;

7 - Selecione a opção “3 Boot Options”;

7.1 - “B2 Console Autologin”;

8 - Caso queira utilizar o SSH, vá na opção “9 Advanced Options”;

8.1 - Selecione “A4 SSH”;

8.2 - Selecione Yes, ou Enable;

8.3 - OK;

 

9 - Saia do menu de configuração (selecionando Finish) e espere a RPi reiniciar. Caso ela não reinicie automaticamente, digite o seguinte comando:

 

 

10 - Se for utilizar o SSH:

10.1 - Conecte um cabo Ethernet à RPi, ligando-a ao seu roteador. Caso você possua uma RPi3 e quiser conecta-la via Wi-Fi, você pode entrar na interface gráfica (comando startx, mouse USB conectado), clicar no ícone de Wi-Fi, selecionar sua rede e digitar sua senha. Depois retorne à linha de comando no botão de desligar da interface gráfica.

10.2 - Digite ifconfig para descobrir o IP da RPi. Se estiver utilizando o cabo Ethernet, o IP será inet addr à direita de eth0. Se estiver usando o Wi-Fi, o IP será o inet addr à direita de wlan0.

10.3 - No seu computador, abra um terminal e conecte a RPi via ssh, substituindo X.Y.Z.W pelo IP da RPi:

 

 

11 - Atualize os pacotes do Raspbian (pode demorar um pouco):

 

 

 

Download do openFrameworks:

 

1 - Faça o download do oF e extraia o .tar.gz no diretório /home/pi/openFrameworks (pode demorar um pouco):

 

 

2 - Rode o script para instalar as dependências do openFrameworks. Além de esperar um pouco, você terá que responder Y algumas vezes que o console te perguntar se realmente deseja instalar determinado pacote;

 

 

3 - Compile o openFrameworks:

 

 

Este processo pode ser um pouco demorado. Na RPi1 o processo pode demorar até algumas horas. Nas RPi2 ou RPi3 o processo pode ser acelerado utilizado os 4 cores do processador (adicionando o argumento -j4 depois do comando make):

 

 

 

Compilando o primeiro projeto

 

O openFrameworks é distribuído com uma série de projetos exemplo, localizados no diretório openFrameworks/examples. Os projetos estão distribuídos nas seguintes categorias:

  • 3d;
  • addons;
  • communication;
  • empty;
  • events;
  • gl;
  • gles;
  • graphics;
  • gui;
  • math;
  • sound;
  • utils;
  • video.

Dentro de cada categoria há alguns exemplos. Os exemplos são uma ótima maneira de ter ideias novas para projetos, além de serem extremamente úteis para analisar o código e aprender como implementar ideias. Para rodar um exemplo navegue para seu diretório, compile e rode. Por exemplo, para o projeto polygonExample:

 

 

Você vai visualizar várias formas na tela conectada à sua RPi. Note que se você estava fazendo tudo por SSH, agora será necessário conectar um monitor ou uma TV à RPi para poder visualizar a aplicação. Para terminar sua execução basta apertar Ctrl+C.

 

Exibindo formas na Raspberry Pi com openFrameworks
Figura 1 - Exibindo formas na Raspberry Pi

 

Para criar seu próprio projeto, copie o exemplo vazio de openFrameworks/examples/empty/emptyExample para openFrameworks/apps/myApps/meuProjeto:

 

 

É importante notar que na RPi não é possível fazer uso do projectGenerator do openFrameworks, e por isso é necessário copiar o emptyExample para gerar a estrutura básica de diretórios e arquivos para o projeto.

 

Outro detalhe importante é que todos projetos devem estar exatamente 3 diretórios abaixo do diretório openFrameworks. Note que é exatamente isso que acontece em /examples/graphics/polygonExample e /apps/myApps/meuProjeto.

 

O desenvolvimento dos projetos pode ser feito no seu PC e depois compilado na RPi, ou você pode conectar uma IDE via SSH na RPi para agilizar o processo.

 

A partir daqui, o negócio é botar sua criatividade pra funcionar!

 

A documentação do oF pode ser encontrada aqui.

Diversos tutoriais podem ser encontrados aqui.

Alguns ótimos livros de openFrameworks:

 

 

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.

Bernardo Rodrigues
Formado em Engenharia Eletrônica pela EESC-USP, com período sanduíche na UNSW. Mestrando em Engenharia Elétrica e de Computação pela EMC-UFG. Nas horas vagas toco na minha banda, e trabalho em instalações interativas com Sistemas Embarcados.

1
Deixe um comentário

avatar
 
1 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
Luiz Moraes Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Luiz Moraes
Visitante
Luizinho

"existem alguns malucos usando código como meio de expressão criativa e artística"

Ri muito com isso!!!

Trabalho com Creative Coding há uns 10 anos e pra mim é tão natural isso que achei engraçado sermos taxados de malucos, kkk. Mas afinal somos.