Programação em Linguagem C com Raspberry Pi 2

A linguagem C foi criada nos anos de 1970 e embora um pouco antiga, ainda é amplamente usada nos dias de hoje. É considerada uma das linguagens de uso geral mais populares. O público que utiliza essa linguagem varia desde entusiastas e hobbystas construindo projetos em casa até profissionais da indústria que ganham seu pão de cada dia programando em C.

Podemos encontrar a linguagem C em diversos lugares. Pequenos dispositivos como relógios digitais e cafeteiras como também grandes sistemas de software sendo executados em máquinas industriais, são apenas alguns exemplos do uso desta poderosa linguagem. Se você já usou Linux deve saber que grande parte do sistema foi e é escrito em linguagem C. Até mesmo parte do sistema da Raspberry Pi, o Raspbian, é escrito em C.

Neste tutorial iremos apresentar como configurar a Raspberry Pi para desenvolvimento em linguagem C mostrando alguns exemplos básicos como piscar um LED e ler botões.

Controle de LED com Push Button

Materiais necessários

Para realizar os exemplos deste tutorial você irá precisar dos seguintes materiais:

É necessário instalar a imagem Raspbian com Desktop no cartão micro SD. Para gravar imagem no cartão recomendamos o software Etcher pois é bem fácil de usar.

Circuito Eletrônico

O circuito utilizado para este tutorial é bem simples e de fácil montagem. Monte conforme a figura a seguir:

Circuito exemplo

IDE Geany para desenvolvimento em linguagem C

Os programas chamados IDE (Integrated Development Environment) nos permitem desenvolver aplicações, executá-las, achar possíveis erros no código, além de outras facilidades no decorrer do desenvolvimento da aplicação.

Existem IDEs que suportam diversos tipos de linguagem. Para este tutorial usaremos a IDE Geany que já vem inclusa na imagem Desktop da Raspberry Pi. No Geany iremos escrever, compilar e executar nossas aplicações em linguagem C.

A IDE Geany se encontra na seção Programming no menu iniciar.

Geany Linguagem C

No editor de código insira o seguinte programa “Hello World”:

Salve o programa em alguma pasta do sistema com algum nome terminado em “.c” como hello_world.c. Para isso clique em File -> Save, digite o nome do arquivo terminado em “.c”, escolha a pasta e clique em Save.

Para executar a aplicação selecione o menu Build -> Build e depois Build -> Execute ou pressione F9 e então F5. Um terminal deverá abrir com a mensagem “Hello World!”.

Execução programa Hello World

Você pode verificar que foi gerado um arquivo binário de nome hello_world na mesma pasta onde o programa foi salvo. Abrindo um terminal é possível executar o programa utilizando o seguinte comando:

E veremos a mensagem “Hello World!” no terminal.

Execução programa Hello World

Pronto! Agora você já sabe como desenvolver aplicações em linguagem C na Raspberry Pi.

Biblioteca WiringPi

Para quem já programou Arduino vai achar bem fácil a biblioteca WiringPi. Ela foi desenvolvida para facilitar o acesso e controle dos pinos GPIO da Raspberry Pi. É uma biblioteca feita para uso em programas de linguagem C ou C++. Assim como a IDE Geany, a biblioteca WiringPi já vem instalada no sistema bastando apenas incluir a biblioteca em seu programa com a linha “#include <wiringPi.h>“. Caso a biblioteca não esteja instalada por padrão, seguir os passos de instalação encontrados aqui.

WiringPi também vem com um programa de linha de comando chamado gpio que também pode ser utilizado para pequenos testes. Executando o comando “gpio readall” podemos ver uma tabela com a organização dos pinos. Veja a seguir:

Tabela Pinagem WiringPi

A coluna marcada em azul indica a numeração que será usada nas funções da biblioteca. As colunas em amarelo indicam se o pino está configurado como entrada ou saída. A coluna central em verde mostra a numeração dos pinos físicos da Raspberry Pi.

As funções principais da biblioteca são as seguintes:

void pinMode (int pin, int mode)

Configura um GPIO como entrada, saída ou saída PWM. “int mode” pode ter os valores INPUT, OUTPUT ou PWM_OUTPUT.

void pullUpDnControl (int pin, int pud)

Configura os resistores internos de pull-up ou pull-down. “int pud” pode ter os valores PUD_OFF (sem resistor interno), PUD_UP(resistor pull-up 3,3V) e PUD_DOWN(resistor pull-down GND).

void digitalWrite (int pin, int value)

Escreve valores HIGH ou LOW (1 ou 0) em um determinado pino configurado anteriormente como saída.

void pwmWrite (int pin, int value)

Escreve um valor de PWM(0-1024) em um determinado pino.

int digitalRead (int pin)

Retorna o valor lido em um determinado pino podendo ser HIGH ou LOW (1 ou 0).

Três Exemplos com a Biblioteca WiringPi

Mostraremos 3 exemplos básicos em linguagem C utilizando a biblioteca WiringPi. O primeiro é o Hello World da eletrônica, um pisca LED. No segundo exemplo utilizaremos uma chave push button para acender e apagar o LED. No terceiro exemplo utilizaremos PWM para controlar o LED.

Importante! Para que os programas compilem e executem corretamente é necessário indicar ao Geany que utilizaremos a biblioteca WiringPi e executaremos a aplicação como sudo. Para isso clique no menu Build -> Set Build Commands e nos campos Compile, Build e Execute adicione “-l wiringPi” e “sudo” como na figura abaixo. Caso execute os binários pela linha de comando, lembrar de utilizar “sudo ./nomePrograma“.

Configuração comandos de build

Exemplo 1 – Pisca LED

Neste exemplo faremos um LED piscar de 1 em 1 segundo. Crie um novo programa no Geany com o nome “pisca_led.c” e copie o seguinte código fonte:

Importante! O pino 1 se refere ao pino da biblioteca que na verdade é o pino físico 12 da barra de pinos da Raspberry.

Salve o arquivo e aperte F9(Build) e depois F5(Execute) para executar o programa. Você verá o LED piscando como a seguir.

Exemplo 1 - Pisca LED

Exemplo 2 – Controle do LED com chave Push Button

Neste exemplo iremos ligar e desligar o LED pela chave push button.

Exemplo 2 - LED Push Button

Exemplo 3 – Controlando LED por PWM

Neste exemplo iremos acender e apagar o LED utilizando PWM.

Exemplo 3 - LED PWM

O código fonte e o binário pré-compilado dos três exemplos podem ser encontrados no GitHub da FILIPEFLOP.

Neste post você aprendeu os primeiros passos para programar em linguagem C usando a Raspberry Pi. Com os conceitos aqui apresentados e utilizando a biblioteca WiringPi é possível controlar motores, ler sensores e muito mais! Para você que quer se aprofundar na linguagem C, veja o post Raspberry Pi e ThingSpeak onde Pedro Bertoleti apresenta um programa desenvolvido em C que envia valores para a nuvem sendo mostrados em um gráfico na plataforma ThingSpeak. Acesse também a revista MagPi ensinando muito mais sobre linguagem C.

Gostou de programar em linguagem C? Ajude-nos a melhorar o blog comentando abaixo sobre este tutorial. Não se esqueça de visitar nossa loja FILIPEFLOP!

Posts Relacionados

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

2 Comentários

  1. Parabéns pelo tutorial! muito bom mesmo! Dúvida :Configura os resistores internos de pull-up ou pull-down. Tem pinos específicos para rodar em pull-up ou qualquer pino pode usar?

    Outra dúvida, é add bibliotecas como ultrassonic, dht, entre outros , igual na ide do arduino?

    Valeu, obrigado!

    1. mm

      Olá Pedro!
      Obrigado pela leitura!

      Todos os GPIOs tem resistores internos que você pode ativar/desativar via software. Mas seria legal dar uma olhada no datasheet do processador.

      As bibliotecas do Arduino não irão servir diretamente, mas o princípio de funcionamento é o mesmo. Você talvez precisaria entender como uma biblioteca Arduino funciona por debaixo dos panos e implementar o princípio na Raspberry Pi.

      Mas provavelmente você encontra pela internet várias bibliotecas prontas.
      Esse tutorial por exemplo, usou uma biblioteca lcd.h
      http://www.circuitbasics.com/raspberry-pi-lcd-set-up-and-programming-in-c-with-wiringpi

      Esse outro implementou a leitura do sensor DHT11 diretamente, usando apenas a biblioteca WiringPi
      http://www.circuitbasics.com/how-to-set-up-the-dht11-humidity-sensor-on-the-raspberry-pi/

      Um outro exemplo, embora não seja de lingaugem C, é a biblioteca em Python para o sensor DHT11
      https://github.com/adafruit/Adafruit_Python_DHT

      Com WiringPi você também consegue utilizar protocolos I2C e SPI.

      Giovanni Bauermeister