O documento apresenta uma introdução ao uso de Python com sistemas embarcados, cobrindo três dias de treinamento. O primeiro dia discute introdução aos dados, leitura e escrita de arquivos. O segundo dia aborda GPIOs, bibliotecas e comunicação serial. O terceiro dia lida com leitura de sensores, envio de dados para a nuvem via REST e MQTT. Exemplos de código Python para acender um LED são apresentados para diferentes placas como Raspberry Pi, Intel Edison e LinkIt Smart 7688.
Perlduino - Interfaceando sua aplicação com o mundo real!
IoT Python embarcados
1. IoT – Primeiros passos utilizando
Python com embarcados
Vinicius J. Leódido Correia | Engº Voluntário
Engenheiros Sem Fronteiras – Núcleo Rio de Janeiro
2. Agenda
Dia 1:
Introdução, usos mais comuns, estrutura de dados em Python, leitura e
escrita de arquivos
Dia 2:
Iniciando os passos básicos nas placas, GPIOs, as bibliotecas MRAA /
UPM, ligações seriais USB/TTL.
Dia 3:
Lendo os dados dos sensores, encaminhando os dados para a nuvem,
entendendo e adaptando os dados no script Python para gravação via
REST, realizando comunicações via MQTT.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
3. Dia 2 – Python e Sistema Embarcado
Sistemas Embarcados
Unidade de Processamento (Microcontrolador ou Microprocessador)
Software Interno (Software Embarcado) para processamento de
informações – Firmware
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
4. Dia 2 – Python e Sistema Embarcado
Sistemas Linux Embarcados
O que é o Linux?
É um Sistema Operacional, o qual teve seu Kernel desenvolvido por
Linus Torvald na década de 90 e anos mais tarde, foi integrado pela
GNU GPL, e mantém atualizações e novas distribuições pelas
comunidades Open Source
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
5. Dia 2 – Python e Sistema Embarcado
Sistemas Linux Embarcados
Kernel do Linux
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
6. Dia 2 – Python e Sistema Embarcado
Sistemas Linux Embarcados
Então o que é um Linux Embarcado?
Se refere ao Sistema Operacional completo, ou uma distribuição
voltada para dispositivos embarcados (Sistema Embarcado executando
SO Linux)
Como isso é possível?
Código fonte do Kernel foi feito para integrar uma vasta gama de
dispositivos, estações de trabalho, servidores e outros periféricos que
se possa imaginar, assim como uma placa eletrônica cuja arquitetura
de Hardware corresponde a um Sistema embarcado, cujo principal
element é um Soc (System-On-a-Chip).
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
7. Dia 2 – Python e Sistema Embarcado
Sistemas Linux Embarcados
SoC (System-On-a-Chip)
Geralmente é um circuito integrado, que reúne todos os elementos
básicos de um Sistema computacional, além de outros barramentos e
periféricos, tais como I2C, UART, SPI, etc.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
8. Dia 2 – Python e Sistema Embarcado
Sistemas Linux Embarcados
Arquitetura de um SoC
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
9. Dia 2 – Python e Sistema Embarcado
Sistemas Linux Embarcados
O Kernel Linux é escrito na memória Flash ou outra mídia de
armazenamento presente na placa, como os cartões microSD.
Com o forte crescimento e cada vez mais surgindo adaptações
voltadas para a tendência à IoT, os fabricantes de SoC têm
reestruturado suas arquiteturas para que possam dar suporte ao
Kernel do Linux e dar abrangência aos diversos tipos de
Hardwares e sensores que estão sendo desenvolvidos.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
10. Dia 2 – Python e Sistema Embarcado
Principais Placas que dão Suporte ao Linux Embarcado
Raspberry Pi 2B+
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
• SoC – Broadcom
BCM2836 quad core
Cortex A7 processor
900MHz;
• Memória do Sistema –
1GB SDRAM.
11. Dia 2 – Python e Sistema Embarcado
Principais Placas que dão Suporte ao Linux Embarcado
Raspberry Pi 2B+
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
12. Dia 2 – Python e Sistema Embarcado
Principais Placas que dão Suporte ao Linux Embarcado
Raspberry Pi 3B (WiFi e BLE 4.0 Embutidos)
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
RaspPi 2B+ vs RaspPi 3B BLE 4.0 Módulo
WiFi Antenna• SoC – Broadcom BCM2837
quad core X64 Cortex A53
processor 1.2GHz;
• Memória do Sistema – 1GB
SDRAM.
13. Dia 2 – Python e Sistema Embarcado
Principais Placas que dão Suporte ao Linux Embarcado
Intel Galileo Gen1
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
• Intel® Quark™ SoC X1000
(16K Cache, 400 MHz)
• 256MB RAM DDR3
14. Dia 2 – Python e Sistema Embarcado
Principais Placas que dão Suporte ao Linux Embarcado
Intel Galileo Gen1
Suporta Pci-e para conecões WiFi (Placas Wireless Notebook)
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
15. Dia 2 – Python e Sistema Embarcado
Principais Placas que dão Suporte ao Linux Embarcado
Intel Galileo Gen2
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
16. Dia 2 – Python e Sistema Embarcado
Principais Placas que dão Suporte ao Linux Embarcado
Intel Edison
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Intel Edison
• Dimensões: 35.5 × 25.0 × 3.9 mm
• Intel Atom Dual Core 500MHz - MPU
• Intel Quark 100 MHz 32 bits - MCU
• WiFi dual band
• BLE 4.0
• 1GB RAM DDR3
• 4GB eMMC
• 40 GPIO’s
17. Dia 2 – Python e Sistema Embarcado
Principais Placas que dão Suporte ao Linux Embarcado
Intel Edison
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
18. Dia 2 – Python e Sistema Embarcado
Principais Placas que dão Suporte ao Linux Embarcado
LinkIt Smart 7688
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
19. Dia 2 – Python e Sistema Embarcado
Principais Placas que dão Suporte ao Linux Embarcado
LinkIt Smart 7688
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Processador MIPS24KEc 580 MHz
20. Dia 2 – Python e Sistema Embarcado
Principais Placas que dão Suporte ao Linux Embarcado
LinkIt Smart 7688
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
21. Dia 2 – Python e Sistema Embarcado
Principais Placas que dão Suporte ao Linux Embarcado
LinkIt Smart 7688 Duo
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
22. Dia 2 – Python e Sistema Embarcado
Principais Placas que dão Suporte ao Linux Embarcado
LinkIt Smart 7688 Duo
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
23. Dia 2 – Python e Sistema Embarcado
Principais Placas que dão Suporte ao Linux Embarcado
LinkIt Smart 7688 Duo
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
24. Dia 2 – Python e Sistema Embarcado
Ligações Seriais USB/TTL ou USB/Paralelo
A Intel Edison é a única que dispõe de acesso por uma porta
USB client. As demais placas, necessitam de um conversor
USB/TTL ou USB/Paralelo como no caso da Intel Galileo Gen1.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
A LinkIt Smart 7688 trabalha
com tensão de 5v em seus
sinais lógicos digitais.
Basta utilizarmos os pinos
de TX(P8), RX (P9) e GND.
25. Dia 2 – Python e Sistema Embarcado
Ligações Seriais USB/TTL ou USB/Paralelo
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Atenção, a RaspberryPi
trabalha com tensão em 3.3v!
As I/O de TX/RX estão
interligadas direto no SoC
da placa.
O pino de 3.3vcc Power não é
necessário nas versões 2B+ e 3B
26. Dia 2 – Python e Sistema Embarcado
Ligações Seriais USB/TTL ou USB/Paralelo
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Também pode ser utilizado um Cabo
TTL / RS232 que tenha tensão adaptada
para 3.3v, utilizando os seguintes pinos:
Nº Pino Nome Cor Descrição
1 GND Preto Terra
2 CTS# Marrom
3 VCC Vermelho
4 TXD Laranja Transmissão Dado
5 RXD Amarelo Recepção Dado
6 RTS# Verde
27. Dia 2 – Python e Sistema Embarcado
Exemplo BlinkLed em Python
Intel Edison e/ou Galileo:
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Pode-se utilizar o shield
da Grove e o conector
para o Led, conforme abaixo:
28. Dia 2 – Python e Sistema Embarcado
Exemplo BlinkLed em Python
Intel Edison e/ou Galileo:
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
import mraa #para acesso as GPIO
import time #para fazermos função de sleep na execução do processo
LED_GPIO = 5 #Vamos usar o pino 5
blinkLed = mraa.Gpio(LED_GPIO) # Obtém a variável com o valor do pino
blinkLed.dir(mraa.DIR_OUT) # Seta o direcionamento como saída
ledState = False # LED se inicia como desligado (False)
blinkLed.write(0)
while True:
if ledState == False:
blinkLed.write(1) # LED está desligado, ligue colocando a saída em nivel alto
ledState = True # LED está ligado
else:
blinkLed.write(0)
ledState = False
print "LED está ligado? nResposta: %s" %(ledState)
# Espera um tempo
time.sleep(1)
29. Dia 2 – Python e Sistema Embarcado
Exemplo BlinkLed em Python
Raspberry Pi (2B+ ou 3B):
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
30. Dia 2 – Python e Sistema Embarcado
Exemplo BlinkLed em Python
Raspberry Pi (2B+ ou 3B):
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
import RPi.GPIO as GPIO #para acesso as GPIO
import time #para fazermos função de sleep na execução do processo
LED_GPIO = 7 #Vamos usar o pino 7
GPIO.setmode(GPIO.BOARD) #Configura os pinos no modo BOARD
GPIO.setwarnings(False) #Desativa os avisos
GPIO.setup(LED_GPIO, GPIO.OUT) #Configura o pino do LED como saída
while True:
print("LED ACESOn") #Escreve na Saída e realiza quebra de linha
GPIO.output(LED_GPIO, 1) #Coloca o pino em nível alto, e acende Led
time.sleep(1) #Delay de 1 segundo
print("LED APAGADOn") #Escreve na Saída e realiza quebra de linha
GPIO.output(LED_GPIO, 0) #Coloca o pino em nível alto, e apaga Led
time.sleep(1)
31. Dia 2 – Python e Sistema Embarcado
Exemplo BlinkLed em Python
LinkIt Smart7688 e Smart7688 Duo:
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
import mraa #para acesso as GPIO
import time #para fazermos função de sleep na execução do processo
## Neste exemplo o pino 44 está mapeado para o LED do Wi-Fi na placa
pin = mraa.Gpio(44)
pin.dir(mraa.DIR_OUT) # Seta o direcionamento como saída
while True:
pin.write(1)
time.sleep(1)
pin.write(0)
time.sleep(1)