Manual
do
Maker
.
com
É, essa semana resolvi abrir o baú dos tesouros que ainda nunca havia utilizado e saiu além do UNO32, essa Carambola, da 8devices - já não mais entre nós.
Essa plaquinha diminuta tem 35mm X 45mm e um custo relativamente baixo pelo que faz. É um hardware que usa WRT portanto, trabalha com o open-source, rodando Linux em seu interior. A placa foi criada com o propósito de entrar na internet das coisas há alguns anos já pelo tempo que foi criada, é impressionante vê-la hoje, com recursos realmente agradáveis. Tudo que envolve a board está disponível para download e o SDK dá total acesso a todos os recursos que ela oferece. Opcionalmente, você pode ter também a board de desenvolvimento, que lhe dará a flexibilidade inicial necessária para desenvolver seus projetos.
A tabela mostra exatamente as características desse hardware. Não dá pra comparar com ARM, tratando-se de uma arquitetura MIPS, portanto não considere pouco 8MB de flash e 32MB de RAM e 350MHz. Esse processador opera com a tensão de 3.3v e wireless com banda b,n,g.
Essa board possui 2 interfaces fast ethernet nativas, 1 barramento SPI, 2 interface serial RS232, 1 USB e alguns LEDs integrados. A antena é onboard. Por fim, a parte que a todos mais interessa - um barramento de pinos para acesso I²C,SPI,GPIO,I²S e portas serial e um outro barramento de pinos para acesso à serial DB9.
A board de desenvolvimento tem um slot para colocar a MIPS Carambola e oferece conexão para os recursos disponíveis na placa como porta serial, USB e as duas portas LAN. Uma das portas LAN tem PoE (Power over Ethernet) 9v-24v. A board tem também uma área de prototipagem e conector jack para alimentação entre 9v e 24v.
Preparando o SDK
E agora a parte legal! Essa board utiliza Linux, compilado pelo SDK OpenWRT (link). O projeto com as implementações da MIPS Carambola são mantidas aqui no GitHub. Para geração do firmware, alguns pacotes serão necessários devido ao cross-compiling. Adianto que você não é obrigado a fazer a compilação, tem firmware pronto, mas de qualquer modo, você pode incluir suas próprias características no sistema e essa board não tem entrada pra cartão, é tudo no firmware mesmo.
Se quer compilar seu próprio firmware mas não tem a menor noção do caminho das pedras, recomendo alguns posts que escrevi sobre o assunto:
Introdução a sistemas embarcados
Toolchains
Boot mínimo
desmonte de imagens de sistema
Remontando o rootfs a partir de binários
Apresentação do Wayland rodando sobre meu sistema de 64MB pra x86
Emulação de ARM para compilação nativa
Trocando o sistema operacional do roteador wireless
Sigamos agora? Baixe então o pacote no git supracitado e instale os seguintes pacotes (para distribuições que utilizam apt):
sudo apt-get install zlib1g-dev bzip2 gcc g++ binutils patch bzip2 flex make gettext pkg-config unzip subversion git libncurses5-dev
Talvez alguma dependência mais seja necessária em seu sistema, mas não se preocupe. Se estiver faltando algo, você saberá. Instaladas as dependências, descomprima o pacote baixado no github e entre no diretório gerado para digitar mais alguns comandos:
./scripts/feeds update
./scripts/feeds install
#configure a gosto:
make menuconfig
O SDK baixado do git já tem o .config devidamente configurado para a board MIPS Carambola, não sendo necessário nenhum ajuste. Eu adicionei algumas coisas relacionadas ao Netfilter e à manipulação dos LEDs via GPIO, mas não lhe fará falta, se desejar, não modifique nada.
make V=s
Se gosta de café, vá ao mercado a pé. Escolha um bom café, coador, ajude a senhorinha pegar o pacote de farinha na prateleira de baixo, bata um papo com o caixa do mercado, volte pra casa e prepare pelo menos 1/2 litro de café, mas deixe compilando antes de sair de casa.
A URL do hotplug2 mudou, então edite o arquivo packages/hotplug2/Makefile e faça as seguintes alterações:
#PKG_REV:=201
PKG_REV:=4
#PKG_SOURCE_URL:=http://svn.nomi.cz/svn/isteve/hotplug2
PKG_SOURCE_URL:=http://hotplug2.googlecode.com/svn/trunk
O processo baixará todos os fontes, construirá o toolchain para cross-compiling, kernel e aplicações escolhidas. Se você optou por compilar o SDK, tenha em mente que esse procedimento varia de máquina pra máquina, sistema pra sistema, instalação pra instalação. No meu caso, tive alguns erros na compilação (que não convém entrar em detalhes) e resolvi desmarcando as partes relacionadas ao erro, uma vez que não tenho interesse nessa parte do sistema. Mas pode acontecer de dar erro em partes importantes e ai mon ami, como diria a "Sandy Jr.", vai ter que rebolar.
Quando o processo estiver finalizado, a imagem estará disponível no diretório carambola-master/bin/ramips com o nome openwrt-ramips-rt305x-carambola-squashfs-sysupgrade.bin. O nome indica o SDK, arquitetura, modelo, board, filesystem da imagem e sysupgrade indica que essa é a imagem de update do sistema. Todas as partes que compõe o sistema ficam disponíveis nesse diretório.
No video mostro onde fazer o upload, mas eu não quis fazer porque ainda preciso entender como funciona o sistema que vem na board para o caso de a minha compilação ter algum problema, saberei de que se trata.
Particularmente eu não acho que tenha sido uma boa ideia colocar uma porta DB9 nessa board de desenvolvimento porque é feia demais e não me lembro de ter visto notebooks novos saindo com essa porta. De qualquer modo, a conexão pode ser feita por TTL removendo os jumpers J9 (RX input) e J10 (TX output), então conectando um FTDI à 3.3v. Farei desse modo, mas quero aproveitar pra um lembrete - não se esqueça de conectar o terra também para não ter flutuação. Na primeira conexão a tela exibida é essa com uma bela receita de bebida alcoólica:
Utilizei o GTKTerm, mas poderia ser qualquer um para Linux ou Windows. A conexão é 115200-8-N-1; apenas ajuste a velocidade, os outros parâmetros já estão no padrão. No video mostro um pouco dos recursos disponíveis pela interface web, inclusive o lugar onde você faz o upload da imagem.
A configuração de rede foi basicamente a mudança do IP da interface br-lan, default gateway e nameserver. No meu ultrabook configurei algumas regras de firewall para que a Carambola pudesse se conectar à interface pela interface LAN, cuja interface utilizei para interconexão com a board. Se quiser as regras de firewall para servir de gateway nessa ou em outras implementações, veja nesse post.
Se você já utilizou GPIO no RPi, não deve sentir estranheza ao utilizar os GPIO na Carambola, mas veja que flexibilidade; você pode utilizar o aplicativo gpioctl, ou controlar diretamente através de /sys. Realmente prefiro utilizar via /sys porque facilita criar scripts shell e em um minutinho ter GPIO manipulável. Para testar o GPIO, obviamente vou fazer o tradicional 'hello world' da eletrônica, que é acender um LED. Utilizei um LED de 3mm verde, aplicando uma tensão de 2v@15mA no GPIO7. No video você pode ver isso funcionando. É mais ou menos assim:
#pra digitar pouco, va ao diretorio relacionado ao GPIO
cd /sys/class/gpio
echo 7 > export
Isso cria um diretório virtual "gpio7" em /sys/class/gpio. Dentro desse diretório virtual se encontram 2 controladores - direction e value. Vamos colocar o GPIO7 em OUTPUT e aterramos o LED nesse pino. O LED será alimentado em 3.3v e utilizando um resistor de 100ohms. Quando o estado é colocado em LOW, o LED acende e opostamente quando colocado em HIGH.
Se você colocar como INPUT, não será possível escrever em value, ele passará a ser leitura.
echo out > direction
echo 1 > value
Agora para acender o LED, basta mudar o estado em LOW:
echo 0 > value
Há interrupção também para ser utilizada, como se pode perceber ao listar os arquivos do diretório de GPIO.
Essa board é um produto realmente interessante devido aos recursos disponiveis que fazem dela um substituto perfeito para seu roteador wireless. Ela tem uma porta RJ45 WAN, 1 porta RJ45 LAN e WiFi. Sua interface web oferece recursos realmente poderosos e mais implementações podem ser feitas pois o SDK está disponível publicamente. Por fim, a board tem uma série de pinos de I/O, portanto é fácil colocar sua casa na nuvem sem mais dispositivos fazendo conexões de rede, mas se necessário, aí está seu novo roteador wireless para servir de concentrador dos dispositivos da sua casa. Ele possui client MQTT, mas não vi bem a respeito de transformá-lo em um broker. Quando tiver mais experiências com ela, volto a escrever novos tutoriais. Para finalizar, um tour pela interface e a manipulação do GPIO pela TTL. Espero que tenha lhe agradado!
Inscreva-se no nosso canal Manual do Maker Brasil no YouTube.
Próximo post a caminho!
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.