Machines › Computers › Micro:bit › BBC micro:bit
BBC micro:bit
2016
The BBC micro:bit v1 (2016) is a small education board built on a Nordic nRF51822: a 16MHz ARM Cortex-M0 with 256KB flash and 16KB RAM. On board are a 5x5 LED matrix, two buttons (A and B), and an accelerometer. There is no speaker on v1.
BBC micro:bit Online Emulator
Play BBC micro:bit using JavaScript directly in your browser.
Controls
Runs real BBC micro:bit v1 programs on an in-browser Nordic nRF51822 (ARM Cortex-M0). The default is the STOCK MicroPython runtime (v1.1.1, MIT) booting a real Python program that pulses a heart on the 5x5 LED matrix — it boots because the core now has the full ARMv6-M exception model (NVIC, SysTick, SVC, PendSV) and the board raises the real nRF51 RTC/TIMER/GPIOTE interrupts. Pick "MicroPython: Scrolling Text" to scroll text, or "MicroPython: Smiley Buttons" and press A/B to switch faces. "Interrupt Heart" is a bare-metal program whose display is driven entirely from an RTC interrupt handler. The bare-metal "Flashing Heart / Smiley / Dice / Tilt" programs poll the hardware directly; Dice (Shake) and Tilt use the accelerometer over real TWI. A "MakeCode / CODAL" config boots a REAL MakeCode-compiled app through a clean-room Nordic SoftDevice HLE (the app at flash 0x18000 over the SoftDevice layout; Nordic's binary is NOT shipped — its sd_* SVC ABI is emulated in JS): the CODAL runtime boots, RENDERS the flashing heart on the 5x5 matrix (its LED refresh is driven by the real CODAL system-timer strobe on the TIMER1 us-ticker IRQ), and the debugger single-steps its real Thumb. ALL on-screen controls — A/B buttons, the tilt D-pad and Shake/Flat — live in ONE place: the shared debugger's Controller input panel (open it from the shell footer or the debugger). Keyboard: A/B = buttons, arrows = tilt, S = shake; click the display first so it captures the keyboard. Open the debugger, or add ?debug, to single-STEP real Thumb instructions (now through exception entry/return and SVC too), set PC breakpoints and write watchpoints, and read the ARM registers (r0-r15, xPSR, N/Z/C/V) and the real nRF51 memory map live. micro:bit v1 has no on-board speaker, so it is honestly silent.
Runs real BBC micro:bit v1 programs on an in-browser Nordic nRF51822 (ARM Cortex-M0). The default is the STOCK MicroPython runtime (v1.1.1, MIT) booting a real Python program that pulses a heart on the 5x5 LED matrix — it boots because the core now has the full ARMv6-M exception model (NVIC, SysTick, SVC, PendSV) and the board raises the real nRF51 RTC/TIMER/GPIOTE interrupts. Pick "MicroPython: Scrolling Text" to scroll text, or "MicroPython: Smiley Buttons" and press A/B to switch faces. "Interrupt Heart" is a bare-metal program whose display is driven entirely from an RTC interrupt handler. The bare-metal "Flashing Heart / Smiley / Dice / Tilt" programs poll the hardware directly; Dice (Shake) and Tilt use the accelerometer over real TWI. A "MakeCode / CODAL" config boots a REAL MakeCode-compiled app through a clean-room Nordic SoftDevice HLE (the app at flash 0x18000 over the SoftDevice layout; Nordic's binary is NOT shipped — its sd_* SVC ABI is emulated in JS): the CODAL runtime boots, RENDERS the flashing heart on the 5x5 matrix (its LED refresh is driven by the real CODAL system-timer strobe on the TIMER1 us-ticker IRQ), and the debugger single-steps its real Thumb. ALL on-screen controls — A/B buttons, the tilt D-pad and Shake/Flat — live in ONE place: the shared debugger's Controller input panel (open it from the shell footer or the debugger). Keyboard: A/B = buttons, arrows = tilt, S = shake; click the display first so it captures the keyboard. Open the debugger, or add ?debug, to single-STEP real Thumb instructions (now through exception entry/return and SVC too), set PC breakpoints and write watchpoints, and read the ARM registers (r0-r15, xPSR, N/Z/C/V) and the real nRF51 memory map live. micro:bit v1 has no on-board speaker, so it is honestly silent.
Runs real BBC micro:bit v1 programs on an in-browser Nordic nRF51822 (ARM Cortex-M0). The default is the STOCK MicroPython runtime (v1.1.1, MIT) booting a real Python program that pulses a heart on the 5x5 LED matrix — it boots because the core now has the full ARMv6-M exception model (NVIC, SysTick, SVC, PendSV) and the board raises the real nRF51 RTC/TIMER/GPIOTE interrupts. Pick "MicroPython: Scrolling Text" to scroll text, or "MicroPython: Smiley Buttons" and press A/B to switch faces. "Interrupt Heart" is a bare-metal program whose display is driven entirely from an RTC interrupt handler. The bare-metal "Flashing Heart / Smiley / Dice / Tilt" programs poll the hardware directly; Dice (Shake) and Tilt use the accelerometer over real TWI. A "MakeCode / CODAL" config boots a REAL MakeCode-compiled app through a clean-room Nordic SoftDevice HLE (the app at flash 0x18000 over the SoftDevice layout; Nordic's binary is NOT shipped — its sd_* SVC ABI is emulated in JS): the CODAL runtime boots, RENDERS the flashing heart on the 5x5 matrix (its LED refresh is driven by the real CODAL system-timer strobe on the TIMER1 us-ticker IRQ), and the debugger single-steps its real Thumb. ALL on-screen controls — A/B buttons, the tilt D-pad and Shake/Flat — live in ONE place: the shared debugger's Controller input panel (open it from the shell footer or the debugger). Keyboard: A/B = buttons, arrows = tilt, S = shake; click the display first so it captures the keyboard. Open the debugger, or add ?debug, to single-STEP real Thumb instructions (now through exception entry/return and SVC too), set PC breakpoints and write watchpoints, and read the ARM registers (r0-r15, xPSR, N/Z/C/V) and the real nRF51 memory map live. micro:bit v1 has no on-board speaker, so it is honestly silent.
Runs real BBC micro:bit v1 programs on an in-browser Nordic nRF51822 (ARM Cortex-M0). The default is the STOCK MicroPython runtime (v1.1.1, MIT) booting a real Python program that pulses a heart on the 5x5 LED matrix — it boots because the core now has the full ARMv6-M exception model (NVIC, SysTick, SVC, PendSV) and the board raises the real nRF51 RTC/TIMER/GPIOTE interrupts. Pick "MicroPython: Scrolling Text" to scroll text, or "MicroPython: Smiley Buttons" and press A/B to switch faces. "Interrupt Heart" is a bare-metal program whose display is driven entirely from an RTC interrupt handler. The bare-metal "Flashing Heart / Smiley / Dice / Tilt" programs poll the hardware directly; Dice (Shake) and Tilt use the accelerometer over real TWI. A "MakeCode / CODAL" config boots a REAL MakeCode-compiled app through a clean-room Nordic SoftDevice HLE (the app at flash 0x18000 over the SoftDevice layout; Nordic's binary is NOT shipped — its sd_* SVC ABI is emulated in JS): the CODAL runtime boots, RENDERS the flashing heart on the 5x5 matrix (its LED refresh is driven by the real CODAL system-timer strobe on the TIMER1 us-ticker IRQ), and the debugger single-steps its real Thumb. ALL on-screen controls — A/B buttons, the tilt D-pad and Shake/Flat — live in ONE place: the shared debugger's Controller input panel (open it from the shell footer or the debugger). Keyboard: A/B = buttons, arrows = tilt, S = shake; click the display first so it captures the keyboard. Open the debugger, or add ?debug, to single-STEP real Thumb instructions (now through exception entry/return and SVC too), set PC breakpoints and write watchpoints, and read the ARM registers (r0-r15, xPSR, N/Z/C/V) and the real nRF51 memory map live. micro:bit v1 has no on-board speaker, so it is honestly silent.
Runs real BBC micro:bit v1 programs on an in-browser Nordic nRF51822 (ARM Cortex-M0). The default is the STOCK MicroPython runtime (v1.1.1, MIT) booting a real Python program that pulses a heart on the 5x5 LED matrix — it boots because the core now has the full ARMv6-M exception model (NVIC, SysTick, SVC, PendSV) and the board raises the real nRF51 RTC/TIMER/GPIOTE interrupts. Pick "MicroPython: Scrolling Text" to scroll text, or "MicroPython: Smiley Buttons" and press A/B to switch faces. "Interrupt Heart" is a bare-metal program whose display is driven entirely from an RTC interrupt handler. The bare-metal "Flashing Heart / Smiley / Dice / Tilt" programs poll the hardware directly; Dice (Shake) and Tilt use the accelerometer over real TWI. A "MakeCode / CODAL" config boots a REAL MakeCode-compiled app through a clean-room Nordic SoftDevice HLE (the app at flash 0x18000 over the SoftDevice layout; Nordic's binary is NOT shipped — its sd_* SVC ABI is emulated in JS): the CODAL runtime boots, RENDERS the flashing heart on the 5x5 matrix (its LED refresh is driven by the real CODAL system-timer strobe on the TIMER1 us-ticker IRQ), and the debugger single-steps its real Thumb. ALL on-screen controls — A/B buttons, the tilt D-pad and Shake/Flat — live in ONE place: the shared debugger's Controller input panel (open it from the shell footer or the debugger). Keyboard: A/B = buttons, arrows = tilt, S = shake; click the display first so it captures the keyboard. Open the debugger, or add ?debug, to single-STEP real Thumb instructions (now through exception entry/return and SVC too), set PC breakpoints and write watchpoints, and read the ARM registers (r0-r15, xPSR, N/Z/C/V) and the real nRF51 memory map live. micro:bit v1 has no on-board speaker, so it is honestly silent.
Runs real BBC micro:bit v1 programs on an in-browser Nordic nRF51822 (ARM Cortex-M0). The default is the STOCK MicroPython runtime (v1.1.1, MIT) booting a real Python program that pulses a heart on the 5x5 LED matrix — it boots because the core now has the full ARMv6-M exception model (NVIC, SysTick, SVC, PendSV) and the board raises the real nRF51 RTC/TIMER/GPIOTE interrupts. Pick "MicroPython: Scrolling Text" to scroll text, or "MicroPython: Smiley Buttons" and press A/B to switch faces. "Interrupt Heart" is a bare-metal program whose display is driven entirely from an RTC interrupt handler. The bare-metal "Flashing Heart / Smiley / Dice / Tilt" programs poll the hardware directly; Dice (Shake) and Tilt use the accelerometer over real TWI. A "MakeCode / CODAL" config boots a REAL MakeCode-compiled app through a clean-room Nordic SoftDevice HLE (the app at flash 0x18000 over the SoftDevice layout; Nordic's binary is NOT shipped — its sd_* SVC ABI is emulated in JS): the CODAL runtime boots, RENDERS the flashing heart on the 5x5 matrix (its LED refresh is driven by the real CODAL system-timer strobe on the TIMER1 us-ticker IRQ), and the debugger single-steps its real Thumb. ALL on-screen controls — A/B buttons, the tilt D-pad and Shake/Flat — live in ONE place: the shared debugger's Controller input panel (open it from the shell footer or the debugger). Keyboard: A/B = buttons, arrows = tilt, S = shake; click the display first so it captures the keyboard. Open the debugger, or add ?debug, to single-STEP real Thumb instructions (now through exception entry/return and SVC too), set PC breakpoints and write watchpoints, and read the ARM registers (r0-r15, xPSR, N/Z/C/V) and the real nRF51 memory map live. micro:bit v1 has no on-board speaker, so it is honestly silent.
Runs real BBC micro:bit v1 programs on an in-browser Nordic nRF51822 (ARM Cortex-M0). The default is the STOCK MicroPython runtime (v1.1.1, MIT) booting a real Python program that pulses a heart on the 5x5 LED matrix — it boots because the core now has the full ARMv6-M exception model (NVIC, SysTick, SVC, PendSV) and the board raises the real nRF51 RTC/TIMER/GPIOTE interrupts. Pick "MicroPython: Scrolling Text" to scroll text, or "MicroPython: Smiley Buttons" and press A/B to switch faces. "Interrupt Heart" is a bare-metal program whose display is driven entirely from an RTC interrupt handler. The bare-metal "Flashing Heart / Smiley / Dice / Tilt" programs poll the hardware directly; Dice (Shake) and Tilt use the accelerometer over real TWI. A "MakeCode / CODAL" config boots a REAL MakeCode-compiled app through a clean-room Nordic SoftDevice HLE (the app at flash 0x18000 over the SoftDevice layout; Nordic's binary is NOT shipped — its sd_* SVC ABI is emulated in JS): the CODAL runtime boots, RENDERS the flashing heart on the 5x5 matrix (its LED refresh is driven by the real CODAL system-timer strobe on the TIMER1 us-ticker IRQ), and the debugger single-steps its real Thumb. ALL on-screen controls — A/B buttons, the tilt D-pad and Shake/Flat — live in ONE place: the shared debugger's Controller input panel (open it from the shell footer or the debugger). Keyboard: A/B = buttons, arrows = tilt, S = shake; click the display first so it captures the keyboard. Open the debugger, or add ?debug, to single-STEP real Thumb instructions (now through exception entry/return and SVC too), set PC breakpoints and write watchpoints, and read the ARM registers (r0-r15, xPSR, N/Z/C/V) and the real nRF51 memory map live. micro:bit v1 has no on-board speaker, so it is honestly silent.
Runs real BBC micro:bit v1 programs on an in-browser Nordic nRF51822 (ARM Cortex-M0). The default is the STOCK MicroPython runtime (v1.1.1, MIT) booting a real Python program that pulses a heart on the 5x5 LED matrix — it boots because the core now has the full ARMv6-M exception model (NVIC, SysTick, SVC, PendSV) and the board raises the real nRF51 RTC/TIMER/GPIOTE interrupts. Pick "MicroPython: Scrolling Text" to scroll text, or "MicroPython: Smiley Buttons" and press A/B to switch faces. "Interrupt Heart" is a bare-metal program whose display is driven entirely from an RTC interrupt handler. The bare-metal "Flashing Heart / Smiley / Dice / Tilt" programs poll the hardware directly; Dice (Shake) and Tilt use the accelerometer over real TWI. A "MakeCode / CODAL" config boots a REAL MakeCode-compiled app through a clean-room Nordic SoftDevice HLE (the app at flash 0x18000 over the SoftDevice layout; Nordic's binary is NOT shipped — its sd_* SVC ABI is emulated in JS): the CODAL runtime boots, RENDERS the flashing heart on the 5x5 matrix (its LED refresh is driven by the real CODAL system-timer strobe on the TIMER1 us-ticker IRQ), and the debugger single-steps its real Thumb. ALL on-screen controls — A/B buttons, the tilt D-pad and Shake/Flat — live in ONE place: the shared debugger's Controller input panel (open it from the shell footer or the debugger). Keyboard: A/B = buttons, arrows = tilt, S = shake; click the display first so it captures the keyboard. Open the debugger, or add ?debug, to single-STEP real Thumb instructions (now through exception entry/return and SVC too), set PC breakpoints and write watchpoints, and read the ARM registers (r0-r15, xPSR, N/Z/C/V) and the real nRF51 memory map live. micro:bit v1 has no on-board speaker, so it is honestly silent.
Runs real BBC micro:bit v1 programs on an in-browser Nordic nRF51822 (ARM Cortex-M0). The default is the STOCK MicroPython runtime (v1.1.1, MIT) booting a real Python program that pulses a heart on the 5x5 LED matrix — it boots because the core now has the full ARMv6-M exception model (NVIC, SysTick, SVC, PendSV) and the board raises the real nRF51 RTC/TIMER/GPIOTE interrupts. Pick "MicroPython: Scrolling Text" to scroll text, or "MicroPython: Smiley Buttons" and press A/B to switch faces. "Interrupt Heart" is a bare-metal program whose display is driven entirely from an RTC interrupt handler. The bare-metal "Flashing Heart / Smiley / Dice / Tilt" programs poll the hardware directly; Dice (Shake) and Tilt use the accelerometer over real TWI. A "MakeCode / CODAL" config boots a REAL MakeCode-compiled app through a clean-room Nordic SoftDevice HLE (the app at flash 0x18000 over the SoftDevice layout; Nordic's binary is NOT shipped — its sd_* SVC ABI is emulated in JS): the CODAL runtime boots, RENDERS the flashing heart on the 5x5 matrix (its LED refresh is driven by the real CODAL system-timer strobe on the TIMER1 us-ticker IRQ), and the debugger single-steps its real Thumb. ALL on-screen controls — A/B buttons, the tilt D-pad and Shake/Flat — live in ONE place: the shared debugger's Controller input panel (open it from the shell footer or the debugger). Keyboard: A/B = buttons, arrows = tilt, S = shake; click the display first so it captures the keyboard. Open the debugger, or add ?debug, to single-STEP real Thumb instructions (now through exception entry/return and SVC too), set PC breakpoints and write watchpoints, and read the ARM registers (r0-r15, xPSR, N/Z/C/V) and the real nRF51 memory map live. micro:bit v1 has no on-board speaker, so it is honestly silent.
Configurations
| Configuration | Emulator | Machine | OS | Legal | |
|---|---|---|---|---|---|
| MakeCode / CODAL — SoftDevice HLE boot | BBC micro:bit | BBC micro:bit | open | Open ⛶ | |
| MicroPython: Flashing Heart | BBC micro:bit | BBC micro:bit | open | Open ⛶ | |
| MicroPython: Scrolling Text | BBC micro:bit | BBC micro:bit | open | Open ⛶ | |
| MicroPython: Smiley Buttons | BBC micro:bit | BBC micro:bit | open | Open ⛶ | |
| Interrupt Heart | BBC micro:bit | BBC micro:bit | open | Open ⛶ | |
| Flashing Heart (bare-metal) | BBC micro:bit | BBC micro:bit | open | Open ⛶ | |
| Smiley Buttons (bare-metal) | BBC micro:bit | BBC micro:bit | open | Open ⛶ | |
| Dice on Shake (bare-metal) | BBC micro:bit | BBC micro:bit | open | Open ⛶ | |
| Tilt Dot (bare-metal) | BBC micro:bit | BBC micro:bit | open | Open ⛶ |
Downloads — ROMs & software
| Title | Type | Size (bytes) | Legal | |
|---|---|---|---|---|
| Dice on Shake | demo | 0 | open | Download ↓ |
| Flashing Heart | demo | 0 | open | Download ↓ |
| Interrupt Heart | demo | 0 | open | Download ↓ |
| MakeCode: Flashing Heart (CODAL) | demo | 0 | open | Download ↓ |
| MicroPython: Smiley Buttons | demo | 0 | open | Download ↓ |
| MicroPython: Flashing Heart | demo | 0 | open | Download ↓ |
| MicroPython: Scrolling Text | demo | 0 | open | Download ↓ |
| Smiley Buttons | demo | 0 | open | Download ↓ |
| Tilt Dot | demo | 0 | open | Download ↓ |
Downloads — ROMs & software
| Title | Type | Size (bytes) | Legal | |
|---|---|---|---|---|
| Dice on Shake | demo | 0 | open | Download ↓ |
| Flashing Heart | demo | 0 | open | Download ↓ |
| Interrupt Heart | demo | 0 | open | Download ↓ |
| MakeCode: Flashing Heart (CODAL) | demo | 0 | open | Download ↓ |
| MicroPython: Smiley Buttons | demo | 0 | open | Download ↓ |
| MicroPython: Flashing Heart | demo | 0 | open | Download ↓ |
| MicroPython: Scrolling Text | demo | 0 | open | Download ↓ |
| Smiley Buttons | demo | 0 | open | Download ↓ |
| Tilt Dot | demo | 0 | open | Download ↓ |
Downloads — ROMs & software
| Title | Type | Size (bytes) | Legal | |
|---|---|---|---|---|
| Dice on Shake | demo | 0 | open | Download ↓ |
| Flashing Heart | demo | 0 | open | Download ↓ |
| Interrupt Heart | demo | 0 | open | Download ↓ |
| MakeCode: Flashing Heart (CODAL) | demo | 0 | open | Download ↓ |
| MicroPython: Smiley Buttons | demo | 0 | open | Download ↓ |
| MicroPython: Flashing Heart | demo | 0 | open | Download ↓ |
| MicroPython: Scrolling Text | demo | 0 | open | Download ↓ |
| Smiley Buttons | demo | 0 | open | Download ↓ |
| Tilt Dot | demo | 0 | open | Download ↓ |
Downloads — ROMs & software
| Title | Type | Size (bytes) | Legal | |
|---|---|---|---|---|
| Dice on Shake | demo | 0 | open | Download ↓ |
| Flashing Heart | demo | 0 | open | Download ↓ |
| Interrupt Heart | demo | 0 | open | Download ↓ |
| MakeCode: Flashing Heart (CODAL) | demo | 0 | open | Download ↓ |
| MicroPython: Smiley Buttons | demo | 0 | open | Download ↓ |
| MicroPython: Flashing Heart | demo | 0 | open | Download ↓ |
| MicroPython: Scrolling Text | demo | 0 | open | Download ↓ |
| Smiley Buttons | demo | 0 | open | Download ↓ |
| Tilt Dot | demo | 0 | open | Download ↓ |
Downloads — ROMs & software
| Title | Type | Size (bytes) | Legal | |
|---|---|---|---|---|
| Dice on Shake | demo | 0 | open | Download ↓ |
| Flashing Heart | demo | 0 | open | Download ↓ |
| Interrupt Heart | demo | 0 | open | Download ↓ |
| MakeCode: Flashing Heart (CODAL) | demo | 0 | open | Download ↓ |
| MicroPython: Smiley Buttons | demo | 0 | open | Download ↓ |
| MicroPython: Flashing Heart | demo | 0 | open | Download ↓ |
| MicroPython: Scrolling Text | demo | 0 | open | Download ↓ |
| Smiley Buttons | demo | 0 | open | Download ↓ |
| Tilt Dot | demo | 0 | open | Download ↓ |
Downloads — ROMs & software
| Title | Type | Size (bytes) | Legal | |
|---|---|---|---|---|
| Dice on Shake | demo | 0 | open | Download ↓ |
| Flashing Heart | demo | 0 | open | Download ↓ |
| Interrupt Heart | demo | 0 | open | Download ↓ |
| MakeCode: Flashing Heart (CODAL) | demo | 0 | open | Download ↓ |
| MicroPython: Smiley Buttons | demo | 0 | open | Download ↓ |
| MicroPython: Flashing Heart | demo | 0 | open | Download ↓ |
| MicroPython: Scrolling Text | demo | 0 | open | Download ↓ |
| Smiley Buttons | demo | 0 | open | Download ↓ |
| Tilt Dot | demo | 0 | open | Download ↓ |
Chips
Emulators
| Emulator | Type | License | Site |
|---|---|---|---|
| BBC micro:bit | online | MIT/CC0 | Website ↗ |