MicroPython: Python para microcontrolador

MicroPython

 Apresentação

A MicroPython (conhecida também como Pyboard) é uma implementação da linguagem de programação Python 3 otimizada para operar em microcontrolador. A Pyboard é uma pequena placa de circuito impresso que executa a aplicação em bare metal. Além disso, entrega ao usuário um sistema de operação Python em baixo nível, o qual pode ser usado para controlar todos os tipos de projetos eletrônicos.

A Pyboard obteve sucesso graças à parceria com a Kickstarter (um tipo de companhia que ajuda empresas em início de suas operações, profissionais, artistas, entre outros, a captar recursos para seus projetos), cujo idealizador deste projeto é o pesquisador pós-doutor associado da Universidade de Cambridge, Damien P. George (perfil no LinkedIn).

O software é disponível ao publico sob a licença de código aberto (Open Source) do MIT.

O site: micropython.org

 

Motivação

A motivação que levou a criar este artigo é divulgar essa ferramenta potente que implementa uma linguagem de alto nível como o Python 3 em sistemas embarcados, criando os mais variados projetos com pouquíssimo esforço, pois não necessita de uma IDE específica para edição. Dispõe de um hardware bem robusto e uma biblioteca de abstração de camada (HAL) disponível e aplicação, a qual será apresentada logo mais.    

 

Pyboard (MicroPython)

A Pyboard é composta por: STM32F405RG (microcontrolador ARM Cortex-M4 com Unidade de Ponto Flutuante - FPU), acelerômetro da NXP de três eixos, o MMA7660FC, também conta com com um regulador LDO MCP1802 da Microchip para alimentação do circuito, slot para cartão de memória Flash microSD (opção para fazer o boot ao invés da memória Flash do microcontrolador), duas chaves Tact Switch (uma para aplicação e outra para Reset) e também quatro LEDs (vermelho, verde, amarelo e azul) para propósito geral e para indicação do status da Pyboard quando faz o “boot”. A seguir a Pyboard:

MicroPython: Pyboard
Figura 1 - Pyboard.

 

Como podemos ver na figura 1, a Pyboard dispõe de todos os GPIOs para acesso (furos na PCI), logo o mapa de todos eles poderão ser vistos na figura 2. Além disso, o esquema eletrônico/layout da placa e as dimensões são abertos para visualização. A placa também oferece alguns outros periféricos que podem ser agregados a ela, como por exemplo: um módulo LCD com teclas capsense, módulo de áudio e também módulo Bluetooth. Todos possuem biblioteca para se fazer as aplicações.

 

MicroPython: Mapa_Pinos_Pyboard
Figura 2 - Mapa de pinos.

 

 

Funcionamento

A Pyboard possui um compilador e uma Máquina Virtual (Virtual Machine) embutidos. Este sistema foi concebido através do desenvolvimento do firmware (em C) o qual já é gravado no microcontrolador STM32F405RG desde a montagem da PCI. O objetivo desse sistema é traduzir os Scripts Python (compilador) e executar os Bytecodes (Máquina Virtual). Deste modo, executando a aplicação que foi escrita na “main.py”. É válido lembrar que uma vez compilada a aplicação e gerado o bytecode, não mais será necessário compilar em um “reboot” da placa. Esse bytecode sempre será executado, a não ser que a aplicação mude. Para mais detalhes do funcionamento do compilador e máquina virtual Python, leia o artigo deste link disposto no portal PythonBrasil.

 

Em poucas palavras, basta editar o arquivo “main.py” contido na placa (poderá ser editado após a instalação automática do driver da Pyboard), fazer “reboot” da placa e esperar que a aplicação funcione, simples assim! Desde que não haja erros de sintaxe e lógica (situação sinalizada pelo LED vermelho que ficará aceso).

 

O firmware citado, além de conter o compilador e a M.V., também possui as bibliotecas padrão Python, as específicas MicroPython, além das de propósito da placa, ou seja, de configuração e utilização dos periféricos: GPIO, ADC, DAC, RTC, controle da placa, LEDs, controle de servo motor, acelerômetro, interrupções externas, TIMERs, PWM, UART, SPI e I2C. Todas elas podem ser acessadas por meio do comando: from pyb import gpio, por exemplo, apenas modificando a última palavra para se fazer o uso do periférico desejado. Todo o código elaborado para este projeto, além de suas versões, documentações e atuais trabalhos, estão contidos no GitHub e podem ser acessados neste link.    

 

 

Rodando o primeiro Script

Antes de escrevermos nosso primeiro script, devemos conectar nossa placa ao PC para que o driver seja automaticamente instalado. Assim, com um cabo mini USB faça isso. Se tudo ocorrer como desejado, a Pyboard poderá ser vista conforme a figura 3:

MicroPython: Driver_Pyboard
Figura 3 - driver instalado.

 

Vemos que a placa é identificada pelo sistema operacional pela unidade “PYBFLASH(F:)”, cujos conteúdos podemos verificar à direita: “boot”, “main”, “pybcdc” e “README”. O hardware que será utilizado para o script será, logicamente, a Pyboard da figura 1 e também faremos o uso do módulo LCD. Este possui duas opções de alojamento na Pyboard, ou seja, na figura 2 observa-se dois termos: “X-Skin” e “Y-Skin”. Assim escolheremos a disposição “X” (figura 4). Para mais detalhes sobre conexão entre a placa e o módulo, além de dicas de soldagem da barra de pinos do LCD, veja este vídeo.    

MicroPython: Pyboard e módulo LCD
Figura 4 - Módulo LCD e Pyboard.

 

 

Script

Para o primeiro script, faremos um “blink LED” fazendo-se o uso de todos os LEDs da placa e também do LCD. Assim, o usuário poderá copiar o arquivo “main.py” para o PC e abrir o arquivo com o Notepad ou, com este software, criar a “main.py” e substituir na Pyboard quando estiver pronto. Faremos a escolha da primeira opção, assim proceda da seguinte forma:  

1) Depois de conectado o módulo LCD na Pyboard conforme a figura 4, conecte a placa no PC através de um cabo USB;

2) Conectada a placa, esta será reconhecida como unidade “PYFLASH (X:)”, caso contrário, o driver será automaticamente instalado;

3) Copie o arquivo “main.py” (figura 3) da placa para um diretório desejado;

4) Abra o Notepad ou algum software editor de texto de preferência e carregue o arquivo main;

5) Feito isto, o conteúdo do arquivo é somente o seguinte comentário:   # main.py -- put your code here!

6) Assim, insira o seguinte código no arquivo main;

# main.py -- put your code here!
import pyb

# Cria o objeto "lcd" cuja posição é a "X"
lcd = pyb.LCD('X')

# Opção para acender o "backlight". Deixaremos apagado!
# lcd.light(True)

# Cria os objetos "ledx" referentes a cada LED
led1 = pyb.LED(1)
led2 = pyb.LED(2)
led3 = pyb.LED(3)
led4 = pyb.LED(4)

# Definição do posicionamento dos caracteres para colunas e linhas
_1a_linha = 0
_2a_linha = 8
_3a_linha = 16
_4a_linha = 24

_1a_coluna  = 0
_2a_coluna  = 8
_3a_coluna  = 16
_4a_coluna  = 24
_5a_coluna  = 32
_6a_coluna  = 40
_7a_coluna  = 48
_8a_coluna  = 56
_9a_coluna  = 64
_10a_coluna = 72

# Lista com as quatro strings dos LEDs
list_LEDs = ["LED1 - ON", "LED2 - ON", "LED3 - ON", "LED4 - ON"]

# Função que alterna o acendimento dos LEDs
def func_show_LEDs(LED):
    if   LED == 0:
        led1.toggle()
    elif LED == 1:
        led1.toggle()
        led2.toggle()
    elif LED == 2:
        led2.toggle()
        led3.toggle()
    elif LED == 3:
        led3.toggle()
        led4.toggle()
    else:
        func_LEDs_OFF()

# Função que desliga os LEDs
def func_LEDs_OFF():
    led1.off()
    led2.off()
    led3.off()
    led4.off()

    lcd.fill(0)
    lcd.text("LEDs OFF!", _5a_coluna, _2a_linha, 1)
    lcd.show()
    pyb.delay(2000)

# Função de inicialização da Pyaboard
def ini_board():
    lcd.fill(0)
    lcd.text("Embarcados"   , _4a_coluna, _1a_linha, 1)
    lcd.text("apresenta:"   , _4a_coluna, _2a_linha, 1)
    lcd.text("Python no uC" , _3a_coluna, _4a_linha, 1)
    lcd.show()
    pyb.delay(5000)

ini_board()

while True:
        
    for i in range(0, len(list_LEDs)):
        lcd.fill(0)
        lcd.text(list_LEDs[i], 0, 1, 1)
        lcd.show()
        func_show_LEDs(i)
        pyb.delay(1000)

    func_LEDs_OFF()

7) Para verificar a sintaxe e também possíveis erros de lógica, pode-se fazer o uso da ferramenta on-line de ambiente interativo, o repl (faça apenas o uso do repl para análise do código Python sem considerar a importação das libs da Pyboard, pois  o repl desconhecerá caso houver essa importação);

8) Logo, salve o arquivo e substitua o arquivo main na Pyboard, ou seja, na unidade PYFLASH;

9) Pressione o botão “RST” da placa para refazer o “boot” e aguarde para aplicação funcionar;

10) Se não houve nenhuma falha no código, o LED "verde" irá piscar uma vez rapidamente e o resultado poderá ser visto a seguir:

11) Se houve alguma falha no código, os LEDs "vemelho" e "verde" piscarão alternadamente três vezes (de forma rápida) e, em seguida, apagarão sem o código rodar.

 

Pyboard ao vivo!

No site da placa, há um recurso disponível para aqueles que ainda não possuem sua plataforma e desejam fazer alguma programação para verificar o funcionamento, mesmo que seja algo simples. Pensando nisso, o professor Damien planejou um sistema o qual conecta a Micro Python à internet aliada a alguns periféricos. Assim na própria página, foi feita uma ferramenta interativa on-line a qual dispõe de projetos exemplos e também possibilita que o usuário faça a sua. O programador pode ver sua aplicação funcionar ao vivo através de uma câmera, além disso, este recurso é disponível por 24 horas e 7 dias da semana, ou seja, não pára!

 

Como o hardware é único, esse sistema possui o recurso de "queue", o qual coloca na fila sua aplicação para ser executada. Veja o link Pyboard ao vivo!

 

 

Conclusão

 

Vimos que a Pyboard tem muito a oferecer com pouco esforço, pois somente com um editor padrão de um sistema operacional é possível fazer um projeto eletrônico que satisfaça o objetivo do projetista. Além disso, é uma oportunidade para profissionais que trabalham somente com programação e desejam iniciar com sistemas embarcados, possam agora satisfazer esse desejo somente com os conhecimentos que já possuem. 

 

O ponto alto desta plataforma é a independência de IDE e compiladores, pois como dito, o compilador está embutido, assim o desenvolvedor pode carregar sua plataforma para qualquer lugar que deseja desenvolver com o mínimo de desempenho que um PC pode oferecer, já que, este necessita somente um editor para escrever o código Python.

 

 

Agradecimentos

Gostaria de agradecer o professor da Universidade de Cambdrige, Damien P. George por esclarecer todas as dúvidas e, além disso, por fornecer a Pyboard e o módulo LCD sem nenhum custo! Muito obrigado professor Damien!

 

 

Thanks

I would like to thank the professor of University of Cambridge, Damien P. George for explaining me every doubts and share your knowledge with me, futhermore, for sending me the Pyboard and LCD module without charge! Thank you very much professor Damien!

 

Saiba mais

Primeiros passos com MicroPython no ESP8266

Programe a BBC micro:bit com MicroPython - Hello World!

 

Referências 

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

25
Deixe um comentário

avatar
 
8 Comment threads
17 Thread replies
2 Followers
 
Most reacted comment
Hottest comment thread
9 Comment authors
Eder AndradeLenio RodriguesDJAMES SUHANKOJoel SouzaCleiton Bueno Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Lenio Rodrigues
Visitante
Lenio

Bom Eder !
Sou usuário Linux...funciona no linuxx ?
Att.:
Lenio

Eder Andrade
Visitante
Eder Andrade

Micropython é para sistemas com limitações de memória Flash, RAM e performance, como microcontroladores (por isso "Micro"python). Em sistemas operacionais como o Linux, você mesmo pode usar esse SO para roda App em Python da forma que você quiser!

Flavio Nunes
Visitante
Flavio Nunes

Excelente artigo.
Alguém tem ideia quando terá no Brasil à venda?

Eder Andrade
Visitante
Eder

Olá Flávio.

Não há nenhum representante da Pyboard no Brasil, pelo menos por enquanto, mas você pode comprá-la pelo site sem problemas.

Sugiro você acompanhar a MicroPython pelas redes sociais, principalmente, pelo twitter para saber novidades.

Eder.

DJAMES SUHANKO
Visitante

Eu compilei um firmware MicroPython pro ESP866, mas o suporte é de dar dó, apesar de ter sido uma experiência deliciosa. Vi que fizeram um kickstart pra portar com suporte total ao ESP8266, espero que saia o quanto antes por NodeMCU e Lua não me deixa nada feliz.

Joel Souza
Visitante
Joel Inacio

Sou fascinado por essa plaquinha, ainda não tive oportunidade de comprar, mas dá pra
"usá-la" no site. Tem no site uma pyboard ligada a um display, servo e painel de leds onde vc programa. Uma webcam te mostra o programa rodando em tempo real.

Eder Andrade
Visitante
Eder

Sim Joel!

O link está no artigo (tópico "Pyboard ao vivo!") para conferir esta possibilidade de uso para quem ainda não possui!

Eder.

Cleiton Bueno
Visitante

Excelente abordagem ao microPython Eder! Parabéns pelo artigo.

Eder Andrade
Visitante
Eder

Obrigado Cleiton! Bacana que você tenha gostado 🙂

Victor Loureiro Nogueira
Visitante
Victor Loureiro Nogueira

Olá,

Meu nome é Victor e sou bem leigo na área de programação.

Eu tenho 11 euqlizadores de som que usam o PIC18LF6621, sendo que desses 11 apenas um esta funcionando.

É possivel extrair o programa desse que esta funcionando e copia-lo para os novos que irei comprar?
Existe algum outro pic que possa ser usado no local com a mesma programação?

obrigado.

Cleiton Bueno
Visitante

Victor, recomendo você postar sua duvida no Forum (http://embarcados.com.br/forum/) assim varias pessoas podem ajudar.

Abraço.

Eder Andrade
Visitante
Eder

Sim, o forum também um bom caminho, pois existem muitos especialistas.
Valeu Cleiton!

Eder Andrade
Visitante
Eder

Olá Victor. Apesar da sua dúvida não ser condizente ao contexto, mas vamos ver se eu consigo te ajudar... 1º) Se dos 11 equalizadores que você possui, somente 1 esteja funcionando, isto quer dizer que o firmware contido atende os requisitos. Talvez o que esteja prejudicando o funcionamento dos outros 10 seja algum problema no hardware ou alguma interferência eletro-magnética, seria bom alguém com mais experiência te ajudar a averiguar; 2º) Por que você quer exportar este firmware para outro microcontrolador? Somente por causa deste problema? Se sim, siga as dicas acima, talvez o problema seja algo menos complexo que… Leia mais »

Rinaldo Câmara Gonçalves
Visitante

Eder, muito bom, o seu artigo.
Perguntas:
Como é o processo de degub, é possível incluir breakpoint ou é na base o printf?
Existe a M.V. para outros microcontroladores? Se eu quiser fazer a minha M.V. quais os passos?

Grato.

Cleiton Bueno
Visitante

É um ponto interessante este Eder, o hardware em questão tendo suporte de breakpoint já é um grande fator, Python possui o pygdb mas acho que não esta incluso visto minimizar o footprint da VM.
O problema que vejo é mesmo usando JIT, seria como ter acesso a Stack da VM para depuração e não ter problemas com o GC nesses pontos.
Imagino eu que bacana ter uma Stack para aplicação, algo semelhante a um RTOS e a Stack de cada tarefa.
Mas é algo bem interessante de descobrir em Eder!

Abraço.

Eder Andrade
Visitante
Eder

Cleiton, breakpoint "no way", mas debug passo-a-passo rola cara! Dá uma olhada na resposta acima! Lá tem um link do projeto no Github para se fazer a implementação do MicroPython em qualquer uC.

Cheer,
Eder.

Cleiton Bueno
Visitante

Entendi. É que neste acesso, temos acesso ao REPL do MicroPython, e como o Rinaldo disse ae serial uma especie de Debug com print.

Eu não diria ser um debug neste modo, lembrando que estou comparando o modo Debug como algo semelhante ao GDB, poder inserir breakpoints e inspecionar a pilha do objeto e demais.

Acho que ferramenta para Debug mesmo sem ser os print no terminal iterativo não existe no MicroPython ainda, ou cometi um equivoco e não achei no site do projeto.

Abraço.

Eder Andrade
Visitante
Eder

Vamos lá... Breakpoint no MicroPython não existe de fato! Talvez isso seja implementado, mas por enquanto não se tem notícias! Se for compararmos com o debugger que o mercado oferece hoje seja para ARM ou qualquer outra arquitetura, de fato este REPL do MicroPython não é um debugger, mas é uma interface (concebida através de um HyperTerminal) a qual você pode executar comando por comando o código na sua Pyboard, ok? Como eu demonstrei acima no print. Assim sendo, se considerarmos esse processo de execução de código linha por linha a fim de verificar os dados, a execução dos comandos… Leia mais »

Cleiton Bueno
Visitante

Entendi.
É que eu diria ser um prompt para o interpretador da VM, como é tipico ao digitar python em um terminal Linux.

Mas entendi o raciocínio 😉

Abraço.

Eder Andrade
Visitante
Eder

Sim, é mais ou menos isso... Você digita os comandos e eles são interpretados e depois executados 😉

Eder Andrade
Visitante
Eder

E aí Rinaldo, beleza? Pô cara, muito obrigado! Que bom que tenha gostado! Fico contente! Vamos lá... 1º) O processo de debug existe e é do tipo passo-a-passo. Mas para você usufruir deste recurso é necessário que você faça a instalação do driver de comunicação da Pyboard. Este processo é muito simples e pode ser conferido neste link: http://micropython.org/resources/Micro-Python-Windows-setup.pdf 2 º) Depois de instalado o driver, a Pyboard poderá ser identificada em "Portas (COM e LPT)" no S.O. como: "Pyboard USB Comm Port (COMx), cujo "X" será nomeado pelo S.O.; Feito isto, é necessário que você tenha um software do… Leia mais »

Eder Andrade
Visitante
Eder

Assim Rinaldo, os 4 LEDs se acenderão!

Rinaldo Câmara Gonçalves
Visitante

Obrigado pela respostas!

Jonnes Nascimento
Visitante
Jonnes Nascimento

Bom dia, boa tarde, boa noite!
Alguém sabe informar se encontro a MicroPython à venda no Brasil?

Eder Andrade
Visitante
Eder

Olá Jonnes.

Ainda não, somente compra no portal micropython.org diretamente da Inglaterra.