As placas que estou usando atualmente (a Franzininho WiFi e a Raspberry Pi Pico) possuem suporte tanto do MicroPython como do CircuitPython. O que são estes dois ambientes e o que tem de igual e diferente entre eles?
MicroPython
O MicroPython surgiu em 2013, na forma de uma campanha de Damien P. George no KickStarter. O objetivo era gerar uma versão otimizada do Python que pudesse ser executada diretamente em um microcontrolador. A versão atual está disponível no site oficial e os fontes estão no github.
O MicroPython implementa grande parte da linguagem e bibliotecas do Python 3 e acrescenta recursos específicos para microcontroladores. Um dos recursos do MicroPython é a operação interativa através de uma comunicação serial (a REPL read–eval–print loop ou seja você digita um comando ele executa, imprime o resultado e volta a esperar outro comando). Tipicamente você usa o MicroPython através de uma IDE que saiba conversar com a REPL, como o Thonny.
No MicroPython o acesso aos recursos específicos do microcontrolador é feito através de um módulo chamado machine. A Raspberry Pi Foundation fornece suporte ao MicroPython desde o lançamento da PiPico, incluindo um módulo machine específico (com suporte ao PIO), documentação e exemplos.
O exemplo abaixo pisca um LED na PiPico:
import machine import utime led_onboard = machine.Pin(25, machine.Pin.OUT) while True: led_onboard.value(1) utime.sleep(5) led_onboard.value(0) utime.sleep(5)
CircuitPython
O CircuitPython é um fork do MicroPython, patrocinado pela Adafruit. A maior parte do código é idêntica, a versão atual está disponível no site oficial e os fontes estão no github.
Uma lista das diferenças pode ser vista no README, vou me concentrar no que considero mais importante:
- O CircuitPython usa a USB nativa das placas para implementar uma unidade de disco. Para executar um programa basta gravá-lo neste disco com um nome especial.
- A interface com os recursos do microcontrolador é diferente. No lugar do módulo machine temos vários outros, procurando oferecer uma interface universal (porém os nomes do pinos variam conforme a placa).
- Não suporta execução concorrente (interrupções e threading).
import board import digitalio import time led = digitalio.DigitalInOut(board.LED) led.direction = digitalio.Direction.OUTPUT while True: led.value = True time.sleep(0.5) led.value = False time.sleep(0.5)
Nenhum comentário:
Postar um comentário