Raspberry Pi
Raspberry Pi
Apostilas PET-Tele
Introdução ao Raspberry Pi
(Versão: A2021M01D29)
Niterói – RJ
Janeiro / 2021
Prefácio
www.telecom.uff.br/pet/petws/index.php?pagina=downloads/apostilas .
1
SUMÁRIO 2
Sumário
1 Introdução 3
1.1 Materiais necessários para utilização . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Instalação e configuração do sistema operacional . . . . . . . . . . . . . . . . . . 3
2 Especificações técnicas 6
2.1 Raspberry Pi Rev. 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Resistores de Pull-Up/Pull-Down . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Tipos de comunicações On board . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.1 Interface Periférica Serial - SPI . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.2 Transmissor e Receptor Assı́ncrono Universal - UART . . . . . . . . . . . 9
2.4 Técnica de Modulação por Largura de Pulso PWM . . . . . . . . . . . . . . . . 11
Referências Bibliográficas 29
Capı́tulo 1
Introdução
Raspberry Pi é uma série de computadores de placa única com tamanho reduzido do tipo
System on Chip (SoC) [15]. A partir dessa placa são conectados, monitores, teclados, mouses
e demais periféricos. Seu desenvolvimento ocorreu no Reino Unido pela Raspberry Pi Foun-
dation [11] e tem como principal missão a promoção do ensino em ciência da Computação em
escolas, inclusão tecnológica e empoderamento social [14].
3
CAPÍTULO 1. INTRODUÇÃO 4
https://www.raspberrypi.org/downloads/raspberry-pi-os/ .
O passo seguinte é fazer o download e instalação do programa Etcher compatı́vel com seu
sistema operacional. O mesmo pode ser encontrado por meio do seguinte URL:
https://www.balena.io/etcher/ .
Como o sistema operacional já está devidamente gravado no cartão de memória podemos
iniciar o dispositivo. Em seu estado padrão de fábrica o usuário padrão é definido como “pi”,
e a senha padrão “raspberry”. É recomendado fazer alteração dessas credenciais no primeiro
uso para impedir invasões quando conectado em uma rede. O processo de inicialização é auto-
mático e ocorre assim que o dispositivo é ligado na tomada elétrica. Após a inicialização, se o
sistema operacional tiver sido instalado corretamente uma interface semelhante a representada
na Figura 1.3 deverá surgir. Pode ocorrer alterações devido a versão do sistema utilizado.
Especificações técnicas
6
CAPÍTULO 2. ESPECIFICAÇÕES TÉCNICAS 7
N Descrição N Descrição
1 Saı́da de +3.3V 14 Terminal Comum GND
2 Saı́da de +5V 15 GPIO22
3 GPIO2 | Pull-Up | I2C-SDA 16 GPIO23
4 Saı́da de +5V 17 3V3
5 GPIO3 | Pull-Up | I2C-SCE 18 GPIO24
6 Terminal Comum GND 19 GPIO10 | SPI | MOSI
7 GPIO4 20 Terminal Comum GND
8 GPIO14 | UART | TXD 21 GPIO9 | SPI | MISO
9 Terminal Comum GND 22 GPIO25
10 GPIO15 | UART | RXD 23 GPIO11 | SPI | CLK
11 GPIO17 | UART-RTS 24 GPIO8 | SPI | CE0
12 GPIO18 | PWM 25 Terminal Comum GND
13 GPIO27 26 GPIO7 | SPI | CE1
O circuito acima é chamado de circuito de Pull-Up pois ele “empurra” o pino de entrada para
o estado High por padrão. Se colocarmos um multı́metro com a chave aberta teremos o valor
de tensão muito próximo de +5V. Mudando o estado da chave, temos o valor 0V diretamente
aplicado na entrada digital.
Já este outro circuito da Figura 2.3 é chamado de Pull-Down pois ele empurra o pino de
entrada para o estado Low por padrão. Se colocarmos um com a chave aberta, teremos o
valor de leitura de 0V, enquanto que se colocarmos o instrumento medidor com a chave fechada
teremos +5V.
CAPÍTULO 2. ESPECIFICAÇÕES TÉCNICAS 9
O grupo PET-Tele possui uma apostila de Linux [7], que tem por objetivo servir de principal
meio de aprendizado para o leitor desta apostila. Os assuntos deste capı́tulo vão se limitar a
um guia-rápido das principais funções do Linux e direcionar para implementações envolvendo
o Raspberry Pi.
3.1 História
Diferentemente do que se é levado a pensar, o Linux é uma implementação independente
do sistema operacional UNIX. Linux é um termo popularmente empregado para se referir a
sistemas operacionais que utilizam o kernel Linux [17]. O Linux propriamente dito é um kernel
(“núcleo”), não um sistema operacional completo.
Sistemas completos construı́dos em torno do kernel do Linux usam o sistema GNU que ofe-
rece um shell, utilitários, bibliotecas, compiladores e ferramentas, bem como outros programas
como os editores de texto.
O desenvolvimento do Linux iniciou a partir de um projeto pessoal de um estudante da
Universidade de Helsinki, na Finlândia, chamado Linus Torvalds. Ele pretendia criar um sistema
operacional mais sofisticado do que o Minix, um UNIX relativamente simples cujo código fonte
ele tinha disponı́vel.
O Linux obedece ao padrão estabelecido pelo governo norte americano, POSIX. O POSIX é
o padrão da API (Application Programming Interface) UNIX, referências para desenvolvedores
da famı́lia UNIX-like. Desde a apresentação do Linux em 5 de outubro de 1991, por Linus
Torvalds, um grande número de pessoas envolvidas com programação começou a desenvolver o
Linux. O nome Linux deriva da junção Linus + UNIX = Linux.
12
CAPÍTULO 3. SISTEMA OPERACIONAL LINUX 13
arquivos que pertencem ao grupo correspondente. Outros é a categoria de usuários que não se
encaixam como donos ou não pertencem aos grupos do arquivo. As permissões de acesso para
donos, grupos e outros usuários são independentes uma das outras, permitindo assim um nı́vel
de acesso diferenciado.
A conta root é também chamada de super usuário. Este é um login que não possui restrições
de segurança. A conta root somente deve ser usada para fazer a administração do sistema.
Utilize a conta de usuário normal ao invés da conta root para operar seu sistema. Uma razão
para evitar usar privilégios root é devido à facilidade de se cometer danos irreparáveis ao sistema.
Nome_Usuario@Nome_Computador:~$ .
Para alterar as permissões, utiliza-se o comando chmod. Observe a sintaxe para uso desse
comando:
As permissões de leitura, escrita e execução podem ser alteradas pelo modo octal ou modo
literal (simbólico). As Tabelas 3.1 e 3.2 mostram respectivamente a codificação para cada um
desses modos.
Sı́mbolo Funcionalidade
u Usuário proprietário
g Grupo do arquivo
o Outros
a Todos (u, g, o)
+ Adicionar permissão
- Remover permissão
= Configurar permissão como
r Leitura
w Gravação
x Execução
3.5 Diretórios
Os diretórios são organizados pela “árvore de diretórios”, a estrutura de árvore é muito
utilizada em ciência da computação e faz alusão às ramificações de uma árvore desde sua “raiz”
até uma “folha”. Nesse caso o diretório “raiz” possui sı́mbolo “/” e nele estão contidos todos os
outros subdiretórios.
Para navegar de um diretório para outro utilizamos o comando “cd” change directory que
em seu uso mais simples basta utilizar o comando seguido pelo path do diretório de destino.
O path consiste na lista de diretórios que precisa ser atravessada, desde o diretório raiz até o
arquivo, com barras separando os componentes. O path pode ser absoluto que é o percurso
completo desde a raiz até o arquivo de destino ou pode ser relativo que é o percurso da pasta
atual até o arquivo de destino. As mudanças de diretório precisam seguir um path válido, ou
seja, o diretório descendente precisa estar contido no diretório ascendente anterior e não pode
haver saltos no percurso.
Alguns dos principais diretórios do sistema Linux, estão listados abaixo:
• /media - Informaç~
oes de dispositivos removı́veis.
comando -opç~
oes -argumentos .
Podem ser inseridos diferentes comandos na mesma linha separando-os por ponto e vı́rgula,
como, por exemplo:
cd /home; ls -all .
Nesse exemplo o comando “cd” navega da raiz até o diretório home e o “ls” lista todos os
diretórios e arquivos presentes. Dentre os comandos básicos do Linux, os mais importantes são
os de navegação nos diretórios, criação de novos arquivos e diretórios, alteração de permissões,
cópia de arquivos e listagem de arquivos. Abaixo encontra-se uma lista com os principais
comandos e suas funções.
• cp [Nome do Arquivo] [Local para Copiar] - “Copy” - Cria uma cópia do arquivo.
17
CAPÍTULO 4. PYTHON APLICADO A RASPBERRY PI 18
A variável taxa foi inicializada pela atribuição de um valor. No entanto, a variável “euros”
não foi inicializada em momento algum, nem mesmo com um valor nulo. Então no código acima
será exibido o seguinte erro:
name ’euros ’ is not defined .
Pode-se fazer atribuições para mais de uma variável em uma mesma linha basta seguir a seguinte
sintaxe.
x, y, z = ’Grupo ’, ’PET ’, ’Tele ’
Outra alternativa pode ser a atribuição de um mesmo valor para mais de uma variável.
x = y = z = ’Hello World ’
Apesar de não ser obrigatório, podemos especificar o tipo de variável. A seguir são mostrados
alguns dos principais tipos.
x = str(’Hello World ’)
x = int (20)
x = float (20.5)
x = complex (1j)
x = list ((’Grupo ’,’PET ’,’Tele ’))
x = range (6)
x = bool (5)
Um laço [for] é usado para iterar sobre uma sequência que pode ser uma lista uma string ou
outras estruturas. os laços [for] não necessitam de inicialização de uma variável de indexação
antecipadamente.
lista = [’p’, ’y’, ’t’, ’h’, ’o’, ’n’]
for item in lista:
print item
Com um laço de [while] podemos executar um conjunto de expressões enquanto a condição seja
verdadeira.
count = 0
while count <= 5:
print (count)
count += 1
minha_funcao ()
O retorno de uma função pode ser uma variável, uma constante, uma outra função, nada, ou
então, a própria função. Quando a função retorna ela mesma é chamada de função recursiva e
devemos ter cuidado para não criar retornos infinitos. Para obter algum dos tipos de retornos
de uma função basta adicionar a expressão return e o elemento a ser retornado.
https://pypi.org/project/pip/}{https://pypi.org/project/pip/ .
A instalação de um pacote com o PIP, é feita através da navegação até pasta do seu projeto
e execução do comando: “pip install nome do pacote”. A lista completa de pacotes disponı́veis
para instalaçao pode ser encontrada por meio do seguinte URL:
https://pypi.org/ .
Para remoção de um pacote é utilizado quase o mesmo processo acima, apenas há mudança
na substituição do comando “install” por “remove”. O comando “pip list” lista todos os pacotes
atualmente instalados naquele diretório.
O código acima importará todos os módulos de math. Caso o desenvolvedor queira importar
apenas o necessário e não sobrecarregar desnecessariamente o programa utilizamos from.
from math import sqrt
Python possibilita a rápida criação de módulos pelo usuário. Para isso, basta criar um arquivo
Python e salvá-lo. Por exemplo o trecho de código abaixo será salvo em um arquivo com nome
“meumodulo.py”.
def saudacao (nome ):
print (’bem−vindo ’, + name)
import meumodulo
meumodulo . saudacao (’Jose ’)
No trecho abaixo o bloco try será executado, e passará no teste porque x está definido. O valor
de x será exibido na tela.
try:
x = ’Hello World ’
print (x)
except :
print (’Uma Excecao aconteceu ’)
Um outro método que pode ser usado é o levantamento de uma exceção se uma determinada
condição ocorrer. O trecho abaixo levanta um erro e força uma parada no programa se a variável
“x” for menor que 0.
x = −1
if x < 0:
raise (’Erro , numeros abaixo de zero nao aceitos ’)
Uma maneira alternativa de acessar essas configurações é através do terminal pelo comando
“raspi-config”. Seguindo os passos abaixo também será possı́vel efetuar a habilitação do SSH
atráves de linha de comando.
5. Escolha “Finish”.
Capı́tulo 5
25
CAPÍTULO 5. ATIVIDADES COM COMPONENTES ELETRÔNICOS 26
devemos importar dois módulos. O “rpi.GPIO” para fazer o Python reconhecer os pinos e o
módulo time, para o uso das funções sleep, responsáveis pelo tempo em que o LED fica ligado
e desligado.
import RPi.GPIO as GPIO
from time import sleep
O próximo passo é fazer a declaração de uma variável para armazenar o número do pino em
que se encontra o LED e a utilização das funções setmode e setup, para definir o código de
numeração e o modo de operação dos pinos respectivamente.
led_pin = 13
GPIO. setmode (GPIO.BOARD) # alternativo GPIO.BCM led_pin = 27
GPIO.setup(led_pin , GPIO.OUT , initial =GPIO.LOW)
Em seguida basta implementar um laço de repetição com infinitas alterações do estado da saı́da,
ora alta (High), ora baixa (Low ).
while True: # Execucao em laco infinito
GPIO. output (led_pin , GPIO.HIGH)
sleep (1) # Sleep for 1 second
GPIO. output (led_pin , GPIO.LOW)
sleep (1)
Conforme mostra a Figura 5.2, variando a largura do pulso, existe uma tensão média para
cada ciclo de trabalho. Esses ciclos podem ser calculados conforme as Equações 5.1 e 5.2.
LarguraP ulso
DutyCycle = 100 · (5.1)
P eriodo
P eriodo = LarguradoP ulso + T empodesligado (5.2)
Existem dois tipos de modulação PWM no Raspberry Pi, hardware PWM e software PWM.
No primeiro tipo a temporização dos pulsos e a geração do sinal PWM é controlada por circuito
integrado responsável embarcado na placa. Pode ser gerada apenas no GPIO18 e por possuir
maior precisão, é mais adequada para controlar servos. O software PWM está disponı́vel em
todos os pinos. A temporização dos pulsos é controlada pelo escalonador Scheduler Linux. Seu
uso é mais flexı́vel e é adaptável para uma variedade maior de frequências. É ideal para exercer
tarefas que não necessitem muita precisão.
Observe o exemplo abaixo que inicializa um pino em PWM e ciclo de trabalho zero (Desli-
gado).
GPIO. setmode (GPIO.BCM)
GPIO.setup(led_pin , GPIO.OUT)
pwm = GPIO.PWM(led_pin , 100)
pwm. start (0)
1. Abra o terminal.
3. Entre no diretório.
7. Salve o arquivo.
Em seguida, definimos algumas variáveis com estados iniciais. Os valores são baseados
nas especificações da maioria dos servomotores, ou seja, são constantes para boa parte dos
servomotores. Um duty cycle de 2 % corresponde a um ângulo de 0◦ , um duty cycle de 12 %
corresponde a um ângulo de 180◦ . A partir disso, podemos encontrar que 2 % de duty cycle
CAPÍTULO 5. ATIVIDADES COM COMPONENTES ELETRÔNICOS 29
equivale a um pulso de 0.5 ms e 12 % de duty cycle a um pulso de 2.5 ms. A equação 5.1 mostra
essa relação entre largura do pulso e duty cycle.
servo_pin = 4 # definicao do pino
f = 50.0 # frequencia do pino PWM em (Hz)
deg_0_pulse = 0.5 # largura do pulso para 0
deg_180_pulse = 2.5 # largura do pulso para 180
No trecho abaixo aplicam-se as devidas conversões de grau para duty cycle e demais expres-
sões para determinar a faixa de todos os ângulos entre 0 e 180◦ .
period = 1000/f # periodo do sinal PWM
deg_0_duty = 100 ∗ deg_0_pulse / period # conversao grau−duty cycle
pulse_range = deg_180_pulse − deg_0_pulse # faixa de pulsos
duty_range = 100 ∗ pulse_range / period # faixa de duty cycle
Conforme visto na Subseção 4.5 sobre criação de funções. Podemos definir uma função para
ajustar um ângulo para o servomotor realizando a operação de ajuste de um duty cycle. Essa
operação de mudança duty cycle está presente na biblioteca GPIO.
def set_angle (angle ):
duty = deg_0_duty + (angle /180.0)∗ duty_range
pwm. ChangeDutyCycle (duty)
Utiliza-se o método try conforme visto na Subseção 4.10.1 para realizar uma ação de teste.
O teste consiste na execução da função “set angle” de acordo com o valor dado como entrada
pelo usuário repetidas vezes, até uma interrupção.
try:
while True:
angle = input (’Enter angle (0 to 180): ’)
set_angle (angle)
[2] BEN CROSTON. biblioteca em python rpi.gpio 0.7.0 . Disponı́vel em: <https:
//pypi.org/project/RPi.GPIO/>, 2019. Online; Accesso em: 29 Dez. 2019.
[5] JOÃO LUIZ DE AMORIM PEREIRA NETO, RAPHAEL MIRANDA. Novas imple-
mentações para automatização e acesso remoto no sistema de reservatórios de de-
tenção aplicados à drenagem urbana do LaDISan/TCE/UFF utilizando a plataforma
Raspberry Pi. Disponı́vel em: <http://www.telecom.uff.br/pet/petws/index.php?
pagina=downloads/projetos>, 2020. Online; Accesso em: 12 Jan. 2021.
[6] MECAWEB EDUCATION SITE. PWM - Modulação por Largura de Pulso. Dispo-
nı́vel em: <http://www.mecaweb.com.br/eletronica/content/e_pwm>, 2019. Online;
Accesso em: 15 out. 2019.
30
REFERÊNCIAS BIBLIOGRÁFICAS 31
[13] SOFTWARE IN THE PUBLIC INTEREST, INC. Debian os. Disponı́vel em: <https:
//www.debian.org/>, 2021. Online; Accesso em: 18 Jan. 2021.