MicroPython

Last updated

MicroPython
Developer(s) Damien P. George
Initial release3 May 2014;9 years ago (2014-05-03)
Stable release
1.21.0 [1]   OOjs UI icon edit-ltr-progressive.svg / 6 October 2023;2 months ago (6 October 2023)
Repository
Written in C
Platform ARM Cortex-M, STM32, ESP8266, ESP32, 16-bit PIC, Unix, Microsoft Windows, Zephyr, JavaScript, RP2040
License MIT license [2]
Website micropython.org

MicroPython is a software implementation of a programming language largely compatible with Python 3, written in C, that is optimized to run on a microcontroller. [3] [4]

Contents

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. [5]

MicroPython does have an inline assembler, which lets the code run at full speed, but it is not portable across different microcontrollers.

The source code for the project is available on GitHub under the MIT License. [6]

History

A Casio FX-9860GIII calculator which was introduced in 2020, and came with built-in MicroPython Casio FX-9860G3.jpg
A Casio FX-9860GIII calculator which was introduced in 2020, and came with built-in MicroPython

MicroPython was originally created by the Australian programmer Damien George, after a successful Kickstarter-backed campaign in 2013. [7] While the original Kickstarter campaign released MicroPython with an STM32F4-powered development board "pyboard", MicroPython supports a number of ARM based architectures. [8] The ports supported in the mainline are ARM Cortex-M (many STM32 [9] boards, RP2040 boards, TI CC3200/WiPy, Teensy boards, Nordic nRF series, SAMD21 and SAMD51), ESP8266, ESP32, [10] 16-bit PIC, Unix, Windows, Zephyr, and JavaScript. [11] Also, there are many forks for a variety of systems and hardware platforms not supported in the mainline. [12]

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. [13]

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. [14]

In 2017, Microsemi made a MicroPython port for RISC-V (RV32 and RV64) architecture. [15]

In April 2019, a version of MicroPython for the Lego Mindstorms EV3 was created. [16]

In January 2021, a MicroPython port for the RP2040 (ARM Cortex-M0+, on Raspberry Pi Pico and others) was created. [17]

Features

Ability to run Python

MicroPython has the ability to run Python, allowing users to create simple and easy-to-understand programs. [18] MicroPython supports many standard Python libraries, supporting more than 80% of the features of Python's most used libraries. [18] MicroPython was designed specifically to support the typical performance gap between microcontrollers and Python. [19] 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. [20]

Code portability

MicroPython's utilisation of hardware abstraction layer (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. [21]

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 and uploading to the microcontroller where the library will be available using Python's import command to be used repeatedly. [21]

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. [22] Linux-based and macOS 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 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. [18]

Helpful REPL commands (once connected to a serial console): [22]

Limitations

Although MicroPython fully implements Python language version 3.4 and much of 3.5, it does not implement all language features introduced from 3.5 onwards, [23] though some new syntax from 3.6 and more recent features from later versions, e.g. from 3.8 (assignment expressions) and 3.9. It includes a subset of the standard library. [24]

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. [19] MicroPython does not include an integrated development environment (IDE) or specific editor unlike other platforms. [19]

Syntax and semantics

MicroPython's syntax is adopted from Python, due to its clear and easy-to-understand style and power. [25] Unlike most other programming languages less punctuation is used with fewer syntactical machinations in order to prioritise readability. [18]

Code blocks

MicroPython adopts Python's code block style, with code specific to a particular function, condition or loop being indented. [18] This differs from most other languages which typically use symbols or keywords to delimit blocks. [18] 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. [18]

A colon (:) is the key symbol used to indicate the ending of a condition statement. [18] 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. [20]

Supported operations [20]
TypeOperatorNameExample
Arithmetic+Additionvariable + 1
-Subtractionvariable - 1
*Multiplicationvariable * 4
/Divisionvariable / 4
%Modulo divisionvariable % 4
Comparison==Equalsexpression1 == expression2
!=Not equalexpression1 != expression2
<Less thanexpression1 < expression2
>Greater thanexpression1 > expression2
<=Less than or equalsexpression1 <= expression2
>=Greater than or equalsexpression1 >= expression2
Logical& bitwise andvariable1 & variable2
|bitwise orvariable1 | variable2
^bitwise exclusive orvariable1 ^ variable2
~bitwise complement~variable1
andlogical andvariable1 and variable2
orlogical orvariable1 or variable2

Libraries

MicroPython is a lean and efficient implementation of Python with libraries similar to those in Python. [26] 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. [20]

The three types of libraries in MicroPython: [20]

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. [20]

Standard Python libraries in MicroPython [5]
Library nameDescription
arrayoperations on arrays
cmathprovides math functions for complex numbers
gc garbage collector
mathprovides basic math operations for floating-point numbers
syssystem-level functions; provides access to variables used by the interpreter
binasciifunctions for converting between binary and ASCII
collectionsoperations for collections and container types that hold various objects
errnoprovides access to error codes
hashliboperations for binary hash algorithms
heapqoperations to implement heap queue algorithm
iooperations for handling input/output streams
jsonhandles conversion between JSON documents and Python objects
osfunctions for filesystem access and basic operating system functions
reimplements regular expression matching operations
selectfunctions for handling events on multiple streams
socketconnecting to sockets (networks), providing access to socket interface
structperforms conversions to Python objects by packing and unpacking primitive data types
timeprovides time and date function, including measuring time intervals and implementing delays
zliboperations to decompress binary data
MicroPython-specific libraries [5]
Library nameDescription
framebufprovides a frame buffer that can be used to create bitmap images to be sent to a display
machinefunctions assisting with accessing and interacting with hardware blocks
micropythonaccess and control of MicroPython internals
networkassists with installing network driver, allowing interactions through networks
ctypesaccess binary data structures

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. [21]

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. [20]

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. [20] Installing MicroPython on microcontrollers is well documented and user-friendly. [21] 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. [18]

The two types of boards used to run MicroPython: [20]

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, 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. [20]

Pyboard

The pyboard is the official MicroPython microcontroller board which fully supports MicroPython's software features. The pyboard's hardware features include: [5]

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. [5]

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. [5]

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. [5]

the boot modes are: [5]

  • 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. [5]

Programming examples [20]

Hello world program:

# print to serial consoleprint('Hello, World!')

Importing + turning on a LED:

importpyb# turn LED onpyb.LED(1).on()

Reading a file + loop:

importos# open and read a filewithopen('/readme.txt')asf:print(f.read())

Bytecode

MicroPython includes a cross compiler which generates MicroPython bytecode (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. [21]

The main uses of MicroPython can be generalised into 3 categories: [21]

Implementation of MicroPython can differ depending on the availability of standard and supporting libraries and the microcontroller's flash memory and RAM size. [21]

Related Research Articles

Bytecode 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 that encode the result of compiler parsing and performing semantic analysis of things like type, scope, and nesting depths of program objects.

<span class="mw-page-title-main">AVR microcontrollers</span> Family of microcontrollers

AVR is a family of microcontrollers developed since 1996 by Atmel, acquired by Microchip Technology in 2016. These are modified Harvard architecture 8-bit RISC single-chip microcontrollers. AVR was one of the first microcontroller families to use on-chip flash memory for program storage, as opposed to one-time programmable ROM, EPROM, or EEPROM used by other microcontrollers at the time.

<span class="mw-page-title-main">UEFI</span> Operating system and firmware specification

Unified Extensible Firmware Interface is a specification that defines the architecture of the platform firmware used for booting the computer hardware and its interface for interaction with the operating system. Examples of firmware that implement the specification are AMI Aptio, Phoenix SecureCore, TianoCore EDK II, InsydeH2O. UEFI replaces the BIOS which was present in the boot ROM of all personal computers that are IBM PC compatible, although it can provide backwards compatibility with the BIOS using CSM booting. Intel developed the original Extensible Firmware Interface (EFI) specification. Some of the EFI's practices and data formats mirror those of Microsoft Windows. In 2005, UEFI deprecated EFI 1.10.

<span class="mw-page-title-main">Trusted Platform Module</span> Standard for secure cryptoprocessors

Trusted Platform Module (TPM) is an international standard for a secure cryptoprocessor, a dedicated microcontroller designed to secure hardware through integrated cryptographic keys. The term can also refer to a chip conforming to the standard ISO/IEC 11889.

The boot ROM is a type of ROM that is used for booting a computer system. There are two types: a mask boot ROM that cannot be changed afterwards and a boot EEPROM, which can contain an UEFI implementation.

<span class="mw-page-title-main">Parallax Propeller</span> Multi-core microcontroller

The Parallax P8X32A Propeller is a multi-core processor parallel computer architecture microcontroller chip with eight 32-bit reduced instruction set computer (RISC) central processing unit (CPU) cores. Introduced in 2006, it is designed and sold by Parallax, Inc.

<span class="mw-page-title-main">Arduino</span> Open-source hardware and software platform

Arduino is an Italian open-source hardware and software company, project, and user community that designs and manufactures single-board microcontrollers and microcontroller kits for building digital devices. Its hardware products are licensed under a CC BY-SA license, while the software is licensed under the GNU Lesser General Public License (LGPL) or the GNU General Public License (GPL), permitting the manufacture of Arduino boards and software distribution by anyone. Arduino boards are available commercially from the official website or through authorized distributors.

<span class="mw-page-title-main">.NET Micro Framework</span> Open source .NET platform

The .NET Micro Framework (NETMF) is a .NET Framework platform for resource-constrained devices with at least 512 kB of flash and 256 kB of random-access memory (RAM). It includes a small version of the .NET Common Language Runtime (CLR) and supports development in C#, Visual Basic .NET, and debugging using Microsoft Visual Studio. NETMF features a subset of the .NET base class libraries, an implementation of Windows Communication Foundation (WCF), a GUI framework loosely based on Windows Presentation Foundation (WPF), and a Web Services stack based on Simple Object Access Protocol (SOAP) and Web Services Description Language (WSDL). NETMF also features added libraries specific to embedded applications. It is free and open-source software released under Apache License 2.0.

<span class="mw-page-title-main">Adafruit Industries</span> American electronic components and hardware distributor

Adafruit Industries is an open-source hardware company based in New York, United States. It was founded by Limor Fried in 2005. The company designs, manufactures and sells electronics products, electronics components, tools, and accessories. It also produces learning resources, including live and recorded videos about electronics, technology, and programming.

XMC is a family of microcontroller ICs by Infineon. The XMC microcontrollers use the 32-bit RISC ARM processor cores from ARM Holdings, such as Cortex-M4F and Cortex-M0. XMC stands for "cross-market microcontrollers", meaning that this family can cover due to compatibility and configuration options, a wide range in industrial applications. The family supports three essential trends in the industry: It increases the energy efficiency of the systems, supports a variety of communication standards and reduces software complexity in the development of the application's software environment with the parallel released eclipse-based software tool DAVE.

<span class="mw-page-title-main">Lego Mindstorms EV3</span>

LEGO Mindstorms EV3 is the third generation robotics kit in LEGO's Mindstorms line. It is the successor to the second generation LEGO Mindstorms NXT kit. The "EV" designation refers to the "evolution" of the Mindstorms product line. "3" refers to the fact that it is the third generation of computer modules - first was the RCX and the second is the NXT. It was officially announced on January 4, 2013, and was released in stores on September 1, 2013. The education edition was released on August 1, 2013. There are many competitions using this set, including the FIRST LEGO League Challenge and the World Robot Olympiad, sponsored by LEGO.

<span class="mw-page-title-main">Micro Bit</span> Single-board computer designed by the BBC for use in computer education

The Micro Bit is an open source hardware ARM-based embedded system designed by the BBC for use in computer education in the United Kingdom. It was first announced on the launch of BBC's Make It Digital campaign on 12 March 2015 with the intent of delivering 1 million devices to pupils in the UK. The final device design and features were unveiled on 6 July 2015 whereas actual delivery of devices, initially planned for September 2015 to schools and October 2015 to general public, began on 10 February 2016.

<span class="mw-page-title-main">NodeMCU</span> Open-source IoT platform

NodeMCU is a low-cost open source IoT platform. It initially included firmware which runs on the ESP8266 Wi-Fi SoC from Espressif Systems, and hardware which was based on the ESP-12 module. Later, support for the ESP32 32-bit MCU was added.

<span class="mw-page-title-main">ESP8266</span> System-on-a-chip microcontroller model with Wi-Fi

The ESP8266 is a low-cost Wi-Fi microchip, with built-in TCP/IP networking software, and microcontroller capability, produced by Espressif Systems in Shanghai, China.

<span class="mw-page-title-main">GoWarrior</span> Open-source computing platform

GoWarrior is an open-source and community-supported computing platform. GoWarrior is designed for the world of makers, hackers, educators, hobbyists, and newbies to build electronics projects. It offers a complete package of hardware, software and cloud service.

<span class="mw-page-title-main">Apache Mynewt</span> Real-time operating system

Apache Mynewt is a modular real-time operating system for connected Internet of things (IoT) devices that must operate for long times under power, memory, and storage constraints. It is free and open-source software incubating under the Apache Software Foundation, with source code distributed under the Apache License 2.0, a permissive license that is conducive to commercial adoption of open-source software.

The Soundart Chameleon was a hardware synthesizer module, designed by the Spanish company Soundart. The name Chameleon comes from the fact that the machine was able to change its "skins", which are different sound engines. The Chameleons were produced from 2002 to 2004, until the company went bankrupt.

<span class="mw-page-title-main">CircuitPython</span> Programming language

CircuitPython is an open-source derivative of the MicroPython programming language targeted toward students and beginners. Development of CircuitPython is supported by Adafruit Industries. It is a software implementation of the Python 3 programming language, written in C. It has been ported to run on several modern microcontrollers.

Espruino is an open-source JavaScript interpreter for single board microcontrollers. It is designed for devices with small amounts of RAM.

<span class="mw-page-title-main">RP2040</span> ARM-architecture microcontroller by the Raspberry Pi Foundation

RP2040 is a 32-bit dual ARM Cortex-M0+ microcontroller integrated circuit by Raspberry Pi Ltd. In January 2021, it was released as part of the Raspberry Pi Pico board.

References

  1. Error: Unable to display the reference properly. See the documentation for details.
  2. George, Damien P. (4 May 2014). "micropython/LICENSE at master · micropython/micropython". GitHub . Retrieved 11 February 2017.
  3. Venkataramanan, Madhumita (6 December 2013). "Micro Python: more powerful than Arduino, simpler than the Raspberry Pi". Wired. Retrieved 15 December 2016.
  4. Yegulalp, Serdar (5 July 2014). "Micro Python's tiny circuits: Python variant targets microcontrollers". InfoWorld. Retrieved 15 December 2016.
  5. 1 2 3 4 5 6 7 8 9 "MicroPython - Python for microcontrollers". micropython.org. Retrieved 12 August 2017.
  6. "MicroPython on GitHub". GitHub . 7 February 2022.
  7. "Micro Python: Python for microcontrollers". Kickstarter. Retrieved 15 December 2016.
  8. Beningo, Jacob (11 July 2016). "Prototype to production: MicroPython under the hood". EDN Network. Retrieved 15 December 2016.
  9. "MicroPython on Nucleo STM32, STM32F411CE, and STM32F401CC: flashing firmware and basic tools". Mischianti. August 2023.
  10. "MicroPython with esp8266 and esp32: flashing firmware and programming with basic tools". Mischianti. 7 June 2023.
  11. George, Damien P. "micropython/ports at master · micropython/micropython". GitHub. Retrieved 22 October 2019.
  12. Sokolovsky, Paul. "Awesome MicroPython". GitHub. Retrieved 22 October 2019.
  13. Williams, Alun (7 July 2015). "Hands on with the BBC Micro-Bit user interface". ElectronicsWeekly.com. Retrieved 8 July 2015.
  14. Shawcroft, Scott (22 May 2019). "CircuitPython 4.0.1 released!". Adafruit Blog. Adafruit Industries. Retrieved 11 June 2019.
  15. "RISC-V Poster Preview — 7th RISC-V Workshop" (PDF). 28 November 2017. Retrieved 17 December 2018.
  16. "LEGO releases MicroPython for EV3 based on ev3dev and Pybricks". www.ev3dev.org. Retrieved 21 April 2020.
  17. "Meet Raspberry Silicon: Raspberry Pi Pico now on sale at $4". www.raspberrypi.org. 21 January 2021. Retrieved 21 January 2021.
  18. 1 2 3 4 5 6 7 8 9 Alsabbagh, Marwan (2019). MicroPython Cookbook. Birmingham, UK: Packt Publishing.
  19. 1 2 3 Bruno, P. (25 November 2021). "An Introduction to MicroPython". All3DP. Retrieved 9 May 2022.
  20. 1 2 3 4 5 6 7 8 9 10 11 Bell, Charles (2017). MicroPython for the Internet of Things. Berkeley, USA: Apress.
  21. 1 2 3 4 5 6 7 Gaspar, G.; Kuba, P.; Flochova, J.; Dudak, J.; Florkova, Z. (2020). Development of IoT applications based on the MicroPython platform for Industry 4.0 implementation. 2020 19th International Conference on Mechatronics – Mechatronika (ME). pp. 1–7.
  22. 1 2 Rembor, K. "The REPL". Welcome to CircuitPython!. Adafruit Learning System. Retrieved 9 May 2022.
  23. "MicroPython differences from CPython — MicroPython latest documentation". docs.micropython.org.
  24. "MicroPython - Python for microcontrollers". micropython.org.
  25. Wang, L.; Li, Y.; Zhang, H.; Han, Q.; Chen, L. (2021). An Efficient Control-flow based Obfuscator for Micropython Bytecode. 2021 7th International Symposium on System and Software Reliability (ISSSR). pp. 54–63.
  26. Khamphroo, M.; Kwankeo, N.; Kaemarungsi, K.; Fukawa, K. (2017). MicroPython-based educational mobile robot for computer coding learning. 2017 8th International Conference of Information and Communication Technology for Embedded Systems (IC-ICTES). pp. 1–6.