felipegarcia99 / beagleboneblack-gpio-cpp-api

A C++ library to access BeagleBone Black's GPIO as in Arduino

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

BeagleBone Black GPIO

Uma biblioteca construída para facilitar o acesso à GPIO da BeagleBone Black, desenvolvida em C++.

License Forks Stars

Descrição

Em placas de desenvolvimento microcontroladas, especialmente as voltadas para iniciantes ou para o público maker (como o Arduino), o acesso a GPIO - seja para receber ou emitir sinais - é simplificado por meio de funções tais como: digitalWrite, pinMode, analogRead, entre outras.

No entanto, quanto se passa para ambientes microprocessados (isto é, baseados em um sistema operacional), tal processo fica bem mais complicado, pois é necessário acessar os drivers de dispositivo do sistema.

No caso do Linux, tais drivers se acessam como se acessa um arquivo (com o FILE em C, por exemplo). Ainda assim, é necessário que o desenvolvedor organize grandes blocos de código em funções, para manter o código limpo; gastando tempo.

Por conta disso, resolvi criar uma biblioteca, em C++, que facilita a o acesso à GPIO de uma placa microprocessada, baseada em Linux. Nesse caso, a placa é a BeagleBone Black e a biblioteca foi baseada no padrão do Arduino: procurei adaptar o nome das funções de modo que o desenvolvedor se sinta familiarizado.

Esse projeto também é um desafio pessoal, e um exercício do uso da linguagem C++ em Linux embarcado, visando a manipulação de drivers de dispositivo.

Essa é uma biblioteca simples, como poucas funções. Pretendo, no futuro, adicionar mais funcionalidades, como PWM, SPI, I2C e outros recursos.

Requisitos

Aqui foi usada a versão 06_00_00_07.

  • Sistema de arquivos Arago-base instalado na placa

Pois foi onde os testes foram realizados.

Como usar

Para se certificar sobre quais pinos podem ser usados para quais funções (digitais, analógicos, etc.), consulte a pinagem oficial, logo abaixo.

digital.hpp

//pinMode: habilita o pino e define o seu sentido (entrada/saída) 
pinMode(50, OUTPUT);

//digitalWrite: escreve no pino o sinal requerido (ligado/desligado)
digitalWrite(50, 1);

//unexport_gpio: após o término da aplicação, os drivers dos GPIOs ainda continuam habilitados. Para desligá-los, é necessário desativá-los.
unexport_gpio(50);

analog.hpp

//analogRead: lê um sinal analógico (de 0 a 4096)
int value = analogRead(0);
>> 726

utils.hpp

//delay: função delay do arduino, em segundos (aceita valores decimais também)
delay(1);
delay(0.5);

//defining_sigaction: função específica para lidar com a captura de interrupções (como o Ctrl+C). Necessária para o exemplo a seguir.
defining_sigaction();

Demonstração

Para demonstrar a utilização dessa biblioteca, foi desenvolvido um exemplo, que consiste em um circuito de pisca leds alternados.

O funcionamento da aplicação é o seguinte: separou-se o programa em duas threads, de modo que uma é responsável pelo loop da piscagem dos leds, e a outra é responsável pela captura do sinal de interrupção (SIGINT). Se isso acontecer, um código é executado, desativando a GPIO e encerrando o programa.

Abaixo consta uma porção do código main.cpp (confira-o para mais detalhes).

int main(){
    int led1 = 50;
    int led2 = 51;

    thread t1(main_loop, led1, led2);
    thread t2(sigint_handler, led1, led2);

    t1.join();
    t2.join();

    return 0;
}

O esquemático do circuito é apresentado abaixo:

Funcionamento do circuito:

Console

Para saber mais

Se você quiser saber mais sobre a área de Linux embarcado, confira este trabalho, do mesmo autor, acerca do processo de desenvolvimento de um sistema embarcado baseado em Linux (em português brasileiro).

Licença

MIT

About

A C++ library to access BeagleBone Black's GPIO as in Arduino

License:MIT License


Languages

Language:C++ 90.9%Language:CMake 7.2%Language:Shell 1.9%