HOME

TheInfoList



OR:

MicroPython is a
software Software is a set of computer programs and associated documentation and data. This is in contrast to hardware, from which the system is built and which actually performs the work. At the lowest programming level, executable code consist ...
implementation of a
programming language A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language. The description of a programming ...
largely compatible with Python 3, written in C, that is optimized to run on a microcontroller. MicroPython consists of a Python compiler to bytecode and a runtime interpreter of that bytecode. The user is presented with an interactive prompt (the REPL) to execute supported commands immediately. Included are a selection of core Python libraries; MicroPython includes modules which give the programmer access to low-level hardware. The source code for the project is available on
GitHub GitHub, Inc. () is an Internet hosting service for software development and version control using Git. It provides the distributed version control of Git plus access control, bug tracking, software feature requests, task management, cont ...
under the MIT License.


History

MicroPython was originally created by the Australian programmer and theoretical physicist Damien George, after a successful Kickstarter backed campaign in 2013. While the original Kickstarter campaign released MicroPython with an STM32F4-powered development board "pyboard", MicroPython supports a number of ARM based architectures. The ports supported in the mainline are ARM Cortex-M (many STM32 boards, TI CC3200/WiPy, Teensy boards, Nordic nRF series, SAMD21 and SAMD51), ESP8266, ESP32, 16bit PIC, Unix, Windows, Zephyr, and JavaScript. Also, there are many forks for a variety of systems and hardware platforms not supported in the mainline. In 2016, a version of MicroPython for the BBC Micro Bit was created as part of the Python Software Foundation's contribution to the Micro Bit partnership with the BBC. In July 2017, MicroPython was forked to create CircuitPython, a version of MicroPython with emphasis on education and ease of use. MicroPython and CircuitPython support somewhat different sets of hardware (e.g. CircuitPython supports Atmel SAM D21 and D51 boards, but dropped support for ESP8266). As of version 4.0, CircuitPython is based on MicroPython version 1.9.4. In 2017, Microsemi made a MicroPython port for
RISC-V RISC-V (pronounced "risk-five" where five refers to the number of generations of RISC architecture that were developed at the University of California, Berkeley since 1981) is an open standard instruction set architecture (ISA) based on est ...
(RV32 and RV64) architecture. In April 2019, a version of MicroPython for the Lego Mindstorms EV3 was created. In January 2021, a MicroPython port for the RP2040 (ARM Cortex-M0+, on Raspberry Pi Pico and others) was created.


Features


Ability to run Python

MicroPython has the ability to run Python, allowing users to create simple and easy-to-understand programs. MicroPython supports many standard Python libraries, supporting more than 80% of the features of Python's most used libraries. MicroPython was designed specifically to support the typical performance gap between microcontrollers and Python. Python code is able to directly access and interact with hardware, with increased hardware possibilities that are not available using a normal Python application that is run on an
operating system An operating system (OS) is system software that manages computer hardware, software resources, and provides common daemon (computing), services for computer programs. Time-sharing operating systems scheduler (computing), schedule tasks for ef ...
.


Code portability

MicroPython's utilisation of
hardware abstraction layer Hardware abstractions are sets of routines in software that provide programs with access to hardware resources through programming interfaces. The programming interface allows all devices in a particular class ''C'' of hardware devices to be acce ...
(HAL) technology allows developed code to be portable among different microcontrollers within the same family or platform and on devices that support and can download MicroPython. Programs are often developed and tested on high-performance microcontrollers and distributed with the final application used on lower-performance microcontrollers.


Modules

MicroPython offers functionality, once new code has been written, to create a frozen module and use it as a library which can be a part of developed firmware. This feature assists with avoiding repetitive downloading of the same, already error-free, tested code into a MicroPython environment. This type of module will be saved to a microcontroller's modules directory for
compiling In computing, a compiler is a computer program that translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs tha ...
and uploading to the microcontroller where the library will be available using Python's import command to be used repeatedly.


Read–eval–print loop

The read–eval–print loop (REPL) allows a developer to enter individual lines of code and have them run immediately on a
terminal Terminal may refer to: Computing Hardware * Terminal (electronics), a device for joining electrical circuits together * Terminal (telecommunication), a device communicating over a line * Computer terminal, a set of primary input and output devi ...
.
Linux Linux ( or ) is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution, whi ...
-based and
macOS macOS (; previously OS X and originally Mac OS X) is a Unix operating system developed and marketed by Apple Inc. since 2001. It is the primary operating system for Apple's Mac computers. Within the market of desktop and la ...
systems have terminal emulators that can be used to create a direct connection to a MicroPython device's REPL using a serial USB connection. The REPL assists with the immediate testing of parts of an
application Application may refer to: Mathematics and computing * Application software, computer software designed to help the user to perform specific tasks ** Application layer, an abstraction layer that specifies protocols and interface methods used in a c ...
as you can run each part of the code and visually see the results. Once different parts of your code is loaded into the REPL you can use additional REPL features to experiment with your code's functionality. Helpful REPL commands (once connected to a serial console): * CTRL + C: keyboard interrupt * CTRL + D: reload * help(): help message * help("modules"): lists built-in
modules Broadly speaking, modularity is the degree to which a system's components may be separated and recombined, often with the benefit of flexibility and variety in use. The concept of modularity is used primarily to reduce complexity by breaking a s ...
* import board NTERdir(board): lists all the pins on your microcontroller board that are available to be used in a program's code


Limitations

MicroPython's major limitation is the code's simplistic style, adopted from Python, as code is interpreted by the system at runtime. MicroPython programs require higher precision when using
data In the pursuit of knowledge, data (; ) is a collection of discrete values that convey information, describing quantity, quality, fact, statistics, other basic units of meaning, or simply sequences of symbols that may be further interpret ...
and accessing connections and may be slowed due to Python's simplicity. MicroPython has more limited hardware support in the microcontroller market than other popular platforms, like Arduino with a smaller number of microcontroller choices that support the language. MicroPython does not include an
integrated development environment An integrated development environment (IDE) is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of at least a source code editor, build automation tools ...
(IDE) or specific editor unlike other platforms.


Syntax and semantics

MicroPython's
syntax In linguistics, syntax () is the study of how words and morphemes combine to form larger units such as phrases and sentences. Central concerns of syntax include word order, grammatical relations, hierarchical sentence structure ( constituenc ...
is adopted from Python, due to its clear and easy-to-understand style and power. Unlike most other programming languages less punctuation is used with fewer syntactical machinations in order to prioritise readability.


Code blocks

MicroPython adopts Python's code block style, with code specific to a particular function, condition or loop being indented, meaning certain expressions will only be evaluated once the condition expression is evaluated correctly. This differs from most other languages which typically use symbols or keywords to delimit blocks. This assists with the readability of MicroPython code as the visual structure mirrors the semantic structure. This key feature is simple but important as misused indentation can result in code executing under a wrong condition or an overall error from the interpreter. A colon (:) is the key symbol used to indicate the ending of a condition statement and signals to the interpreter that the statement must be evaluated and the indented body that follows to be executed. The indent size is equivalent to one tab or 4 spaces.


Operations

MicroPython has the ability to perform various mathematical operations using primitive and logical operations.


Libraries

MicroPython is a lean and efficient implementation of Python with libraries similar to those in Python. Some standard Python libraries have an equivalent library in MicroPython renamed to distinguish between the two. MicroPython libraries are smaller with less popular features removed or modified to save
memory Memory is the faculty of the mind by which data or information is encoded, stored, and retrieved when needed. It is the retention of information over time for the purpose of influencing future action. If past events could not be remember ...
. The three types of libraries in MicroPython: * derived from a standard Python library (built-in libraries) * specific MicroPython libraries * specific libraries to assist with hardware functionality MicroPython is highly customisable and configurable, with language differing between each board ( microcontroller) and the availability of libraries may differ. Some functions and classes in a module or the entire module may be unavailable or altered.


Custom MicroPython libraries

When developers begin to create a new application, standard MicroPython libraries and drivers may not meet the requirements, with insufficient operations or calculations. Similar to Python, there is the possibility of extending MicroPython's functionality with custom libraries which extend the ability of the existing libraries and firmware. In MicroPython, files ending with .py take preference over other library aliases which allows users to extend the use and implementation of the existing libraries.


Supporting hardware

As MicroPython's implementation and popularity continues to grow, more boards have the ability to run MicroPython. Many developers are building processor specific versions that can be downloaded onto different microcontrollers. Installing MicroPython on microcontrollers is well documented and user-friendly. MicroPython allows interactions between microcontroller hardware and applications to be simple, allowing access to a range of functionality while working in a resource constrained environment, with a strong level of responsiveness. The two types of boards used to run MicroPython: * MicroPython loaded when manufactured, meaning only MicroPython can be run. * boards that have firmware that allows MicroPython to be installed to the board.


Executing code

To move a program onto a MicroPython board, create a file and copy it onto the microcontroller in order to execute. With the hardware connected to a device, such as a
computer A computer is a machine that can be programmed to carry out sequences of arithmetic or logical operations ( computation) automatically. Modern digital electronic computers can perform generic sets of operations known as programs. These prog ...
, the board's flash drive will appear on the device allowing files to be moved to the flash drive. There will be two existing python files, boot.py and main.py that are typically not modified, main.py may be modified if you wish to run the program every time the microcontroller is booted, otherwise, programs will be run using the REPL console.


Pyboard

The pyboard is the official MicroPython microcontroller board which fully supports MicroPython's software features. The pyboard's hardware features include: * microcontroller (MCU,
CPU A central processing unit (CPU), also called a central processor, main processor or just processor, is the electronic circuitry that executes instructions comprising a computer program. The CPU performs basic arithmetic, logic, controlling, a ...
, flash ROM and RAM) * microUSB connector * micro-SD card slot * IO pins * switches, LEDs, servo ports, real time clock,
accelerometer An accelerometer is a tool that measures proper acceleration. Proper acceleration is the acceleration (the rate of change of velocity) of a body in its own instantaneous rest frame; this is different from coordinate acceleration, which is acce ...


The booting process

The pyboard contains an internal drive (filesystem) named /flash which is stored within the board's flash memory, additionally, a microSD card can be inserted into a slot and is accessible through /sd. When booted up, a pyboard must select a filesystem to boot from either /flash or /sd with the current directory being set to either /flash or /sd. By default, if an SD card is inserted, /sd will be used, if not, /flash is used. If needed, the use of the SD card for the booting process can be avoided by creating an empty file called /flash/SKIPSD which will remain on the board and exist when the pyboard is booted up and will skip the SD card for the booting process.


Boot modes

When the pyboard is powered up normally or the reset button is pressed then the pyboard is booted in a standard mode, meaning that the boot.py file is executed, then the USB configured and finally the python program will run. There is an ability to override the standard boot sequence through holding down the user switch whilst the board is in the booting process and then pressing reset as you continue to hold the user switch. The pyboard's LEDs will flick between modes and once the LEDs have reached the mode wanted by the user, they can let go of the user switch and the board will boot in the specific mode. the boot modes are: * standard boot: green LED only (runs boot.py then python program) * safe boot: orange LED only (does not run any scripts during boot-up) * filesystem reset: green and orange LED together (resets flash drive to factory state and boots in safe mode) * used as a fix when filesystem is corrupted


Errors

* if red and green LEDs flash alternatively then the python script has an error, and you must use the REPL to debug. * if all 4 LEDs cycle on and off then there is a hard fault which cannot be recovered from and requires a hard reset.


Programming examples

Hello world program: # print to serial console print('Hello, World!') Importing + turning on a LED: import pyb # turn LED on pyb.LED(1).on() Reading a file + loop: import os # open and read a file with open('/readme.txt') as f: print(f.read())


Bytecode

MicroPython includes a cross compiler which generates MicroPython
bytecode Bytecode (also called portable code or p-code) is a form of instruction set designed for efficient execution by a software interpreter. Unlike human-readable source code, bytecodes are compact numeric codes, constants, and references (norma ...
(file extension ''.mpy''). The Python code can be compiled into the bytecode either directly on a microcontroller or it can be precompiled elsewhere. MicroPython firmware can be built without the compiler, leaving only the virtual machine which can run the precompiled ''mpy'' programs.


Implementation and uses

MicroPython is utilised through firmware being loaded by standard software onto a particular microcontroller into flash memory, communicating using a terminal application loaded onto a computer that emulates a serial interface. The main uses of MicroPython can be generalised into 3 categories: * educational purposes: using MicroPython's read–eval–print Loop (REPL) to interact with a microcontroller, it is possible to visually explain the concepts of data processing and communicating with boards in a simpler way than more complicated programming languages. * developing and testing device and sensor designs: MicroPython offers verified, bug-free, and thoroughly tested reference implementations of interfaces used in microcontrollers solving a common developer's task of implementing peripheral communication setup and control. MicroPython offers direct and interactive accessibility to device registers which makes it easy to verify functionality and develop and test hardware parts and devices and algorithms for control and acquiring data from a device. * monitoring and configuring tool for design of complex applications: certain applications require specific applications on high performing microcontrollers. MicroPython is able to assist with state monitoring and set-up of system parameters. Implementation of MicroPython can differ depending on the availability of standard and supporting libraries and the microcontroller's flash memory and RAM size.


References


External links

* *
GOTO 2016 • MicroPython & the Internet of Things • Damien George
on
YouTube YouTube is a global online video sharing and social media platform headquartered in San Bruno, California. It was launched on February 14, 2005, by Steve Chen, Chad Hurley, and Jawed Karim. It is owned by Google, and is the second mo ...
* • Tutorials by Tony DiCola / Adafruit {{Python (programming language) BBC computer literacy projects Free software programmed in C Microcontroller software Python (programming language) Software using the MIT license