Caixa de música LEGO – o software

This post is part 2 of 2 of  Caixa de Música LEGO

Tópicos:

  • Pré-requisitos
  • Preparação do cartão SD
  • Configurações do sistema
  • Script em python
  • Automatismo
  • Vários

Pré-requisitos

Convém ter um cartão SD com capacidade 4 GB ou superior, categoria 4 ou superior. O cartão pode ser micro- ou mini-SD desde que se disponha de um adaptador para o formato SD.

É também necessário um computador equipado para lidar com cartões SD ou então um adaptador SD USB.

Estas indicações são para um sistema Linux (mais concretamente Ubuntu 14.04). Não é difícil adaptar para um sistema Windows mas já há  muito não uso nenhum.

Preparação do cartão SD

É necessário um sistema operativo para Raspberry Pi. Eu prefiro o Raspbian por ser baseado em Debian tal como o Ubuntu que venho utilizando há já alguns anos. A versão mais recente está sempre disponível na Raspberry Pi Foundation – o ficheiro .zip contém um ficheiro único, uma imagem de um cartão inteiro pronto a usar (na versão de Junho de 2014 a imagem tem 3.0 GB pelo que um cartão de 4 GB continua a ser suficiente).

O Ubuntu tem uma aplicação gráfica “Disks” (na linha de comando “gnome-disks”) que permite entre outras coisas escrever imagens. Seleccionamos o cartão SD (qualquer coisa como “4 GB Block Device | /dev/mmcblk0”) e depois “Restore disk image” escolhendo o ficheiro .img do Raspbian.

O cartão tem agora duas partições:

  • BOOT
  • 2.9 GB Volume

A primeira será usada como “/boot” e a segunda como “/” como é habitual ma maioria das instalações Linux. Não existe a habitual partição para swap porque [pelo menos no Raspbian] é utilizado um ficheiro dentro de “/”.

Antes de colocar o cartão no Raspberry é necessário alterar alguns ficheiros para ter um sistema funcional. Se montamos a segunda partição (“2.9 GB Volume”) como /X precisamos criar ou editar 2 ficheiros:

  • /X/etc/hostname
  • /etc/network/interfaces

sudo /X/etc/hostname

Este ficheiro deve conter uma única linha, com o nome pelo qual o sistema operativo vai responder:

caixademusica

sudo /X/etc/network/interfaces

Este ficheiro contém a configuração da rede Wi-Fi:

auto lo

allow-hotplug wlan0
iface wlan0 inet dhcp
   wpa-ssid "RedeWiFi"
   wpa-psk "PasswordDaRedeWifi"

iface default inet dhcp

Podemos mais tarde utilizar um endereço IP estático em vez de recorrer ao cliente DHCP (deve acelerar ligeiramente o arranque e utilizar ligeiramente menos RAM). Neste exemplo defini só uma rede Wi-Fi mas é possível definir várias, ver o meu artigo “Raspberry Pi – headless + wireless” (para mim é suficientemente uma única rede já que tenho um router 3G de  bolso configurado de forma semelhante à rede de casa e assim quando levo um Raspberry Pi comigo para testes ou demonstrações uso sempre a mesma configuração).

O cartão já pode ser colocado no Raspberry Pi, podemos confirmar o endereço IP na página de configuração do router (se estivermos a usar DHCP) e aceder remotamente por SSH:

ssh pi@192.168.1.67

(“pi” é o utilizador pré-configurado no Raspbian – a password é “raspberry”, convém alterar mais tarde com o comando “passwd” – e 192.168.1.67 é o endereço que no router aparece atribuido ao host “caixademusica”).

Configurações do sistema

Tendo acesso remoto à Caixa de Música é necessário expandir o file system do cartão de modo a utilizar toda a capacidade deste (como referi, até Junho de 2014 a imagem ocupa apenas 3 GB pelo que num cartão de 4 GB fica 1 GB por alocar e que pode fazer falta)

sudo raspi-config

Escolher “Expand Filesystem” e no final se não for dada opção de reboot (não recordo) dar o comando

sudo reboot

No próximo login o cartão deverá ter cerca de 1.4 GB disponíveis:

df -h

Filesystem      Size  Used Avail Use% Mounted on
rootfs          3.6G  2.0G  1.4G  60% /
/dev/root       3.6G  2.0G  1.4G  60% /
devtmpfs        211M     0  211M   0% /dev
tmpfs            44M  232K   44M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            88M     0   88M   0% /run/shm
/dev/mmcblk0p1   56M   19M   38M  34% /boot

Já é bastante mas como não vou utilizar ambiente gráfico (desktop) posso libertar mais algum espaço (cerca de 1.2 GB mais) e reduzir o peso de futuros updates com os dois comandos:

sudo apt-get --purge remove cups.* xserver.* x11.*
sudo apt-get autoremove

Vamos agora actualizar o Raspbian para a última versão de todos os pacotes instalados:

sudo apt-get update
sudo apt-get dist-upgrade

E instalar as ferramentas necessárias:

sudo apt-get install htop mpg321 mp3gain
  • htop não é necessário mas gosto de utilizá-lo em vez do top nativo.
  • mpg321 é um player não-gráfico de ficheiros mp3 que vai servir para tocar a música que acompanha a «bailarina».
  • mp3gain permite ajustar o ganho dos ficheiros mp3, muito útil quando estes parecem ouvir-se pior que a maioria dos restantes
sudo apt-get install python-pip python3-pip
sudo pip install sh
sudo pip3 install sh
  • sh é uma library de python que permite invocar comandos da shell (do sistema operativo) e que vou usar no meu programa por isso preciso de instalar primeiro.
  • pip é um gestor de libraries para python (instalo duas versões – para python v2 e python v3 – provavelmente bastará a última)

 

Script em pyhton

[por completar]

Automatismo

[por completar]

Vários

[por completar]

 

Primeiras linhas de código

Com um Rover já em condições de andar, faltava o video de demonstração da praxe (o que está no artigo de abertura desta série).

Antes de me meter à aventura com o Snap! limitei-me a transferir para o Raspberry Pi um script muito básico em python que faz o Rover por 4 vezes andar um troço a direito seguido de uma curva à esquerda (idealmente voltando ao ponto de partida mas como não usei nenhum tipo de sensores a única forma de o conseguir foi afinando os tempos à mão) e no final uma rotação em torno de si mesmo várias vezes para a direita:

import nxt
import nxt
import nxt.locator
from nxt.sensor import *
from nxt.motor import *
from time import sleep

brick = nxt.locator.find_one_brick()
left = Motor(brick, PORT_B)
right = Motor(brick, PORT_C)
both = nxt.SynchronizedMotors(left, right, 0)
leftboth = nxt.SynchronizedMotors(left, right, 100)
rightboth = nxt.SynchronizedMotors(right, left, 100)

for n in range(0,4):
 both.run(100)
 sleep(1.25)
 both.idle()
 sleep(0.25)
 leftboth.run(100)
 sleep(0.48)
 leftboth.idle()
 sleep(0.25)

rightboth.run(100)
sleep(4)
rightboth.idle()

A execução do script foi comandada manualmente (essencialmente acedi de modo wireless a partir do meu portátil por SSH e invoquei o script a partir da shell).

Roda livre

Não gostei da roda livre baseada num «pneu», os  movimentos curvos do Rover não me pareciam consistentes.

Tinha encontrado recentemente um artigo de uma roda livre com base numa bola de um conjunto Mindstorms que eu não tenho mas a ideia pareceu-me boa e experimentei primeiro com a bola da minha trackball e depois decidi usar um «abafador» (um berlinde de vidro grande, cerca do dobro do diâmetro de um berlinde normal).

DSC_0183-2 DSC_0185-2A forma como a roda livre está montada no chassis ainda é deficiente (ocorre alguma torção devido ao peso do Rover) mas os movimentos curvos são muito mais fluidos já que o eixo de rotação do Rover passou a ser a bola em vez de uma roda com o seu próprio eixo de rotação.

Entretanto ainda hei-de experimentar outra ideia bastante interessante, usar a bola de um desodorizante roll-on, requer bastante menos peças. O autor (Philippe “Philo”Hurbain) é bastante conhecido no mundo Lego Technic e Mindstorms, com análises tecnicamente muito detalhadas aos motores e baterias da Lego. Também tem no seu site diagramas para montagem de um Rover em Lego que  usa uma bola como roda livre (Spy Camera Rover).

 

Robalo no forno

Além do dito cujo, perfurado e recheado com alho:

  • abóbora da mãe aos cubos
  • cenoura da cunhada em palitos grossos
  • pomodoros do sogro aos sextos
  • manjericão da horta do 6º andar
  • chuchu às fatias
  • cebola às rodelas grossas
  • oregãos, sal fino e azeite q.b.

Forno a 180º, desligar quando as cebolas começarem a tostar ou baixar para 120º se quisermos os vegetais mais macios.

Havendo batatinhas também iam, com casca bem lavada e eventualmente previamente meio cozidas no micro-ondas (conforme o tamanho).

Não havendo grávidas nem lactentes também ia meio copo de vinho branco a meio da assadura para refrescar.

 

 

 

 

O meu próprio servidor – parte 1

This post is part 1 of 4 of  O meu próprio servidor

Tentativas anteriores de ter o meu próprio site acabaram sempre mal – mais cedo ou  mais tarde um palerma pirata qualquer acabava sempre por conseguir tomar conta dele e utilizar o meu domínio para fins no mínimo duvidosos. Ter um site alojado numa empresa deixa-nos dependente da qualidade dos serviços de administração de sistema dessa empresa… e a experiência ensinou-me que mais vale arregaçar as mangas e fazer eu mesmo. Mas infelizmente quando temos um site alojado numa empresa o nosso controlo sobre o servidor em si é nulo, o mais que conseguimos para lá de webadmin é o controlo sobre o file system – nunca sobre o estado dos serviços, as configurações ou as versões.

A solução passava por ter o meu próprio servidor dedicado mas os preços eram exorbitantes por isso durante algum tempo aventurei-me e tive o meu próprio servidor doméstico, ligado à net através da minha ligação ADSL. Para experiências e usos reduzidos servia perfeitamente mas as ligações ADSL na minha zona estão limitadas pela Portugal Telecom a uns míseros 4 Mbps com 512  kbps e acabei por desistir.

Mas agora existem os VPS/VDS que nos permitem utilizar apenas uma fracção de um servidor real como se fosse um servidor completo. A experiência do servidor doméstico mostrara que 200 MHz e 64 MB eram suficientes para um pequeno site por isso optei por um VDS de 256 MB com 5 GB de espaço em disco. O processador é de 3 GHz, tem de ser partilhado pelos restantes VDS mas mesmos que haja 10 servidores em simultâneo a puxar pelo processador dá 300 MHz a cada um – quanto aos outros não sei mas a mim chega-me perfeitamente.

Ah pois, e Linux porque para lidar com as parvoíces do Windows já me basta o dia-a-dia. Escolhi Ubuntu Server porque já estou familiarizado com o Ubuntu como Desktop principal mas Red Hat também seria uma boa escolha (na minha profissão também lido com uns quantos servidores RHEL embora não como webadmin).

E agora que em Portugal finalmente se deu a liberalização nos Domínios, um domínio .pt só para mim.

No próximo artigo explico como configurar o servidor VDS para funcionar como servidor Web.