Hierbei handelt es sich um das MicroPython-Projekt, dessen Ziel es ist, eine Implementierung von Python 3.x auf Mikrocontrollern und kleinen eingebetteten Systemen bereitzustellen. Die offizielle Website finden Sie unter micropython.org.
ACHTUNG: Dieses Projekt befindet sich im Beta-Stadium und unterliegt Änderungen der Codebasis, einschließlich projektweiter Namensänderungen und API-Änderungen.
MicroPython implementiert die gesamte Python 3.4-Syntax (einschließlich Ausnahmen, with
, yield from
usw. und zusätzlich die Schlüsselwörter async
/ await
aus Python 3.5 und einige ausgewählte Funktionen aus späteren Versionen). Die folgenden Kerndatentypen werden bereitgestellt: str
(einschließlich grundlegender Unicode-Unterstützung), bytes
, bytearray
, tuple
, list
, dict
, set
, frozenset
, array.array
, collections.namedtuple
, Klassen und Instanzen. Zu den integrierten Modulen gehören os
, sys
, time
, re
und struct
usw. Einige Ports unterstützen _thread
Modul (Multithreading), socket
und ssl
für Netzwerke sowie asyncio
. Beachten Sie, dass für die Datentypen und Module nur ein Teil der Python 3-Funktionalität implementiert ist.
MicroPython kann Skripte in Textquellform (.py-Dateien) oder aus vorkompiliertem Bytecode (.mpy-Dateien) ausführen, in beiden Fällen entweder aus einem Dateisystem auf dem Gerät oder „eingefroren“ in der ausführbaren MicroPython-Datei.
MicroPython bietet außerdem eine Reihe von MicroPython-spezifischen Modulen für den Zugriff auf hardwarespezifische Funktionen und Peripheriegeräte wie GPIO, Timer, ADC, DAC, PWM, SPI, I2C, CAN, Bluetooth und USB.
Die API-Referenz und Informationen zur Verwendung von MicroPython sowie Informationen zur Implementierung finden Sie in der Online-Dokumentation.
Wir nutzen GitHub Discussions als Forum und Discord für den Chat. Dies sind großartige Orte, um der Community Fragen und Ratschläge zu stellen oder Ihre MicroPython-basierten Projekte zu besprechen.
Bei Fehlern und Funktionswünschen melden Sie bitte ein Problem und befolgen Sie die dortigen Vorlagen.
Informationen zum MicroPython-Pyboard, dem offiziell unterstützten Board der ursprünglichen Kickstarter-Kampagne, finden Sie in den Schaltplänen, Pinbelegungen und der Dokumentation.
MicroPython ist ein Open-Source-Projekt und freut sich über Beiträge. Um produktiv zu sein, befolgen Sie bitte unbedingt die Richtlinien für Mitwirkende und die Kodexkonventionen. Beachten Sie, dass MicroPython unter der MIT-Lizenz lizenziert ist und alle Beiträge dieser Lizenz folgen sollten.
Dieses Repository enthält die folgenden Komponenten:
py/ – die Kernimplementierung von Python, einschließlich Compiler, Laufzeit und Kernbibliothek.
mpy-cross/ – der MicroPython-Cross-Compiler, der verwendet wird, um Skripte in vorkompilierten Bytecode umzuwandeln.
ports/ – plattformspezifischer Code für die verschiedenen Ports und Architekturen, auf denen MicroPython läuft.
lib/ – Submodule für externe Abhängigkeiten.
Tests/ – Test-Framework und Testskripte.
docs/ – Benutzerdokumentation im Sphinx reStructuredText-Format. Daraus wird die Online-Dokumentation erstellt.
extmod/ – zusätzliche (nicht zum Kern gehörende) Module, die in C implementiert sind.
tools/ – verschiedene Tools, einschließlich des Moduls pyboard.py.
examples/ – ein paar Beispiel-Python-Skripte.
„make“ wird zum Erstellen der Komponenten verwendet, oder „gmake“ auf BSD-basierten Systemen. Sie benötigen außerdem Bash, GCC und Python 3.3+, die als Befehl python3
verfügbar sind (wenn Ihr System nur Python 2.7 hat, rufen Sie make mit der zusätzlichen Option PYTHON=python2
auf). Einige Ports (rp2 und esp32) nutzen zusätzlich CMake.
MicroPython läuft auf einer Vielzahl von Mikrocontrollern sowie auf Unix-ähnlichen (einschließlich Linux, BSD, macOS, WSL) und Windows-Systemen.
Mikrocontroller-Ziele können bis zu 256 KB Flash + 16 KB RAM klein sein, obwohl Geräte mit mindestens 512 KB Flash + 128 KB RAM ein viel umfassenderes Erlebnis ermöglichen.
Die Unix- und Windows-Ports ermöglichen sowohl die Entwicklung als auch das Testen von MicroPython selbst und bieten eine leichtgewichtige Alternative zu CPython auf diesen Plattformen (insbesondere auf eingebetteten Linux-Systemen).
Der „minimale“ Port stellt ein Beispiel für einen sehr einfachen MicroPython-Port dar und kann sowohl als eigenständige Linux-Binärdatei als auch für ARM Cortex M4 kompiliert werden. Beginnen Sie damit, wenn Sie MicroPython auf einen anderen Mikrocontroller portieren möchten. Darüber hinaus ist der „Bare-Arm“-Port ein Beispiel für die absolute Minimalkonfiguration und wird verwendet, um die Codegröße der Kernlaufzeit und der VM zu verfolgen.
Darüber hinaus werden in diesem Repository folgende Ports bereitgestellt:
cc3200 – Texas Instruments CC3200 (einschließlich PyCom WiPy).
esp32 – Espressif ESP32 SoC (einschließlich ESP32S2, ESP32S3, ESP32C3, ESP32C6).
esp8266 – Espressif ESP8266 SoC.
mimxrt – NXP m.iMX RT (einschließlich Teensy 4.x).
nrf – Nordic Semiconductor nRF51 und nRF52.
pic16bit – Mikrochip-PIC 16-Bit.
powerpc – IBM PowerPC (einschließlich Microwatt)
qemu – QEMU-basiertes emuliertes Ziel (zum Testen)
renesas-ra – Renesas RA-Familie.
rp2 – Raspberry Pi RP2040 (einschließlich Pico und Pico W).
samd – Microchip (ehemals Atmel) SAMD21 und SAMD51.
stm32 – STMicroelectronics STM32-Familie (einschließlich F0, F4, F7, G0, G4, H7, L0, L4, WB)
webassembly – Emscripten-Port für Browser und NodeJS.
zephyr – Zephyr RTOS.
Bei den meisten Ports muss zuerst der MicroPython-Cross-Compiler erstellt werden. Dieses Programm namens mpy-cross wird zum Vorkompilieren von Python-Skripten in .mpy-Dateien verwendet, die dann in die Firmware/ausführbare Datei für einen Port eingebunden (eingefroren) werden können. Um mpy-cross zu erstellen, verwenden Sie:
$ cd mpy-cross $ make
Die zentrale MicroPython-VM und -Laufzeit weist keine externen Abhängigkeiten auf, ein bestimmter Port kann jedoch von Treibern von Drittanbietern oder Anbieter-HALs abhängen. Dieses Repository enthält mehrere Submodule, die auf diese externen Abhängigkeiten verweisen. Bevor Sie einen bestimmten Port kompilieren, verwenden Sie
$ cd ports/name $ make submodules
um sicherzustellen, dass alle erforderlichen Submodule initialisiert werden.