17/ 09/ 2017
Programação em Linguagem C com R aspberry Pi - FilipeF lop
Início
Raspberry Pi
Programação Pro gramação em Linguagem C com Raspberry Pi
Programação em Linguagem Linguagem C com com Raspberry Pi Raspberr Rasp berryy Pi Pi
12 de de setembro setembro de 2017
Giovanni Bauermeister
A linguagem linguagem C foi criada nos anos de 1970 e embora um pouco antiga, ainda é amplamente usada nos dias de de hoje. É considerada uma uma das linguagens de uso geral mais populares. populares. O público que utiliza utiliz a essa linguagem varia desde entusiastas e hobbystas construindo projetos em casa até prossionais 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.
https: / / w w w. filipeflop. com/ blog/ linguagem-c-com -raspberry-pi/
1/14
17/09/2017
Programação em Linguagem C com Raspberry Pi - FilipeFlop
Neste tutorial iremos apresentar como congurar a Raspberry Pi para desenvolvimento em linguagem C mostrando alguns exemplos básicos como piscar um LED e ler botões.
Materiais necessários 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 fêmea Protoboard Cartão micro SD É 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 gura a seguir:
https://www.filipeflop.com/blog/linguagem-c-com-raspberry-pi/
2/14
17/09/2017
Programação em Linguagem C com Raspberry Pi - FilipeFlop
IDE Geany para desenvolvimento em linguagem C Os programas chamados IDE (Integrated Development Environment) nos permitem des envolver 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.
https://www.filipeflop.com/blog/linguagem-c-com-raspberry-pi/
3/14
17/09/2017
Programação em Linguagem C com Raspberry Pi - FilipeFlop
No editor de código insira o seguinte programa “Hello World”: Hello World 1 #include 2 3 main() 4 { 5 ("Hello World!\n"); 6 0; 7 }
C
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!”.
https://www.filipeflop.com/blog/linguagem-c-com-raspberry-pi/
4/14
17/09/2017
Programação em Linguagem C com Raspberry Pi - FilipeFlop
Você pode vericar 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: Executar Programa 1 ./hello_world
Shell
E veremos a mensagem “Hello World!” no terminal.
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 https://www.filipeflop.com/blog/linguagem-c-com-raspberry-pi/
5/14
17/09/2017
Programação em Linguagem C com Raspberry Pi - FilipeFlop
sistema bastando apenas incluir a biblioteca em seu programa com a linha “ #include “. 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:
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á congurado 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)
Congura 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)
https://www.filipeflop.com/blog/linguagem-c-com-raspberry-pi/
6/14
17/09/2017
Programação em Linguagem C com Raspberry Pi - FilipeFlop
Congura 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 congurado 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 gura abaixo. Caso execute os binários pela linha de comando, lembrar de utilizar “sudo ./nomePrograma“.
https://www.filipeflop.com/blog/linguagem-c-com-raspberry-pi/
7/14
17/09/2017
Programação 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 código fonte: Exemplo 1 - Pisca LED 1 #include 2 #include 3 4 main() 5 { 6 wiringPiSetup(); 7 pinMode(1, OUTPUT); 8 9 ("Exemplo 1 10 11 (1) 12 { 13 digitalWrite(1, 14 delay(1000); 15 digitalWrite(1, 16 delay(1000); 17 } 18 0; 19 }
C
// inicia a biblioteca WiringPi // configura o pino 1 como saída Pisca LED\n"); //imprime mensagem na tela
HIGH); // liga o pino 1 // espera 1 segundo LOW); // desliga o pino 1 // espera 1 segundo
https://www.filipeflop.com/blog/linguagem-c-com-raspberry-pi/
8/14
17/09/2017
Programação em Linguagem C com Raspberry Pi - FilipeFlop
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 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
https://www.filipeflop.com/blog/linguagem-c-com-raspberry-pi/
C
9/14
17/09/2017
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Programação em Linguagem C com Raspberry Pi - FilipeFlop
#include #include main() { wiringPiSetup(); pinMode(1, OUTPUT); pinMode(7, INPUT); pullUpDnControl(7, PUD_UP);
// // // //
inicia biblioteca wiringPi configura pino 1 como saida configura pino 7 como entrada configura resistor pull-up no pino 7
estadoLED = 0; ("Exemplo 2 - Controle do LED com chave push button\n"); //imprime mensagem na tela (1) { (digitalRead(7) == LOW)
// detecta se a chave foi pressionada
{ estadoLED = !estadoLED; // inverte o estado do LED digitalWrite(1, estadoLED); // controla o LED conforme estado (estadoLED == 1) ("LED aceso\n"); // imprime estado do LED (estadoLED == 0) ("LED apagado\n"); // imprime estado do LED delay(20); (digitalRead(7) == LOW); // aguarda enquato chave ainda esta pressionada delay(20); } } 0; }
Exemplo 3 – Controlando LED por PWM Neste exemplo iremos acender e apagar o LED utilizando PWM. Exemplo 3 - Controlando LED por PWM
https://www.filipeflop.com/blog/linguagem-c-com-raspberry-pi/
C
10/14
17/09/2017
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
Programação em Linguagem C com Raspberry Pi - FilipeFlop
#include #include main() { wiringPiSetup(); // inicia a biblioteca WiringPi pinMode(1, PWM_OUTPUT); // configura o pino 1 como saída PWM i; // declara variável para o loop for ("Exemplo 3 - Controlando LED por PWM\n"); //imprime mensagem na tela (1) { (i=0;i<=1024;i+=4)
// faz um loop mudando valor de i de 0 a 1024 com um passo de 4
{ pwmWrite(1, i); // escreve 0-1024 a cada iteração delay(3); } (i=1024;i>=0;i-=4) // faz um loop mudando valor de i de 1024 a 0 com um passo de 4 { pwmWrite(1, i); // escreve 1024-0 a cada iteração delay(3); } } 0; }
O código fonte e o binário pré-compilado dos três exemplos podem ser encontrados no GitHub da FILIPEFLOP. 0
0
post Pesquisar produtos… Neste 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áco na plataforma ThingSpeak. Acesse também a revista MagPi ensinando muito mais sobre linguagem C.
https://www.filipeflop.com/blog/linguagem-c-com-raspberry-pi/
11/14
17/09/2017
Programação em Linguagem C com Raspberry Pi - FilipeFlop
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
Top 5 Projetos com Raspberry Pi
Controle de acesso RFID com Raspberry Pi
Contador de seguidores do Instagram com Raspberry
Chegou a Raspberry Pi Zero W com wireless e bluetooth!
Giovanni Bauermeister Engenheiro de Automação e Controle graduado pela UNISAL e também Técnico em Mecatrônica pelo SENAI, onde teve os primeiros contatos com microcontroladores, eletrônica e programação. Integrante do Depto. técnico da FILIPEFLOP.
Projeto de PCB para Planta IoT – Parte 3
←
Central de jogos RetroPie com Raspberry Pi
→
Deixe uma resposta Conectar com: https://www.filipeflop.com/blog/linguagem-c-com-raspberry-pi/
12/14
17/09/2017
Programação em Linguagem C com Raspberry Pi - FilipeFlop
O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com * Comentário
Nome *
E-mail *
Site
Publicar comentário
2 Comentários
Parabéns pelo tutorial! muito bom mesmo! Dúvida :Congura os resistores internos de pull-up ou pulldown. Tem pinos especícos 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! Pedro Gonçalves 12 de setembro de 2017
https://www.filipeflop.com/blog/linguagem-c-com-raspberry-pi/
Responder
13/14
17/09/2017
Programação 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 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 12 de setembro de 2017
Responder
Pesquisar Posts no BLOG
Pesquisar …
Categorias
https://www.filipeflop.com/blog/linguagem-c-com-raspberry-pi/
14/14