Nas ultimas semanas, começamos um tutorial sobre a Raspberry Pi. Neste post, mostramos toda parte parte introdutória, desde o conhecimento dos componentes da placa até instalação e configuração do sistema operacional. Tiramos a conclusão neste post que “Tamanho não é documento!”, e no caso da Raspberry não é mesmo. Então, para incrementar essa primeira parte e entusiasmar nossos leitores, fizemos outro post com 5 projetos legais com Raspberry Pi, onde juntamos na web alguns protótipos muito bacanas de fazedores como nós.
Hoje vamos continuar a brincadeira! O nosso tema da segunda parte dessa série é: Introdução a Porta GPIO da Raspberry Pi B+. Neste tutorial, mostraremos quem é o conjunto de portas GPIO, quais são as suas características e funções, e por fim um exemplo bem simples de como usar essa porta. Está afim de conhece-la? Então chega mais!!
O que é a Porta GPIO ?
Aqui começa a melhor parte da brincadeira! Pois essa é a porta responsável por ajudar a desenvolver protótipos muito legais que envolvem a Raspberry, desde acender um LED até fazer robôs extremamente expertos. Bem, e como fazer isso? Primeiro precisamos conhecer esse conjunto de pinos, entendendo o seu funcionamento.
O GPIO (General Purpose Input/Output), é basicamente um conjunto de pinos responsável por fazer a comunicação de entrada e saída de sinais digitais. Ele é composto por 26 pinos no Raspberry Pi B, e 40 pinos no Raspberry Pi B+. Com estes pinos é possível acionar LEDs, Motores, Relês, fazer leitura de sensores e botões, entre outros. Para entendermos melhor as características desses pinos, vamos mostrar mais à frente no texto um mapa dos pinos. Mas antes, veja o nosso próximo tópico, pois ele é de extrema importância.
Cuidados a se tomar!
Fazer projetos com a Raspberry é muito legal, pois ela oferece um leque grande de possibilidades para isso. Porem é preciso tomar alguns cuidados com os pinos GPIO, pois eles não possuem um sistema de proteção, como no Arduino. O Raspberry não usa o sistema de lógica digital padrão chamado de TTL, onde o nível alto lógico é 5v (o mesmo do Arduino). Isso merece um certo cuidado, pois a Pi utiliza um sistema próprio, onde nível alto lógico é de 3.3V, logo se aplicar uma tensão maior em uma das portas poderá danificar a mesma, e se a sorte falhar, você poderá queimar a placa toda. Vale lembrar também que, devido a Raspberry não ter este sistema de proteção, deve-se tomar muito cuidado para que não aconteça curto entre os pino, uma vez que eles estão muito próximos um dos outros. O que precisa ter é atenção e muito cuidado, pois não queremos que nossa plaquinha seja danificada.
Mapa dos Pinos
Podemos observar que, a Raspberry não possui uma identificação dos pinos impressa na placa. Por isso é preciso estudar um pouco esse mapa dos pinos, antes de começar a fazer as ligações de um projeto. Neste tutorial, montamos uma tabela que vai mostrar a identifição de cada um desses. Lembrando que estamos usando em nosso explicativo, a Raspberry Pi B+.
3.3v | 1 | 2 | 5V |
GPIO 2 | 3 | 4 | 5V |
GPIO 3 | 5 | 6 | GND |
GPIO4 | 7 | 8 | GPIO 14 |
GND | 9 | 10 | GPIO 15 |
GPIO 17 | 11 | 12 | GPIO 18 |
GPIO 27 | 13 | 14 | GND |
GPIO 22 | 15 | 16 | GPIO 23 |
3.3V | 17 | 18 | GPIO 24 |
GPIO 10 | 19 | 20 | GND |
GPIO 09 | 21 | 22 | GPIO 25 |
GPIO11 | 23 | 24 | GPIO 8 |
GND | 25 | 26 | GPIO 7 |
ID_SD | 27 | 28 | ID_SC |
GPIO 5 | 29 | 30 | GND |
GPIO 6 | 31 | 32 | GPIO 12 |
GPIO13 | 33 | 34 | GND |
GPIO 19 | 35 | 36 | GPIO 16 |
GPIO 26 | 37 | 38 | GPIO 20 |
GND | 39 | 40 | GPIO 21 |
Para que possamos entender nosso diagrama de forma mais clara, separamos eles em 8 cores diferentes, e aqui vai as características de cada uma:
- Vermelho: Esta é uma saída para alimentação, e possui uma tensão de 5V. Deve-se manter atento com ela, pois como já foi dito, ela não pode entrar em contato de maneira alguma com as outras portas.
- Laranja: Esta também é uma saída para alimentação, porém com uma tensão de 3.3V. Com essa, é possível comunicar com outras portas, mas é preciso usar um resistor como limitador de corrente para fazer isso.
- Preto: Estas são simplesmente as portas Terra (GROUND), e não existe tensão na mesma.
- Azul: Essas duas portas podem ser programadas para interface I2C (Circuito Inter-integrado). Para quem não conhece, este é um protocolo criado pela Philips em 2006, para fazer conexões entre periféricos de baixa velocidade. No caso da Raspberry, utiliza-se um barramento entre dois fio, sendo um de dados e outro de clock, para comunicação serial entre circuitos integrados montados em uma mesma placa.
- Amarelo: Estas são as portas seriais, que utilizam o protocolo RS-232 para o envio e recebimento de sinal digital.
- Verde: Aqui estão os pinos GPIO que falamos anteriormente. Eles servem para fazer envio e recebimento de dados digitais.
- Rosa: Estes pinos são também para entrada e saída de dados digitais. Porém, eles possuem uma característica a mais. Com estes pinos é possível fazer uma comunicação serial Full Duplex síncrono, que permite o processador do Raspberry comunicar com algum periférico externo de forma bidirecional. Mas essa comunicação só acontece, se e somente se o protocolo for implementado.
- Cinza: Essas são as portas do ID EEPROM (Electrically-Erasable Programmable Read-Only Memory). Este é um tipo de memória que pode ser programado e apagado várias vezes, através de uma tensão elétrica interna ou externa.
Exemplo Básico
Para finalizar nosso tutorial, vamos mostrar aqui um exemplo bem básico que envolve saída e entrada de dados. O que vamos fazer é simplesmente desligar um LED através de um pushbutton, usando as portas GPIO. Então vamos lá, é hora de botar a mão na massa!
O primeiro passo que devemos dar, é identificar se já existe a biblioteca GPIO pré-instalada, e se sua versão é superior a 0.5.4. Para descobrir isso, abra o terminal e digite os seguintes códigos:
sudo python import RPi.GPIO as GPIO GPIO.VERSION
Feito essa verificação, é hora de começar a montar o circuito. E para isso, vamos precisar dos seguintes componentes:
- Um LED
- Dois Resistores de 1K
- Jumpers
- Uma Protoboard
- Um PushButton
Com todos estes componentes em mãos, agora é só montar o circuito conforme ilustra nosso esquemático abaixo:
Se o circuito já estiver montado e conferido, então é hora de começar a programar. A linguagem que vamos utilizar é o Python, pois ela é fácil de usar e já vem instalada no Raspbian. Para começar, abra o software IDLE 3 que fica localizado na área de trabalho. Em seguida, vá em “File” e selecione a opção “New Window”, para que possamos começar um novo projeto. Com tudo isso pronto, é só introduzir os seguintes códigos:
#Definindo da biblioteca GPIO import RPi.GPIO as GPIO #Aqui definimos que vamos usar o numero de ordem do pino, e não o numero que refere a porta #Para usar o numero da porta, é preciso trocar a definição "GPIO.BOARD (ex. Pino 12)" para "GPIO.BCM (ex.GPIO 18)" GPIO.setmode(GPIO.BOARD) # Setando as portas de entrada e saída GPIO.setup(12, GPIO.OUT) GPIO.setup(16, GPIO.IN) #Loop principal (Laço indefinido) While(True): if GPIO.input == False: GPIO.output(12,1) if GPIO.output == True: GPIO.output(12,0)
O nosso código é bastante simples e auto-explicativo, ele basicamente inicia importando a biblioteca GPIO, em seguida define as portas de saída e entrada de sinais digitais. Após isso, iniciamos um laço que será executado indefinidamente para verificar o status do botão.E então,se o valor recebido pelo pushbutton for “True” (nível lógico máximo) o LED será desligado. Caso contrário, o mesmo irá permanecer aceso. Para executar o código e ver todo circuito funcionar, basta apertar o botão F5 do teclado.
Esse exemplo é apenas um estimulo para quem está iniciando com Raspberry, de forma que essas pessoas comecem a se habituar com ambiente de desenvolvimento da plataforma. E ai? gostou do nosso tutorial? Já pensou no que fazer com Raspberry? Qualquer dúvida é só acessar nosso fórum.
Onde comprar?
Compre Arduino, componentes eletrônicos e ferramentas na FilipeFlop. Os preços são ótimos, a agilidade é matadora e as entregas são feitas para todo o Brasil. O Fazedores e a FilipeFlop estão juntos para fomentar a cultura maker no Brasil.
Uma pergunta. Esse GPIO seriam as portas digitais no Arduino?
Como fazer digamos set pin 1 on (2s) pin off depois pin 3 on (2s) pin off em sequencia de forma a usar todos os pins do pi e fazer loop?
Boa Tarde
Estou iniciando um projeto e preciso de uma placa que possa comunicar pela rede ou ate mesmo internet
com esta placa eu consigo fazer isso ?
Obrigado
quando executo o codigo direto no terminal (via putty), o rasp fica com o processamento em 100% e o led nao acende. Alguem sabe o que pode estar errado?
Quando executo esse programa o processamento do rasp vai a 100% e o led nao acende. Alguem tem idéia do que pode ser?
Boa tarde amigos, preciso de uma ajuda.
Quero montar um acionador de sirene com o Raspberry Pi, ele precisa apenas pegar o horário do computador e acionar a sirene nos horários programados. Tem como eu fazer isso com essa interface ? Obrigado.
Amigo, desculpe mas os pinos do GPio são serial TTL e não RS-232
Boa Tarde
Estou precisando de uma ajuda como usar raspberry pi 3 para receber sinas de um (DVR ou Gravador de Vídeo) Sinas Como perda de AC Perda de Sinal de vídeo de uma Câmera.
Olá, gostaria apenas de programar alguma das portas vizinhas aos grounds para ter 5V para ligar o cooler apenas enquanto os sistemas operacionais estiverem rodando sendo desligada a porta após o shutdown do SO.
Grato.
Bom dia!!! Qual linguagem de desenvolvimento utiliza-se pra desenvolver um software para que eu possa trabalhar com RASPBERRY ?
Olá equipe do Fazedores.
Sou estudante de Engenharia Elétrica e estou cursando a disciplina de Circuitos Eletrônicos I. O professor solicitou como trabalho final da disciplina o desenvolvimento de uma placa com condicionamento de sinais para utilizar a GPIO do Raspberry. Conversando com um amigo meu, nos deparamos com um problema que poderia ser solucionado utilizando o Raspberry Pi, juntamente com a placa que irei desenvolver ao longo do semestre. Porém, comecei a pesquisar faz pouco tempo sobre o módulo. O projeto é bem complexo. Necessita de comunicação e envio de dados para fora. Gostaria de saber como posso entrar em contato com a equipe para tirar dúvidas e alguma ideias sobre desenvolvimento.
Desde já agradeço a atenção de todos, e pelos ótimos posts criados por vocês. Muito bem explicado as funções propostas.
Muito bom!. Só uma dúvida. Como você faz aquelas imagens de simulação do circuito ? Aquela que tem a placa do raspberry e a protoboard. VLW!
Ola, gostaria de parabenizá-los pelo site, simplesmente perfeito.Gostaria de saber se vcs conseguem me ajudar.Tenho um Raspberry pi 2 e quero montar um retrogame, mas colocando o raspberry dentro de uma carcaça de mega drive 1 japones.O problema é que não sei fazer o raspberry utilizar os botoes existentes na carcaça do mega drive como liga e desliga o reset o fone de ouvido e fazer o led ficar aceso ao ligar. Não entendo nada de eletronica, sou apenas um fuçador de posts e videos no you tube, mas ja fiz algumas coisas como meu próprio case arcade como das antigas.Por Favor se puderem me ajudar será de muita ajuda.Obrigado Att: Carlos
Olá Carlos, legal seu projeto. O ideal é você usar nosso fórum para este tipo de pedido de ajuda. Lá tem muita gente que trabalha com Raspberry Pi e que já montaram projetos semelhantes. O endereço é: http://forum.fazedores.com
Boa Sorte!
Olá a todos! Agradeço pelo tutorial e iniciativa à introdução deste conhecimento. Quero ajudar, complementando informações sobre esse projeto. Vamos lá: Na linha 11, o comando “While” só funcionará com letras minúsculas, ou seja, “while”. Poderá ser complementado no final da linha de comando o seguinte: GPIO.cleanup ()
com isso, não aparecerá mensagens de erros no final da execução.
*Bruno
Você informa que o site está cheio de erros, e usa o “mais” no lugar do “mas”…rsrs
Um cara que não sabe a diferença entre “mais” e “mas”, não deveria apontar erros…rsrs
#Ficaadica
seu site esta cheio de erros kkk mais esta show :)
Olá Bruno, mande os erros para que possamos corrigir!!! E valeu pelo toque!
Amigo. Preciso de uma ajuda no rpi. Estou tentando comunicar um display 16×2 no rpi via i2c. Teria como me ajudar?