There are many CircuitPython compatible microcontroller boards, with several different processor chips. Each microcontroller has different qualities that make it good for different types of situations. This page discusses the different microcontrollers to help you understand the differences, and why you might choose one over another.
Raspberry Pi RP2040 Microcontroller
The Raspberry Pi RP2040 chip has a fast dual-core processor and contains "PIO processors" which provide very fast execution of a limited programmable instruction set. There is no native WiFi or Bluetooth (boards can have modules added for that) but it does have native USB.
The RP2040 is a microcontroller and not used on the familiar Raspberry Pi single board computers (SBC). See further down the page for Raspberry Pi SBCs.
- SPEED: 125 MHz
- FLASH: External 2 to 8 mB
- RAM: 264 kB
- BLE: NO
- WIFI: NO
- CORES: 2 Arm Cortex M0+
The RP2040 provides a fast dual core processor at a low price point. It has been incorporated into many development boards and is well supported by CircuitPython due to a large amount of RAM. It is an excellent choice at present for a wide range of projects.
A low cost, high processing capable processor widely supported in modern software.
ATSAMD21 M0
The Microchip ATSAMD21 Cortex M0 is the only Cortex M0+ based chip that CircuitPython supports. It does not have native Bluetooth or WiFi.
- SPEED: 48 MHz
- FLASH: 32 to 256 kB
- RAM: 4 to 32 kB
- BLE: NO
- WIFI: NO
- CORES: 1 Arm Cortex M0+
The SAMD21 can run CircuitPython, but it has limitations. It is clocked at 48MHz and has no built in floating point functionality, meaning it generally runs slower. There are memory limitations - it caps out at 256KB of flash and 32KB of RAM. Flash is important for multiple reasons, including determining the number of built-in CircuitPython modules supportable in builds for SAMD21 boards. If the board doesn't have a separate SPI flash chip, as in the case of the non-Express boards (e.g. Trinket, Gemma, QT Py, etc.), the flash limitations become even more critical. Flash space impacts how complex your code can be and how many libraries you can import, which determines things like how many sensors you can use at the same time.
The benefit is that it's small and lower cost than many of the other microcontrollers mentioned on this page. The slower clock speed and limited RAM make it suitable for only basic CircuitPython workloads like NeoPixels.
ATSAMD51 M4
The Microchip ATSAMD51 Cortex M4 microcontroller is powerful. It does not have native Bluetooth or WiFi.
- SPEED: 120 MHz
- FLASH: 256 to 1024 kB
- RAM: 128 to 256 kB
- BLE: NO
- WIFI: NO
- CORES: 1 Arm Cortex M4
The Cortex M4 means it can do faster floating point math, so all division will be faster. It generally executes faster than the SAMD21, as the SAMD51 is clocked at 120mhz by default. It's a good option in that it has a lot more RAM - up to 256KB RAM - which means you can do more things all at once in your code. Most of the SAMD51 chips have more built in flash as well, meaning less limitations on the built-in CircuitPython modules.
It's a great all around chip, as long as you're not looking for WiFi or Bluetooth connectivity.
nRF52840
The Nordic Semiconductor nRF52840 is not as fast as the ATSAMD51, but it does have native Bluetooth capabilities.
- SPEED: 64 MHz
- FLASH: 1024 kB
- RAM: 256 kB
- BLE: YES
- WIFI: NO
- CORES: 1 Arm Cortex M4
An nRF52840 like a SAMD51, is also a Cortex M4 based chip, so it's faster than the SAMD21. However, it's clocked slower than SAMD51, and therefore the nRF52840 is not as speedy as SAMD51. It has 1MB of flash, and 256KB of RAM. It is important to note that both the flash and the RAM are shared with the Bluetooth code - those numbers are the built in flash and RAM, so, the amount available to the user is less because it is sharing with Bluetooth stack. The chip does not do WiFi.
The important feature of this chip is the native Bluetooth capabilities - if you want Bluetooth in CircuitPython, this chip is the way to go.
STM32F405
The ST Microelectronics STM32F405 is an all-around faster microcontroller than many of the other microcontrollers covered here.
- SPEED: 168 MHz
- FLASH: 1024 kB
- RAM: 192 kB
- BLE: NO
- WIFI: NO
- CORES: 1 Arm Cortex M4, Crypto Coprocessor
The STM32F405 is also a Cortex M4 based chip. It does not support native WiFi or Bluetooth. The Adafruit STM32F405 boards do not currently ship with a UF2 bootloader, so installing and updating CircuitPython requires more steps than simply dragging and dropping a UF2 file onto a BOOT drive. Note that only 128kB of RAM is available in CircuitPython. It's easier and cheaper to connect a debugger to this board than an ATSAMD board, it can be programmed without an external programmer using DFU, and it is very difficult to brick (render inoperable). However, it isn't as well supported in Arduino.
This microcontroller is great for more advanced folks looking to take extra steps with their project or learning process.
The ESP32 Family of Chips
There are a number of Espressif ESP32 chips currently on the market. They have differing specifications and CircuitPython support.
ESP32 Microcontroller
The Espressif ESP32 (no suffix) has both Bluetooth and WiFi capabilities, but does not run CircuitPython natively. Instead, CircuitPython boards use the ESP32 as a co-processor for WiFi and Bluetooth capabilities. Note that it cannot do WiFi and Bluetooth at the same time.
- SPEED: 240 MHz
- FLASH: External 2 to 8 MB
- PSRAM: 2 MB
- BLE: YES
- WIFI: YES
- CORES: 2 Tensilica Xtensa processor
The ESP32 is not directly supported by CircuitPython because it does not have native USB connectivity.
NOTE: The ESP32 and the other ESP32 "dash" (ESP32-S2, -S3, -C3, etc.) chips are different microcontrollers with differing capabilities.
ESP32-S2 Microcontroller
The Espressif ESP32-S2 has native WiFi capabilities like the ESP32, but it only has a single processor core and does not have Bluetooth. However, it does have native USB support, and thus is the first all-in-one WiFi chip with CircuitPython support
- SPEED: 240 MHz
- FLASH: External 2 to 8 MB
- PSRAM: 2 to 8 MB
- BLE: NO
- WIFI: YES
- CORES: 1 Tensilica Xtensa processor
The ESP32-S2 typically has 4MB of external flash, but only 1MB is available to the user. The way it works is that the flash space is shared between the native CircuitPython core code and the user filesystem. In this way, it is unlike the SAMD21 Express and SAMD51 Express boards, where CircuitPython lives on the chip and the code is separate.
The ESP32-S2 WROVER module has 2MB of external RAM, all of which is allocated to CircuitPython, which means it has more CircuitPython-dedicated RAM than any of the other microprocessors. There are ESP32-S2 modules that do not have the external RAM chip, and in the case of those, memory when using CircuitPython will be limited. It is a relatively low-cost option as well.
The ESP32-S2 is a great choice for budget-minded projects where heavy processing and Bluetooth are not required. The CircuitPython port is extremely stable.
ESP32-S3 Microcontroller
The Espressif ESP32-S3 has native WiFi capabilities and dual processor cores like the ESP32, while supporting both WiFi and Bluetooth. It is well supported by CircuitPython.
- SPEED: 240 MHz
- FLASH: External 2 to 8 MB
- PSRAM: 2 to 8 MB
- BLE: YES (see note)
- WIFI: YES
- CORES: 2 Tensilica Xtensa processor
CircuitPython BLE support on ESP32-S3 is not yet complete, as of CircuitPython 9.x.
The ESP32-S3 can come with various amounts of external flash and PSRAM. If you have a need for processing large amounts of data in-memory, this can be helpful.
The ESP32-S3 is a more powerful processor with WiFi and Bluetooth, making it quite capable with CircuitPython.
ESP32-C3 Microcontroller
The ESP32-C3 is based on a single core RISC-V processor. The chip supports WiFi and Bluetooth (but not both simultaneously) but it doesn't have native USB, so is a poor choice for CircuitPython. MicroPython may be run on the chipset as well as Arduino.
- SPEED: 160 MHz
- FLASH: External 2 to 8 MB
- PSRAM: 2 to 8 MB
- BLE: YES
- WIFI: YES
- CORES: 1 RISC-V
The ESP32-C3 is not a CircuitPython processor and one should look at the S series of chips.
ESP32-C6 Microcontroller
The ESP32-C6 integrates Wi-Fi, Bluetooth LE, Zigbee and Thread functions. It contains a high performance 32-bit RISC-V processor and a low power 32-bit RISC-V processor. CircuitPython compatible but there are no current libraries for the Zigbee and Thread communications. This is new for 2024 so stay tuned for further information.
- SPEED: 160 MHz
- FLASH: External 2 to 8 MB
- PSRAM: 2 to 8 MB
- BLE: YES
- WIFI: YES
- CORES: 1 High Power RISC-V + 1 Low Power RISC-V
The ESP32-C6 chip has exciting features but the CircuitPython support is not fully developed at the moment.
i.MX RT Microcontrollers
The NXP i.MX RT family of chips are fast! The minimum clock speed you'll see is around 500MHz. They're a Cortex M7 based microcontroller family, which means they're more efficient at code execution than an M4 as well.
i.MX RT1011:
- SPEED: 500 MHz
- FLASH: External 2 to 8 MB
- SRAM: 128 kB
- BLE: NO
- WIFI: NO
- CORES: 1 Arm Cortex M7
In terms of flash, there is always an external flash chip that is shared between the native CircuitPython code and the user filesystem. In most cases, you'll have more RAM than a SAMD51, but not in all cases, for this chip line. The low end of the line will have less RAM than the SAMD51, but the code will run faster. It also has native high speed USB connectivity.
The i.MX RT processors provide advanced processing capability for applications.
Raspberry Pi Single Board Computers (SBC)
The Raspberry Pi typically runs CircuitPython libraries using the Blinka CircuitPython library compatibility layer with regular Python (called CPython). This means it's compatible with your current CircuitPython code, with no changes needed.
Raspberry Pi SBCs have many megabytes of memory, some up to 8 gigabytes and can use fast flash storage. Definite muscle for the biggest of tasks in a small space.
There is an experimental build of CircuitPython that runs "bare metal", re. on Raspberry Pi without Linux, but it may have missing features or possibly bugs.
SBCs are not low power or battery-friendly, as the boards are running a full Linux operating system. But, because they run CPython, you can also use all of the normal Python libraries along side, such as numpy, etc. that are not in CircuitPython.
Text editor powered by tinymce.