Vous êtes sur la page 1sur 14

17/09/2017 Programao em Linguagem C com Raspberry Pi - FilipeFlop

Incio Raspberry Pi Programao em Linguagem C com Raspberry Pi

Programao em Linguagem C com Raspberry


Pi
Raspberry Pi
12 de setembro de 2017
Giovanni Bauermeister

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 pblico que utiliza
essa linguagem varia desde entusiastas e hobbystas construindo projetos em casa at pro ssionais da
indstria que ganham seu po de cada dia programando em C.

Podemos encontrar a linguagem C em diversos lugares. Pequenos dispositivos como relgios digitais e
cafeteiras como tambm grandes sistemas de software sendo executados em mquinas industriais, so
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.

https://www.lipeop.com/blog/linguagem-c-com-raspberry-pi/ 1/14
17/09/2017 Programao em Linguagem C com Raspberry Pi - FilipeFlop

Neste tutorial iremos apresentar como con gurar a Raspberry Pi para desenvolvimento em linguagem C
mostrando alguns exemplos bsicos como piscar um LED e ler botes.

Materiais necessrios
Para realizar os exemplos deste tutorial voc ir precisar dos seguintes materiais:

Placa Raspberry Pi (qualquer modelo)


Fonte 5V 3A para Raspberry Pi
LED
Resistores de 330, 470 ou 510
Chave push button
Jumpers macho fmea
Protoboard
Carto micro SD

necessrio instalar a imagem Raspbian com Desktop no carto micro SD. Para gravar imagem no
carto recomendamos o software Etcher pois bem fcil de usar.

Circuito Eletrnico
O circuito utilizado para este tutorial bem simples e de fcil montagem. Monte conforme a gura a
seguir:

https://www.lipeop.com/blog/linguagem-c-com-raspberry-pi/ 2/14
17/09/2017 Programao em Linguagem C com Raspberry Pi - FilipeFlop

IDE Geany para desenvolvimento em linguagem C


Os programas chamados IDE (Integrated Development Environment) nos permitem desenvolver
aplicaes, execut-las, achar possveis erros no cdigo, alm de outras facilidades no decorrer do
desenvolvimento da aplicao.

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 aplicaes em linguagem C.

A IDE Geany se encontra na seo Programming no menu iniciar.

https://www.lipeop.com/blog/linguagem-c-com-raspberry-pi/ 3/14
17/09/2017 Programao em Linguagem C com Raspberry Pi - FilipeFlop

No editor de cdigo insira o seguinte programa Hello World:

Hello World C
1 #include <stdio.h>
2
3 int main()
4 {
5 printf("Hello World!\n");
6 return 0;
7 }

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 aplicao selecione o menu Build -> Build e depois Build -> Execute ou pressione F9 e
ento F5. Um terminal dever abrir com a mensagem Hello World!.

https://www.lipeop.com/blog/linguagem-c-com-raspberry-pi/ 4/14
17/09/2017 Programao em Linguagem C com Raspberry Pi - FilipeFlop

Voc pode veri car que foi gerado um arquivo binrio de nome hello_world na mesma pasta onde o
programa foi salvo. Abrindo um terminal possvel executar o programa utilizando o seguinte
comando:

Executar Programa Shell


1 ./hello_world

E veremos a mensagem Hello World! no terminal.

Pronto! Agora voc j sabe como desenvolver aplicaes em linguagem C na Raspberry Pi.

Biblioteca WiringPi
Para quem j programou Arduino vai achar bem fcil 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

https://www.lipeop.com/blog/linguagem-c-com-raspberry-pi/ 5/14
17/09/2017 Programao em Linguagem C com Raspberry Pi - FilipeFlop

sistema bastando apenas incluir a biblioteca em seu programa com a linha #include <wiringPi.h>.
Caso a biblioteca no esteja instalada por padro, seguir os passos de instalao encontrados aqui.

WiringPi tambm vem com um programa de linha de comando chamado gpio que tambm pode ser
utilizado para pequenos testes. Executando o comando gpio readall podemos ver uma tabela com a
organizao dos pinos. Veja a seguir:

A coluna marcada em azul indica a numerao que ser usada nas funes da biblioteca. As colunas
em amarelo indicam se o pino est con gurado como entrada ou sada. A coluna central em verde
mostra a numerao dos pinos fsicos da Raspberry Pi.

As funes principais da biblioteca so as seguintes:

void pinMode (int pin, int mode)

Con gura um GPIO como entrada, sada ou sada PWM. int mode pode ter os valores INPUT, OUTPUT
ou PWM_OUTPUT.

void pullUpDnControl (int pin, int pud)

https://www.lipeop.com/blog/linguagem-c-com-raspberry-pi/ 6/14
17/09/2017 Programao em Linguagem C com Raspberry Pi - FilipeFlop

Con gura 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 con gurado anteriormente como sada.

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).

Trs Exemplos com a Biblioteca WiringPi


Mostraremos 3 exemplos bsicos em linguagem C utilizando a biblioteca WiringPi. O primeiro o Hello
World da eletrnica, 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 necessrio indicar ao Geany
que utilizaremos a biblioteca WiringPi e executaremos a aplicao 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 gura abaixo. Caso execute os binrios pela linha de comando, lembrar de utilizar
sudo ./nomePrograma.

https://www.lipeop.com/blog/linguagem-c-com-raspberry-pi/ 7/14
17/09/2017 Programao em Linguagem C com Raspberry Pi - FilipeFlop

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 cdigo fonte:

Exemplo 1 - Pisca LED C


1 #include <stdio.h>
2 #include <wiringPi.h>
3
4 int main()
5 {
6 wiringPiSetup();// inicia a biblioteca WiringPi
7 pinMode(1, OUTPUT); // configura o pino 1 como sada
8
9 printf("Exemplo 1 - Pisca LED\n"); //imprime mensagem na tela
10
11 while(1)
12 {
13 digitalWrite(1, HIGH); // liga o pino 1
14 delay(1000); // espera 1 segundo
15 digitalWrite(1, LOW);// desliga o pino 1
16 delay(1000); //espera 1 segundo
17 }
18 return 0;
19 }

https://www.lipeop.com/blog/linguagem-c-com-raspberry-pi/ 8/14
17/09/2017 Programao em Linguagem C com Raspberry Pi - FilipeFlop

Importante! O pino 1 se refere ao pino da biblioteca que na verdade o pino fsico 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 2 Controle do LED com chave Push Button


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

Exemplo 2 - Controle do LED com chave push button C

https://www.lipeop.com/blog/linguagem-c-com-raspberry-pi/ 9/14
17/09/2017 Programao em Linguagem C com Raspberry Pi - FilipeFlop
1 #include <stdio.h>
2 #include <wiringPi.h>
3
4 int main()
5 {
6 wiringPiSetup();// inicia biblioteca wiringPi
7 pinMode(1, OUTPUT); // configura pino 1 como saida
8 pinMode(7, INPUT);// configura pino 7 como entrada
9 pullUpDnControl(7, PUD_UP); // configura resistor pull-up no pino 7
10
11 int estadoLED = 0;
12
13 printf("Exemplo 2 - Controle do LED com chave push button\n"); //imprime mensagem na tela
14
15 while(1)
16 {
17 if(digitalRead(7) == LOW)// detecta se a chave foi pressionada
18 {
19 estadoLED = !estadoLED;// inverte o estado do LED
20 digitalWrite(1, estadoLED);// controla o LED conforme estado
21 if(estadoLED == 1) printf("LED aceso\n");// imprime estado do LED
22 if(estadoLED == 0) printf("LED apagado\n");// imprime estado do LED
23 delay(20);
24 while(digitalRead(7) == LOW); // aguarda enquato chave ainda esta pressionada
25 delay(20);
26 }
27 }
28 return 0;
29 }

Exemplo 3 Controlando LED por PWM


Neste exemplo iremos acender e apagar o LED utilizando PWM.

Exemplo 3 - Controlando LED por PWM C

https://www.lipeop.com/blog/linguagem-c-com-raspberry-pi/ 10/14
17/09/2017 Programao em Linguagem C com Raspberry Pi - FilipeFlop

1 #include <stdio.h>
2 #include <wiringPi.h>
3
4 int main()
5 {
6 wiringPiSetup();// inicia a biblioteca WiringPi
7 pinMode(1, PWM_OUTPUT); // configura o pino 1 como sada PWM
8
9 int i; // declara varivel para o loop for
10
11 printf("Exemplo 3 - Controlando LED por PWM\n"); //imprime mensagem na tela
12
13 while(1)
14 {
15 for(i=0;i<=1024;i+=4)// faz um loop mudando valor de i de 0 a 1024 com um passo de 4
16 {
17 pwmWrite(1, i); // escreve 0-1024 a cada iterao
18 delay(3);
19 }
20 for(i=1024;i>=0;i-=4) // faz um loop mudando valor de i de 1024 a 0 com um passo de 4
21 {
22 pwmWrite(1, i); // escreve 1024-0 a cada iterao
23 delay(3);
24 }
25 }
26 return 0;
27 }

O cdigo fonte e o binrio pr-compilado dos trs exemplos podem ser encontrados no GitHub da
FILIPEFLOP.

post
Neste
rvoc
Pesquisar
m n 0 0
aprendeu os primeiros passos para programar em linguagem C usando a Raspberry Pi.
produtos

Com os conceitos aqui apresentados e utilizando a biblioteca WiringPi possvel 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 co na plataforma ThingSpeak. Acesse tambm a revista MagPi
ensinando muito mais sobre linguagem C.

https://www.lipeop.com/blog/linguagem-c-com-raspberry-pi/ 11/14
17/09/2017 Programao em Linguagem C com Raspberry Pi - FilipeFlop

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

Posts Relacionados

Top 5 Projetos com Controle de acesso Contador de Chegou a Raspberry


Raspberry Pi RFID com Raspberry seguidores do Pi Zero W com
Pi Instagram com wireless e bluetooth!
Raspberry

Giovanni Bauermeister

Engenheiro de Automao e Controle graduado pela UNISAL e tambm Tcnico em Mecatrnica


pelo SENAI, onde teve os primeiros contatos com microcontroladores, eletrnica e programao.
Integrante do Depto. tcnico da FILIPEFLOP.

Projeto de PCB para Planta IoT Parte 3 Central de jogos RetroPie com Raspberry Pi

Deixe uma resposta

Conectar com:

https://www.lipeop.com/blog/linguagem-c-com-raspberry-pi/ 12/14
17/09/2017 Programao em Linguagem C com Raspberry Pi - FilipeFlop

O seu endereo de e-mail no ser publicado. Campos obrigatrios so marcados com *

Comentrio

Nome * E-mail *

Site

Publicar comentrio

2 Comentrios

Parabns pelo tutorial! muito bom mesmo! Dvida :Con gura os resistores internos de pull-up ou pull-
down. Tem pinos espec cos para rodar em pull-up ou qualquer pino pode usar?

Outra dvida, add bibliotecas como ultrassonic, dht, entre outros , igual na ide do arduino?

Valeu, obrigado!

Pedro Gonalves 12 de setembro de 2017 Responder

https://www.lipeop.com/blog/linguagem-c-com-raspberry-pi/ 13/14
17/09/2017 Programao em Linguagem C com Raspberry Pi - FilipeFlop

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 no iro servir diretamente, mas o princpio de funcionamento o


mesmo. Voc talvez precisaria entender como uma biblioteca Arduino funciona por debaixo dos
panos e implementar o princpio na Raspberry Pi.

Mas provavelmente voc encontra pela internet vrias 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 no seja de lingaugem C, a biblioteca em Python para o sensor


DHT11
https://github.com/adafruit/Adafruit_Python_DHT

Com WiringPi voc tambm consegue utilizar protocolos I2C e SPI.

Giovanni Bauermeister 12 de setembro de 2017 Responder

Pesquisar Posts no BLOG

Pesquisar

Categorias

https://www.lipeop.com/blog/linguagem-c-com-raspberry-pi/ 14/14