Microcontroller programming with BBC micro:bit
Pocket-Size Programming
Designed for students, the BBC micro:bit, in conjunction with MicroPython and the Mu editor, can help you get started with microcontroller programming.
The idea of developing a microcontroller for schools dates back to 2012. In 2016, in cooperation with the University of Lancaster and several dozen industry partners, the British Broadcasting Corporation (BBC) delivered on this concept with the BBC micro:bit [1]. Although developed for seventh grade students, the BBC micro:bit offers an introduction to microcontroller programing for users of any age.
You can purchase the micro:bit individually for $14.95 or as the micro:bit Go Bundle (which includes batteries, a battery holder, and USB cable) for $17.50 from Adafruit [2].
The microcontroller and its components fit on a 5x4cm board (Figure 1). The 32-bit processor, an ARM Cortex-M0, runs at a clock speed of 16MHz. The micro:bit offers 16KB of RAM and a 256KB flash memory. In principle, a Bluetooth Low Energy (BLE) radio is also available. See Table 1 for more specifications.
Table 1
micro:bit Specifications
25 individually programmable LEDs (5x5 matrix) |
Three-axis accelerometer |
Three-axis magnetometer |
Light and temperature sensors |
Two programmable buttons |
Micro USB socket for power supply and data transfer |
Plug contact for external 3V power supply |
Five contacts for crocodile clips (ground, 3V, and three I/O) |
Further inputs and outputs via special connectors |
If you connect a micro:bit to a Raspberry Pi via a micro-USB cable, the Raspberry Pi will identify the micro:bit as a USB stick with a size of 64MB. Using the lsusb
command will reveal that the micro:bit's USB interface component is an LPC1768 chip from NXP. Listing 1 reveals that the micro:bit has a device name of ttyACM3
.
Listing 1
micro:bit Device Name
$ lsusb [...] Bus 002 Device 019: ID 0d28:0204 NXP LPC1768 [...] $ dmesg | grep tty [...] [17860.723466] cdc_acm 2-1.2.1:1.1: ttyACM3: USB ACM device
The micro:bit can be powered via USB or battery, using the battery holder (shown in Figure 1 on the left) with two AAA zinc or alkaline batteries plugged into the top connector. Optionally, you can use the 3V pad at the bottom, but do so with caution. The micro:bit's voltage range is 1.8-3.6V.
The memory-hungry Bluetooth module cannot be addressed as a standard BLE in MicroPython, but a radio connection between modules should at least work.
MicroPython
While the micro:bit understands various programming languages, this article focuses on MicroPython, the version of Python optimized for running on microprocessors.
If you want to program microcontrollers on register level, you won't get far with MicroPython, but then neither is the micro:bit the tool for this task. Instead, an Arduino [3] would be the better choice, which, unlike the micro:bit, offers circuit diagrams and board layouts.
The micro:bit's operating system constantly monitors the USB memory. If it detects a hex file in USB memory, the system transfers it to the internal memory as a byte sequence and executes it.
MicroPython comes with a very simple filesystem that allows programs to write files to the microcontroller and read them from there. However, even attaching data to existing files is too much for the system. The size limit is 30KB. Since the files are stored in internal memory, they can only be addressed by the running program, but not via the USB interface.
Mu
To program the micro:bit, you use the Mu editor [4], a simple Python editor. Mu recognizes the micro:bit at startup if it is connected to a computer via a USB cable. Mu will prompt you to select the BBC micro:bit mode.
Due to the integrated libraries, the resulting programs are only executable on the micro:bit. This means that run-time errors can only be analyzed and output on the micro:bit. As soon as you press the Check button, the Mu editor searches for syntax errors. For example, in Listing 2, the word hello
in the second line is syntactically incorrect. The solution would be to comment out the line or quote the string (Figure 2).
Listing 2
Syntax Error
import microbit print(hello) print(1/0)
Pressing the Flash button converts the program to hex code and transfers it to the micro:bit where it is executed immediately. You can restart the program via the reset button, which is just like switching on the micro:bit again by applying the supply voltage.
The code from Listing 2 terminates with a run-time error message in the Mu editor:
division by zero
The micro:bit outputs the error code as a ticker on its 5x5 LED matrix. You can look up the error code in the Mu editor by pressing the REPL (which stands for Read-Evaluate-Print-Loop) button (Figure 2).
A Simple Project
Listing 3 shows the code for a prank that delivers a high-pitched squeak when it's dark; if you turn on the light to find the sound source, the system remains silent.
Listing 3
Squeak in the Dark
01 import microbit 02 import music 03 import random 04 05 BrightTrig = 50 06 07 while True: 08 br = microbit.display.read_light_level() 09 if br < BrightTrig: 10 microbit.sleep(800 * (1+random.randrange(10))) 11 music.pitch(900, 80 * (1+random.randrange(5)))
Lines 1-3 import the required Python libraries. The micro:bit not only makes its LEDs light up, it can also use them like photodiodes. Depending on the brightness, the microbit.display.read_light_level()
command returns a value between
and 255
. At a value of 50
, it is already quite dark (line 5).
The continuous loop introduced by while True
stores the measured brightness in the variable br
. If it is greater than the threshold value BrightTrig
, nothing happens. Otherwise, the program calls microbit.sleep
(a wait command) that lasts at least 800 milliseconds, depending on the random number random.randrange(10)
.
The command music.pitch
generates a square wave signal of 900Hz at output
. Here too, a random generator controls the duration.
By connecting a small loudspeaker to the micro:bit contacts 0 and GND, the prank begins. Crocodile clips connect a jack plug to an amplifier's line-in input (Figure 3). The micro:bit's power is just enough to connect a ceramic speaker (the small black cylinder shown in Figure 1). You can also use a buzzer (i.e., a ceramic loudspeaker with a built-in tone generator). Then you just need to switch the output on and off again instead of modulating it at 900Hz.
Buy this article as PDF
(incl. VAT)
Buy Linux Magazine
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters
Support Our Work
Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.
News
-
ESET Discovers New Linux Malware
WolfsBane is an all-in-one malware that has hit the Linux operating system and includes a dropper, a launcher, and a backdoor.
-
New Linux Kernel Patch Allows Forcing a CPU Mitigation
Even when CPU mitigations can consume precious CPU cycles, it might not be a bad idea to allow users to enable them, even if your machine isn't vulnerable.
-
Red Hat Enterprise Linux 9.5 Released
Notify your friends, loved ones, and colleagues that the latest version of RHEL is available with plenty of enhancements.
-
Linux Sees Massive Performance Increase from a Single Line of Code
With one line of code, Intel was able to increase the performance of the Linux kernel by 4,000 percent.
-
Fedora KDE Approved as an Official Spin
If you prefer the Plasma desktop environment and the Fedora distribution, you're in luck because there's now an official spin that is listed on the same level as the Fedora Workstation edition.
-
New Steam Client Ups the Ante for Linux
The latest release from Steam has some pretty cool tricks up its sleeve.
-
Gnome OS Transitioning Toward a General-Purpose Distro
If you're looking for the perfectly vanilla take on the Gnome desktop, Gnome OS might be for you.
-
Fedora 41 Released with New Features
If you're a Fedora fan or just looking for a Linux distribution to help you migrate from Windows, Fedora 41 might be just the ticket.
-
AlmaLinux OS Kitten 10 Gives Power Users a Sneak Preview
If you're looking to kick the tires of AlmaLinux's upstream version, the developers have a purrfect solution.
-
Gnome 47.1 Released with a Few Fixes
The latest release of the Gnome desktop is all about fixing a few nagging issues and not about bringing new features into the mix.