Biblioteca de Hardware

Segundo artigo da série Comunicação entre processos, nesse artigo é explicado como resolver as dependências e como instalar a biblioteca para utilizar nos exemplos futuros

Introdução

No artigo anterior foi descrito o que era IPC e quais eram os seus tipos, neste artigo será descrito a implementação e instalação da biblioteca responsável por controlar as aplicações que são baseadas no famoso acionamento de um LED através de um botão, esta biblioteca foi criada através de três dos quatros pilares do paradigma de programação orientação a objetos que é a abstração, encapsulamento e herança. Para execução das aplicações serão feitas na plataforma Raspberry Pi 3 e a compilação da biblioteca tanto das aplicações serão feitas utilizando o CMake.

Raspberry Pi 3 B+

A Raspberry Pi 3 Model B+ Anatel é um mini-PC que roda distribuições Linux como o Raspbian e Ubuntu, mas também suporta outros sistemas operacionais como o Windows 10 IoT e versões customizadas do Linux.

A versão B+ da Raspberry Pi 3 tem processador de 1.4GHz, 1GB de memória e agora suporta redes wireless no padrão AC, proporcionando muito mais velocidade para a sua conexão e melhorando a performance da placa. Essas especificações, aliadas à outras melhorias no conjunto do hardware, fazem com que essa placa tenha uma performance 17% maior em comparação ao modelo anterior.

Especificação

  • Raspberry Pi 3 Model B+ Anatel
  • Processador Broadcom BCM2837B0 64bits ARM Cortex-A53 Quad-Core
  • Clock 1.4 GHz
  • Memória RAM: 1GB
  • Adaptador Wifi 802.11 b/g/n/AC 2.4GHz e 5GHz integrado
  • Bluetooth 4.2 BLE integrado
  • 4 portas USB 2.0
  • Conector Gigabit Ethernet over USB 2.0 (throughput máximo de 300 Mbps)
  • Alimentação: 5V 3A (Recomendado)
  • Interface para câmera (CSI)
  • Interface para display (DSI)
  • Slot para cartão microSD
  • Conector de áudio e vídeo
  • GPIO de 40 pinos
  • Certificado de homologação Anatel: 01598-18-10629
  • Dimensões: 85 x 56 x 17mm
68747470733a2f2f696d616765732d6e612e73736c2d696d616765732d616d617a6f6e2e636f6d2f696d616765732f492f35313153655241696d354c2e5f41435f2e6a7067

CMake

CMake é uma ferramenta open source desenvolvida para compilar, gerar testes e construir pacotes para distribuir as aplicações em forma de .rpm ou .deb

Preparando o ambiente

Para o desenvolvimento dos passos a seguir é necessário ter a Raspberry Pi conectada na internet. Acesse a Raspberry via commando ssh ou se estiver conectada em um monitor abra um terminal, durante o desenvolvimento dos exemplos foi utilizado o acesso via ssh.

Acesse o target:

Exemplo:

Atualize os repositorios e instale o cmake:

Instale o wiringpi

Faça o download do repositorio no link:

Para acessar o repositório clique nesse link

Acesse o diretório Raspberry_lib_hardware para compilar e instalar a biblioteca responsável por controlar o botão e LED dos exemplos:

No diretório raiz crie uma pasta chamada build onde irá ficar os arquivos gerados pelo cmake e execute o comando do cmake gerar os arquivos para a compilação:

Uma vez que os arquivos foram gerados execute o comando make

Irá ser gerado um diretorio bin onde os binarios da aplicação são salvos e um diretório lib onde as bibliotecas ficam salvas.

Agora instale a lib gerada.

Rode o ldconfig para atualizar os links de biblioteca do sistema

Com o setup concluído, será apresentado a implementação da lib hardware.

Implementação da biblioteca de hardware

Headers

Para a implementação da lib hardware foi utilizado a API wiringPi que provê uma abstração do hardware da Raspberry Pi, dessa forma facilitando o desenvolvimento. Para saber mais sobre a API acesse wiringpi

gpio.h

Essa enumeração representa o modo em qual o gpio vai ser utilizado com dois estados possíveis: entrada ou saída.

Essa enumeração representa o estado do GPIO.

Estrutura GPIO_t contém os atributos pin que recebe o número do GPIO a ser configurado e eMode que representa em qual modo ele vai ser utilizado.

Função de inicialização do GPIO.

led.h

Definição da estrutura de LED onde o unico atributo é a estrutura do GPIO, colocando o tipo GPIO como primeiro atributo da estrutura LED garante que em memória o tipo LED_t e GPIO_t tenham o mesmo endereço de memória assim utilizando o cast para GPIO_t é possível acessar os atributos de GPIO, isso será demonstrado na implementação em sources, mas isso caracteriza a herança do paradigma de programação orientado a objetos.

Função de Inicialização do LED

Função responsável por alterar o estado do LED conforme seu parâmetro eState.

button.h

Definição de um Tipo para ponteiro de função onde seu retorno é void e sem parâmetros de entrada, esse tipo serve para poder configurar o callback caso o botão seja configurado para poder gerar interrupções.

Definição de uma enumeração que representa como o pull será configurado, se for com resistor externo deve-se configurar como desligado.

Definição de uma enumeração que representa em qual borda vai ser invocada a função de callback.

Definição Button_t e especializando para seu uso

Função de inicialização do botão.

Retorna o estado do botão

Sources

Nesta seção é possível entender como foi feita a implementação e o conceito de herança utilizado.

gpio.c

Aqui podemos ver a implementação de GPIO_t sem muita complexidade, é possível ver a inicialização da API que quando chamada nesse formato mapeia os pinos para o modo schema onde são numerados de 0 à 16.

led.c

Aqui pode-se ver como é passado o parametro para GPIO_init, fazendo casting para o tipo (GPIO_t *) a estrutura LED passa a ser GPIO devido ter as mesma referências em memória.

Aqui pode-se ver como é passado o parâmetro para GPIO_init, fazendo casting para o tipo (GPIO_t *) a estrutura LED passa a ser GPIO devido ter as mesma referências em memória.

button.c

Aqui acontece o mesmo que em led.c, essa é uma forma de se obter a herança em C.

Implementação de leitura do botão

Testando a instalação e as conexões de hardware

A conexão dos componentes é bem simples demonstrado na figura a seguir:

RaspberryConnection bb

Montagem do LED é do Botão no Fritzing.

RaspberryConnection schem

Esquemático do LED e do Botão no Fritzing.

Uma vez montado o circuito agora é só testar para ver se está tudo funcionamento conforme o esperado, para isso acesse a pasta bin/tests:

Execute a aplicação test_test, e assim que pressionar o botão o LED deve mudar de estado.

Conclusão

Neste artigo foi apresentado como se configura o ambiente, verificação de como o código fonte foi implementado de uma forma simples mas sofisticada, para não dizer cheio de flores, e também como conectar os componentes aos gpio’s do Raspberry Pi 3 B+, e por fim como testar para verificar se a configuração foi executada corretamente. No próximo artigo abordaremos os mecanismos para criação de processos.

Para acessar a biblioteca completa clique aqui

Referências

Outros artigos da série

<< Comunicação entre processosfork, exec, e daemon >>

Engenheiro Elétrico de Formação mas é Engenheiro de Software de profissão, Pós Graduado em Sistemas Embarcados. Apaixonado por Idiomas, mas o idioma que mais lhe fascina é a Linguagem C.
Jogador de CTF, mas prefire Battlefield 1, exige menos da capacidade cognitiva :P. Atualmente atua como desenvolvedor de sistemas distribuídos no ramo aeronáutico. Quando está de bobeira fica desenhando personagens de Anime, criando conteúdo para o canal[Solidcris - Zerando Games] ou pedalando pela cidade de São Paulo.

Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments

WEBINAR

Visão Computacional para a redução de erros em processos manuais

DATA: 23/09 ÀS 17:00 H