mirror of
https://github.com/micropython/micropython.git
synced 2026-05-01 13:20:14 +02:00
4625f97d09
JavaScript code lint and formatting with Biome / eslint (push) Has been cancelled
Check code formatting / code-formatting (push) Has been cancelled
Check spelling with codespell / codespell (push) Has been cancelled
Build docs / build (push) Has been cancelled
Check examples / embedding (push) Has been cancelled
Package mpremote / build (push) Has been cancelled
.mpy file format and tools / test (push) Has been cancelled
Build ports metadata / build (push) Has been cancelled
alif port / build_alif (alif_ae3_build) (push) Has been cancelled
cc3200 port / build (push) Has been cancelled
esp32 port / build_idf (esp32_build_c2_c5_c6) (push) Has been cancelled
esp32 port / build_idf (esp32_build_cmod_spiram_s2) (push) Has been cancelled
esp32 port / build_idf (esp32_build_p4) (push) Has been cancelled
esp32 port / build_idf (esp32_build_s3_c3) (push) Has been cancelled
esp8266 port / build (push) Has been cancelled
mimxrt port / build (push) Has been cancelled
nrf port / build (push) Has been cancelled
powerpc port / build (push) Has been cancelled
qemu port / build_and_test_arm (bigendian) (push) Has been cancelled
qemu port / build_and_test_arm (sabrelite) (push) Has been cancelled
qemu port / build_and_test_arm (thumb_hardfp) (push) Has been cancelled
qemu port / build_and_test_arm (thumb_softfp) (push) Has been cancelled
qemu port / build_and_test_rv32 (push) Has been cancelled
qemu port / build_and_test_rv64 (push) Has been cancelled
renesas-ra port / build_renesas_ra_board (push) Has been cancelled
rp2 port / build (push) Has been cancelled
samd port / build (push) Has been cancelled
stm32 port / build_stm32 (stm32_misc_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_nucleo_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_pyb_build) (push) Has been cancelled
unix port / minimal (push) Has been cancelled
unix port / reproducible (push) Has been cancelled
unix port / standard (push) Has been cancelled
unix port / standard_v2 (push) Has been cancelled
unix port / coverage (push) Has been cancelled
unix port / coverage_32bit (push) Has been cancelled
unix port / nanbox (push) Has been cancelled
unix port / longlong (push) Has been cancelled
unix port / float (push) Has been cancelled
unix port / gil_enabled (push) Has been cancelled
unix port / stackless_clang (push) Has been cancelled
unix port / float_clang (push) Has been cancelled
unix port / settrace_stackless (push) Has been cancelled
unix port / repr_b (push) Has been cancelled
unix port / macos (push) Has been cancelled
unix port / qemu_mips (push) Has been cancelled
unix port / qemu_arm (push) Has been cancelled
unix port / qemu_riscv64 (push) Has been cancelled
unix port / sanitize_address (push) Has been cancelled
unix port / sanitize_undefined (push) Has been cancelled
webassembly port / build (push) Has been cancelled
windows port / build-vs (Debug, true, x64, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Debug, true, x86, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Debug, x64, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Debug, x86, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, true, x64, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, true, x64, dev, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, true, x64, standard, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, true, x64, standard, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, true, x86, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, true, x86, dev, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, true, x86, standard, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, true, x86, standard, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x64, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, dev) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, standard) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, dev) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, standard) (push) Has been cancelled
windows port / cross-build-on-linux (push) Has been cancelled
zephyr port / build (push) Has been cancelled
Python code lint and formatting with ruff / ruff (push) Has been cancelled
This commit adds a section to the top-level README describing MicroPython's general design philosophy and core values. Thanks to @projectgus who suggested I add this. Signed-off-by: Damien George <damien@micropython.org>
228 lines
14 KiB
Markdown
228 lines
14 KiB
Markdown
[](https://github.com/micropython/micropython/actions?query=branch%3Amaster+event%3Apush) [](https://github.com/micropython/micropython/actions?query=branch%3Amaster+event%3Apush) [](https://docs.micropython.org/) [](https://codecov.io/gh/micropython/micropython)
|
|
|
|
The MicroPython project
|
|
=======================
|
|
<p align="center">
|
|
<img src="https://raw.githubusercontent.com/micropython/micropython/master/logo/upython-with-micro.jpg" alt="MicroPython Logo"/>
|
|
</p>
|
|
|
|
This is the MicroPython project, an implementation of Python 3.x for
|
|
microcontrollers, embedded systems and other constrained platforms.
|
|
You can find the official website at [micropython.org](http://www.micropython.org).
|
|
|
|
MicroPython implements the entire Python 3.4 syntax (including exceptions,
|
|
`with`, `yield from`, etc., and additionally `async`/`await` keywords from
|
|
Python 3.5 and some select features from later versions). The following core
|
|
datatypes are provided: `str`(including basic Unicode support), `bytes`,
|
|
`bytearray`, `tuple`, `list`, `dict`, `set`, `frozenset`, `array.array`,
|
|
`collections.namedtuple`, classes and instances. Builtin modules include
|
|
`os`, `sys`, `time`, `re`, and `struct`, etc. Some ports have support for
|
|
`_thread` module (multithreading), `socket` and `ssl` for networking, and
|
|
`asyncio`. Note that only a subset of Python 3 functionality is implemented
|
|
for the data types and modules.
|
|
|
|
MicroPython can execute scripts in textual source form (.py files) or from
|
|
precompiled bytecode (.mpy files), in both cases either from an on-device
|
|
filesystem or "frozen" into the MicroPython executable.
|
|
|
|
MicroPython also provides a set of MicroPython-specific modules to access
|
|
hardware-specific functionality and peripherals such as GPIO, Timers, ADC,
|
|
DAC, PWM, SPI, I2C, CAN, Bluetooth, and USB.
|
|
|
|
Getting started
|
|
---------------
|
|
|
|
See the [online documentation](https://docs.micropython.org/) for the API
|
|
reference and information about using MicroPython and information about how
|
|
it is implemented.
|
|
|
|
We use [GitHub Discussions](https://github.com/micropython/micropython/discussions)
|
|
as our forum, and [Discord](https://discord.gg/RB8HZSAExQ) for chat. These
|
|
are great places to ask questions and advice from the community or to discuss your
|
|
MicroPython-based projects.
|
|
|
|
For bugs and feature requests, please [raise an issue](https://github.com/micropython/micropython/issues/new/choose)
|
|
and follow the templates there.
|
|
|
|
For information about the [MicroPython pyboard](https://store.micropython.org/pyb-features),
|
|
the officially supported board from the
|
|
[original Kickstarter campaign](https://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers),
|
|
see the [schematics and pinouts](http://github.com/micropython/pyboard) and
|
|
[documentation](https://docs.micropython.org/en/latest/pyboard/quickref.html).
|
|
|
|
MicroPython design values
|
|
-------------------------
|
|
|
|
"Perfection is achieved, not when there is nothing more to add, but when there
|
|
is nothing left to take away." ―- Antoine de Saint-Exupéry.
|
|
|
|
For its design and implementation, MicroPython aims to follow a set of values.
|
|
Although not a strict set of rules, these values and principles serve as a
|
|
useful guide for new and seasoned contributors, as well as maintainers.
|
|
|
|
MicroPython is at heart a combination of "Micro" and "Python": it's about
|
|
resource constrained systems running the Python programming language. Both of
|
|
these concepts balance off against each other in all parts of MicroPython's
|
|
design and implementation.
|
|
|
|
The key concepts that focus the development of MicroPython are:
|
|
- Minimalism: do lots with little.
|
|
- Efficiency: engineering, build, execution, storage, power consumption.
|
|
- Consistency: the whole system feels like it was designed at once.
|
|
|
|
When using MicroPython, the Python language is used as the human interface to a
|
|
system, giving fine control over the entities attached to that system.
|
|
In a hardware setting, MicroPython aims to give the user a bare-metal feeling:
|
|
one should feel like they have complete control over the system, with very
|
|
little between the programmer and the physical world.
|
|
|
|
MicroPython recognises that systems can be very complex. The existing Python
|
|
libraries in combination with the MicroPython-specific libraries provide a
|
|
user-friendly way to harness the complexity of a system.
|
|
|
|
Python language compatibility is very important to MicroPython, and at first
|
|
glance MicroPython should look just like regular Python. In the first instance,
|
|
most Python scripts should run unchanged on MicroPython, even on devices with very
|
|
tight resources. Beyond that, there are ways to extend MicroPython if needed to
|
|
better match Python. The provided built-in modules are an efficient subset of
|
|
the corresponding Python ones, without duplication of functionality, and allow
|
|
extension in Python if needed.
|
|
|
|
Contributing
|
|
------------
|
|
|
|
MicroPython is an open-source project and welcomes contributions. To be
|
|
productive, please be sure to follow the
|
|
[Contributors' Guidelines](https://github.com/micropython/micropython/wiki/ContributorGuidelines)
|
|
and the [Code Conventions](https://github.com/micropython/micropython/blob/master/CODECONVENTIONS.md).
|
|
Note that MicroPython is licenced under the MIT license, and all contributions
|
|
should follow this license.
|
|
|
|
About this repository
|
|
---------------------
|
|
|
|
This repository contains the following components:
|
|
- [py/](py/) -- the core Python implementation, including compiler, runtime, and
|
|
core library.
|
|
- [mpy-cross/](mpy-cross/) -- the MicroPython cross-compiler which is used to turn scripts
|
|
into precompiled bytecode.
|
|
- [ports/](ports/) -- platform-specific code for the various ports and architectures that MicroPython runs on.
|
|
- [lib/](lib/) -- submodules for external dependencies.
|
|
- [tests/](tests/) -- test framework and test scripts.
|
|
- [docs/](docs/) -- user documentation in Sphinx reStructuredText format. This is used to generate the [online documentation](http://docs.micropython.org).
|
|
- [extmod/](extmod/) -- additional (non-core) modules implemented in C.
|
|
- [tools/](tools/) -- various tools, including the pyboard.py module.
|
|
- [examples/](examples/) -- a few example Python scripts.
|
|
|
|
"make" is used to build the components, or "gmake" on BSD-based systems.
|
|
You will also need bash, gcc, and Python 3.3+ available as the command `python3`.
|
|
Some ports (rp2 and esp32) additionally use CMake.
|
|
|
|
Supported platforms & architectures
|
|
-----------------------------------
|
|
|
|
MicroPython runs on a wide range of microcontrollers, as well as on Unix-like
|
|
(including Linux, BSD, macOS, WSL) and Windows systems.
|
|
|
|
Microcontroller targets can be as small as 256kiB flash + 16kiB RAM, although
|
|
devices with at least 512kiB flash + 128kiB RAM allow a much more
|
|
full-featured experience.
|
|
|
|
The [Unix](ports/unix) and [Windows](ports/windows) ports allow both
|
|
development and testing of MicroPython itself, as well as providing
|
|
lightweight alternative to CPython on these platforms (in particular on
|
|
embedded Linux systems).
|
|
|
|
Over twenty different MicroPython ports are provided in this repository,
|
|
split across three
|
|
[MicroPython Support Tiers](https://docs.micropython.org/en/latest/develop/support_tiers.html).
|
|
|
|
Tier 1 Ports
|
|
============
|
|
|
|
👑 Ports in [Tier 1](https://docs.micropython.org/en/latest/develop/support_tiers.html)
|
|
are mature and have the most active development, support and testing:
|
|
|
|
| Port | Target | Quick Reference |
|
|
|--------------------------|----------------------------------------------------------------------------------------|----------------------------------------------------------------------|
|
|
| [esp32](ports/esp32)* | Espressif ESP32 SoCs (ESP32, ESP32S2, ESP32S3, ESP32C3, ESP32C6) | [here](https://docs.micropython.org/en/latest/esp32/quickref.html) |
|
|
| [mimxrt](ports/mimxrt) | NXP m.iMX RT | [here](https://docs.micropython.org/en/latest/mimxrt/quickref.html) |
|
|
| [rp2](ports/rp2) | Raspberry Pi RP2040 and RP2350 | [here](https://docs.micropython.org/en/latest/rp2/quickref.html) |
|
|
| [samd](ports/samd) | Microchip (formerly Atmel) SAMD21 and SAMD51 | [here](https://docs.micropython.org/en/latest/samd/quickref.html) |
|
|
| [stm32](ports/stm32) | STMicroelectronics STM32 MCUs (F0, F4, F7, G0, G4, H5, H7, L0, L1, L4, N6, WB, WL) | [here](https://docs.micropython.org/en/latest/pyboard/quickref.html) |
|
|
| [unix](ports/unix) | Linux, BSD, macOS, WSL | [here](https://docs.micropython.org/en/latest/unix/quickref.html) |
|
|
| [windows](ports/windows) | Microsoft Windows | [here](https://docs.micropython.org/en/latest/unix/quickref.html) |
|
|
|
|
An asterisk indicates that the port has ongoing financial support from the vendor.
|
|
|
|
Tier 2 Ports
|
|
============
|
|
|
|
✔ Ports in [Tier 2](https://docs.micropython.org/en/latest/develop/support_tiers.html)
|
|
are less mature and less actively developed and tested than Tier 1, but
|
|
still fully supported:
|
|
|
|
| Port | Target | Quick Reference |
|
|
|----------------------------------|-------------------------------------------------------------|-------------------------------------------------------------------------|
|
|
| [alif](ports/alif) | Alif Semiconductor Ensemble MCUs (E3, E7) | |
|
|
| [embed](ports/embed) | Generates a set of .c/.h files for embedding into a project | |
|
|
| [nrf](ports/nrf) | Nordic Semiconductor nRF51 and nRF52 | |
|
|
| [renesas-ra](ports/renesas-ra) | Renesas RA family | [here](https://docs.micropython.org/en/latest/renesas-ra/quickref.html) |
|
|
| [webassembly](ports/webassembly) | Emscripten port targeting browsers and NodeJS | |
|
|
| [zephyr](ports/zephyr) | Zephyr RTOS | [here](https://docs.micropython.org/en/latest/zephyr/quickref.html) |
|
|
|
|
Tier 3 Ports
|
|
============
|
|
|
|
Ports in [Tier 3](https://docs.micropython.org/en/latest/develop/support_tiers.html)
|
|
are built in CI but not regularly tested by the MicroPython maintainers:
|
|
|
|
| Port | Target | Quick Reference |
|
|
|----------------------------|-------------------------------------------------------------------|-------------------------------------------------------------------------|
|
|
| [cc3200](ports/cc3200) | Texas Instruments CC3200 | [For WiPy](https://docs.micropython.org/en/latest/wipy/quickref.html) |
|
|
| [esp8266](ports/esp8266) | Espressif ESP8266 SoC | [here](https://docs.micropython.org/en/latest/esp8266/quickref.html) |
|
|
| [pic16bit](ports/pic16bit) | Microchip PIC 16-bit | |
|
|
| [powerpc](ports/powerpc) | IBM PowerPC (including Microwatt) | |
|
|
|
|
Additional Ports
|
|
================
|
|
|
|
In addition to the above there is a Tier M containing ports that are used
|
|
primarily for maintenance, development and testing:
|
|
|
|
- The ["bare-arm"](ports/bare-arm) port is an example of the absolute minimum
|
|
configuration that still includes the compiler, and is used to keep track
|
|
of the code size of the core runtime and VM.
|
|
|
|
- The ["minimal"](ports/minimal) port provides an example of a very basic
|
|
MicroPython port and can be compiled as both a standalone Linux binary as
|
|
well as for ARM Cortex-M4. Start with this if you want to port MicroPython
|
|
to another microcontroller.
|
|
|
|
- The [qemu](ports/qemu) port is a QEMU-based emulated target for Cortex-A,
|
|
Cortex-M, RISC-V 32-bit and RISC-V 64-bit architectures.
|
|
|
|
The MicroPython cross-compiler, mpy-cross
|
|
-----------------------------------------
|
|
|
|
Most ports require the [MicroPython cross-compiler](mpy-cross) to be built
|
|
first. This program, called mpy-cross, is used to pre-compile Python scripts
|
|
to .mpy files which can then be included (frozen) into the
|
|
firmware/executable for a port. To build mpy-cross use:
|
|
|
|
$ cd mpy-cross
|
|
$ make
|
|
|
|
External dependencies
|
|
---------------------
|
|
|
|
The core MicroPython VM and runtime has no external dependencies, but a given
|
|
port might depend on third-party drivers or vendor HALs. This repository
|
|
includes [several submodules](lib/) linking to these external dependencies.
|
|
Before compiling a given port, use
|
|
|
|
$ cd ports/name
|
|
$ make submodules
|
|
|
|
to ensure that all required submodules are initialised.
|