Neste artigo veremos como desenvolver um Interactive Kiosk (projeto de Kiosk Interativo) para a BeagleBone Black com o Yocto Project. Se você não conhece o Yocto sugiro que dê uma lida no artigo BeagleBone Black + Yocto escrito pelo Henrique Rossi. Totens, Kiosks e Terminais de Auto-Atendimento, são exemplos de produtos que podem ser desenvolvidos a partir da solução proposta.
Esta solução é composta por dois tipos de atores: o web-kiosk e o kiosk-manager. O web-kiosk é o equipamento que será utilizado pelo usuário final, e sua interface além de possuir uma tela LCD conectada na porta HDMI, pode ter também teclado e mouse ou ser sensível ao toque (touchscreen).
O kiosk-manager irá gerenciar o conteúdo a ser exibido em todos os web-kiosks, porém a sua presença não é obrigatória, já que o web-kiosk pode funcionar como um equipamento stand-alone. Os equipamentos podem estar conectados entre si através de uma LAN ou pela internet.
A figura abaixo ilustra uma possível topologia utilizando esses atores:
Nesta primeira parte vamos montar o ambiente de trabalho e gerar e testar a imagem do web-kiosk.
Montando o Ambiente de construção
Vamos criar os diretórios e baixar os fontes necessários:
mkdir -p ~/yocto/dl cd ~/yocto git clone git://git.yoctoproject.org/poky kiosk-src cd kiosk-src git checkout dora git clone git://git.yoctoproject.org/meta-ti git clone git://git.yoctoproject.org/meta-web-kiosk
Agora vamos configurar o ambiente para gerarmos os artefatos de software:
cd ~/yocto . kiosk-src/oe-init-build-env kiosk-build
Adicione as duas linhas abaixo no arquivo ~/yocto/kiosk-build/conf/bblayers.conf para a variável BBLAYERS:
${TOPDIR}/../kiosk-src/meta-ti \
${TOPDIR}/../kiosk-src/meta-web-kiosk \
Modifique e adicione as seguintes variáveis no arquivo ~/yocto/kiosk-build/conf/local.conf
#MACHINE ??= "qemux86"
MACHINE ?= "beaglebone"
DL_DIR ?= "${TOPDIR}/../dl"
PACKAGE_CLASSES ?= "package_ipk"
IMAGE_INSTALL_append = " kernel-modules"
Note que configuramos nossa machine como sendo a beaglebone (serve tanto para a white como a black), mudamos o diretório de download para podermos reutilizar os fontes baixados em outros projetos, usaremos o gerenciador de pacotes ipk (ele é mais indicado para sistemas embarcados porque não exige muitos recursos para funcionar) e vamos instalar na imagem todos os módulos do kernel gerados.
Se você já fez o tutorial do Henrique, você pode simplesmente atualizar as suas cópias locais dos repositórios (git pull origin <branch_name>), adicionar o repositório da meta-web-kiosk (git clone git://git.yoctoproject.org/meta-web-kiosk) e modificar os arquivos bblayers.conf e local.conf.
Veja que nesse caso, para criarmos a aplicação de Kiosk Interativo foi necessário adicionar apenas a camada meta-web-kiosk, que possui as receitas das aplicações necessárias e as imagens que irão compor a solução. E essa é uma das características mais vantajosas do Yocto. Como ele é organizado em meta-layers, que são camadas usadas para agrupar um determinado conjunto de receitas, elas podem ser integradas com diferentes camadas afim de prover diversas funcionalidades diferentes para o seu projeto. Além disso, as camadas podem ter propósitos específicos, como por exemplo suporte a arquiteturas de hardware, como é o caso da camada meta-ti que contém os BSPs (Board Support Packages) para algumas placas e arquiteturas da Texas Instruments.
Gerando a imagem do web-kiosk
Para gerar a imagem do web-kiosk rode o seguinte comando:
bitbake core-image-web-kiosk
Esta é a configuração de build que eu utilizei:
Build Configuration: BB_VERSION = "1.20.0" BUILD_SYS = "x86_64-linux" NATIVELSBSTRING = "Ubuntu-12.10" TARGET_SYS = "arm-poky-linux-gnueabi" MACHINE = "beaglebone" DISTRO = "poky" DISTRO_VERSION = "1.5" TUNE_FEATURES = "armv7a vfp neon" TARGET_FPU = "vfp-neon" meta meta-yocto meta-yocto-bsp = "dora:75bed4086eb83f1d24c31392f3dd54aa5c3679b1" meta-ti = "master:6f1ab0fe37a4f044b04777ff0efc96b7fe0d100f" meta-web-kiosk = "master:7bf1e5b2cffb58d521353b00a1a3049c520875ed"
Gravando a imagem do web-kiosk
Este procedimento é praticamente o mesmo utilizado no tutorial do Henrique mencionado no começo deste post.
Para a gravação das imagens no microSD card, o mesmo deve ser particionado e formatado de acordo o padrão aceito pelo placa. Para isso foi criado um script, que pode ser obtido com os seguintes comandos:
cd ~/yocto/ git clone https://github.com/henriqueprossi/beaglebone-black.git bbb-sdcard-prepare
Insira um microSD card no computador PC ou notebook (sistema host) e descubra qual o device node criado pelo sistema operacional. Tente um dos seguintes comandos:
dmesg sudo fdisk -l
Caso, por exemplo, o device node criado seja /dev/sdb, use o seguinte comando:
cd bbb-sdcard-prepare cd scripts chmod +x format_sd_card.sh sudo ./format_sd_card.sh /dev/sdb
Assim que o processo de particionamento e formatação terminar, duas partições no microSD card são criadas:
- boot (FAT32);
- rootfs (ext4).
Execute a “montagem” dessas duas partições no sistema de arquivos do sistema host. Caso esse faça uso da distribuição Ubuntu, basta remover e inserir novamente o dispositivo no seu conector. Dado que, por exemplo, os pontos de montagem criados sejam /media/boot e /media/rootfs, as imagens geradas anteriormente são copiadas da seguinte forma paro o web-kiosk:
cd ~/yocto/kiosk-build/tmp/deploy/images/beaglebone cp MLO /media/boot cp u-boot.img /media/boot sudo tar xzf core-image-web-kiosk-beaglebone.tar.gz -C /media/rootfs
Testando a imagem
Remova o microSD do computador e insira-o na BBB, conecte-a a uma TV por um cabo HDMI, a um roteador pelo cabo ethernet e a um teclado e a um mouse através de um hub USB. Se quiser monitorar o processo de boot, você também pode conectar um cabo serial.
Depois de energizar a placa você terá as seguintes imagens na TV:
É possível mudar a página inicial a ser exibida. Para isso conecte na console serial da BBB e digite o comando:
change_midori_url.sh https://embarcados.com.br
E este será o resultado:
Projeto de Kiosk: O que vem por aí
Na segunda parte desta série sobre o projeto de kiosk interativo veremos como gerar a imagem do kiosk-manager e como configurar os atores para que conversem entre si.
Na terceira do projeto de kiosk interativo, veremos como customizar a imagem de acordo com as nossas necessidades.
Saiba mais
Cozinhando com o Yocto Project
Desvendando Yocto Project – Primeiros passos
Beaglebone Black + Yocto Daisy (Versão 1.6)
Lançada Nova Versão 1.7 (dizzy) do Yocto Project
Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 1
Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 2
Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 3
Beaglebone Black + Qt Embedded + Yocto – parte 1
Beaglebone Black + Qt Embedded + Yocto – parte 2
Beaglebone Black + Qt5 + Yocto – parte 1
Beaglebone Black + Qt5 + Yocto – parte 2
Raspberry pi + Qt5 + Yocto – parte 1
Raspberry pi + Qt5 + Yocto – parte 2
Referência
Apresentação que eu origem a esses artigos sobre o projeto de um kiosk interativo: Build Your Own Digital Signage Solution with Yocto Project no ELC 2013 San Francisco, feita por Nitin Kamble.



