• Nenhum resultado encontrado

3 Componentes e Arquiteturas

3.1 Componentes (Hardware e software)

3.1.3 Raspberry Pi

Um Raspberry Pi é um computador do tamanho aproximado de um cartão de crédi- to, originalmente projetado para a educação, inspirado pelo BBC Micro36 de 1981. O obje-

tivo de seu criador, Eben Upton, era criar um dispositivo de baixo custo que melhorasse as habilidades de programação e compreensão de hardware para alunos do nível pré-uni- versitário. Mas graças ao seu pequeno tamanho e preço acessível, foi rapidamente adota- do por desenvolvedores e entusiastas da eletrônica para projetos que necessitavam mais que um simples microcontrolador (tal como Arduino).

Apesar de ser mais lento que um desktop ou um notebook ele é um computador completo. É capaz de rodar vários sistemas operacionais. Existem diversas distribuições Linux pra ele como Raspbian, Pidora e Arch Linux. Ele pode funcionar como um servidor web ou um servidor FTP e etc. O grande diferencial do Pi está no seu custo e no seu pro- cessamento que consome pouquíssima energia.

Segundo Upton e Halfacree (2014, p. 15), o hardware do Raspberry Pi é aberto, com exceção do chip principal, o SoC (System on a Chip) Broadcom BCM2835. Esse chip é responsável pelas principais funções da placa: CPU, gráficos, memória, controlador de USB, etc.

36 BBC Microcomputer System é uma série de microcomputadores e periféricos construídos pela Acom

Computers Ltd para o BBC Computer Literacy Project (Um projeto de educação por computador). Figura 10: Raspberry Pi - Model B

Muitos dos projetos feitos com o Raspberry Pi também estão abertos e bem docu- mentados podendo ser reconstruídos e modificados. O sistema escolhido para rodar no Raspberry Pi foi o GNU/Linux. Já existem várias distribuições otimizadas pra rodar nele.

Há diversos modelos de Raspberry Pi, variando em capacidade de memória e re- cursos de processamento, também há diferenças na parte física de acesso aos pinos GPIO.

São estes os modelos disponíveis hoje: • Raspberry Pi 3 model B • Raspberry Pi 2 model B • Raspberry Pi 1 model B e B+ • Raspberry Pi 1 model A e A+ • Raspberry Pi ZERO W • Raspberry Pi ZERO

O modelo usado neste trabalho é o Raspberry Pi 1 model B (Figura 10). Uma ca- racterística poderosa do Raspberry Pi são seus pinos de GPIO que ficam junto à lateral da placa, próximo ao plug amarelo de saída de vídeo.

Estes pinos (Figura 11) são a interface entre o Pi e o mundo exterior. São entradas e saídas digitais. É possível ler seus estados, ligado e desligado (entrada) ou através de software ligar e desligar pinos (saída). Dos 26 pinos, 17 são de propósito geral (entradas ou saídas), os outros são pinos de tensão (VCC) e pinos de referência 0V (ground). A Fi- gura 12 mostra as duas nomenclaturas dos pinos que podem ser escolhidas para traba- lhar dentro do programa. GPIO.BOARD, adota a numeração que está indicada dentro dos círculos. GPIO.BCM (Broadcom SOC channel), adota a numeração indicada dentro dos retângulos. O Raspberry Pi é ideal para conectar e controlar dispositivos físicos sobre a Internet.

Figura 11: Raspberry Pi 1 model B - Pinos de GPIO Fonte: (CHAUHAN, 2017)

Não é o objetivo deste trabalho usar o Raspberry Pi como dispositivo que controla- rá os atuadores e ler os sensores, porém é o objetivo citar maneiras de se fazer IoT usan - do software e hardware de código aberto. Então, abaixo, pode-se ver um exemplo de como acender um led usando o Raspberry Pi.

Ignorando o Raspberry Pi por um momento, pode ser construído um circuito sim- ples. Uma bateria é ligada a uma fonte de luz e uma chave (o resistor, no circuito (Figura 13), está ali para limitar a corrente elétrica e proteger o led).

Quando um pino de GPIO é usado como saída, o Raspberry Pi substitui a bateria e a chave no diagrama acima. Cada pino pode ligar ou desligar, ou ir a nível lógico alto ou baixo (em termos computacionais). Quando o pino está em nível alto ele passa a ter um potencial de 3.3 volts; quando ele está em nível lógico baixo ele fica com um potencial de

Figura 12: Nomenclatura dos pinos GPIO - BOARD e BCM Fonte: (HAWKINS, 2018)

Figura 13: Circuito de exemplo Fonte: (O autor, 2018)

zero volt. A próxima imagem mostra o mesmo circuito montado no Raspberry Pi. Esquema da Figura 14 foi criado com o software Fritzing37.

O próximo passo é escrever um programa que faça este controle do pino de saída, que faça o pino ir para o nível lógico alto ou baixo. A linguagem que será usada neste exemplo é a linguagem Python, que já vem instalada no Raspbian.

O Código 1, quando executado, faz com que o led acenda e apague em intervalos de 1s. A linha 1 do código importa o módulo RPI.GPIO e cria uma “Alias” 38 para que seja

possível se referir ao módulo apenas com o nome de GPIO, este dá acesso às portas GPIO sendo possível setar as suas propriedades. A linha 2 importa o módulo que possibi- lita trabalhar com o tempo no Python, dar uma pausa de 1s por exemplo. A linha 4 selecio- na o modo como a GPIO será referenciada, neste caso escolhendo o modo BCM, já cita- do anteriormente. A linha 5 define que o pino rotulado como 24 será um pino de saída. Uma questão prática importante, pode ocorrer na interrupção do código, quando se utiliza o barramento GPIO, neste caso específico, acendendo e apagando o led. O progra- ma, pode sofrer uma interrupção de três maneiras: a primeira é que ele faça o que foi pro - posto e encerre naturalmente; a segunda é que o usuário force o encerramento através das teclas “control + c”; a terceira maneira, é que ocorra algum erro e o programa termine abruptamente. Nos casos 2 e 3 é possível que a GPIO usada fique no seu estado corren- te, fique “presa”, ou melhor fique “em uso”. Nessa condição, se o programa for executado novamente, é possível que apareça a seguinte mensagem: “RuntimeWarning: This chan-

37 Fritzing – É um software de design para automação e eletrônica direcionado a designers, artistas e todo

aquele que tem interesse em computação física e prototipagem.

38 Apelido.

Figura 14: Esquema do Raspberry PI Fonte: (O autor, 2018)

nel is already in use, continue anyway”. A maneira correta de prevenir este erro é proteger

o laço principal através de um bloco try/except/finally, como mostrado no código.

A linha 7 dá início ao bloco try. A linha 9 define um laço infinito, fazendo com que o

led pisque por um tempo indeterminado. A linha 10 é apenas um comentário. A linha 11

coloca o pino 24 com nível lógico alto (1). A linha 12 faz com que o programa pause por 1s. A linha 13 tem outro comentário. A linha 14 leva o pino 24 para nível lógico baixo (0). A linha 15 espera por mais 1s reiniciando o laço novamente. Se houver qualquer tipo de in- terrupção, qualquer tipo de exceção, essa exceção será capturada e a execução será di- recionada para a linha 19, logo após o comando except. A partir daí a linha 19 imprime o texto que está entre aspas e o programa segue a executar o que está depois do finally (li- nha 21), executando então, na linha 23, a função GPIO.cleanup() que é responsável por “limpar” as portas que foram usadas, configuradas no código.

Há duas maneiras erradas de tentar evitar essa situação, uma delas é chamar a função GPIO.cleanup() no início do código. Isso não funciona pois a função limpa as con- figurações de entrada e saída (dos pinos) que foram feitas no código, o que não surte qualquer efeito nos pinos que estão “presos”, pois foram configurados anteriormente, no código que foi interrompido. A segunda maneira, apelidada de “chicken’s way out”39, é

chamar a função GPIO.setwarnings(False) no início do código. Ela desabilita os avisos (advertências), o que esconde o problema mas não o resolve. O jeito correto e seguro de tratar o problema é como explicado acima, usando o tratamento de exceções.