This is a post that’s been imported from an older blog, hence the date. Some of the information might be out of date, e.g. there’s now a new version of the micro:bit with some enhanced functionality. Still, I think the high-level/general concepts hold, as does much of the commentary, so I’m re-posting this with this disclaimer.

I’ve been spending some time getting familiar with the BBC micro:bit, which is (essentially) a microcontroller with a bunch of things already done for you. One of my biggest issues when thinking about how to teach people to use Arduinos is the amount of overhead (in both time and components) required to get it to do something interesting. The micro:bits takes a different approach, integrating things like:

  • an accelerometer
  • a compass
  • a 5x5 LED matrix
  • two push buttons
  • Bluetooth Low Energy (BLE)
  • and a proprietary-ish “radio”

While these are certainly available to add on to an Arduino-based project, the micro:bit and its development environment provide direct access, without the need to fiddle with SPI or I2C– perfect for beginners looking to develop projects around the functionality that these components afford, without necessarily being at the point where they want to learn about the intricacies of communicating with the devices.

I also like that you can use a variety of programming languages to program the micro:bit. My first foray used the block-based editor: not only is it a familiar interaction experience (much like Scratch), but it allows you to switch (and edit!) the code generated by the blocks, which is TypeScript. This addresses some of the issues I had with Scratch’s interface and how time consuming/click intensive some simple activities were (e.g. trying to do greater than or equal to) by letting you write/edit the code that’s generated.

You can also use a variety of Python called MicroPython, which is a pared down version of Python. On the micro:bit, there is a fairly comprehensive description of what is exposed by the microbit module; most things are included/available, though my understanding is that BLE is not. I use a free editor called Mu which runs without installation. Here are a few notes based on the brief time I’ve spent with the device so far:

  1. You can power the device in a number of ways, including a 2-pin JST-PH connector and battery back, via USB, as well as via a 3.3V pin exposed on the board’s edge. If you’re powering by USB, be aware of the current limitation (120 mA), which will affect whether or not you can power things like servomotors.
  2. If you’re going to try and power the board via the edge pins (3.3V and GND), you must use a regulated 3.3V supply. The board is at most 3.6V tolerant according to the micro:bit documentation. This means no LiPo/Li-ion batteries being directly connected (as they range from 4.2V to 3.7V).
  3. If you want to use (micro)Python, Mu seems to be a good choice for a local environment: https://codewith.mu/#download
  4. The web environments for both block-based/TypeScript and Python seem to work well. If you’re using these, one easy way to save some clicking and dragging is to have your browser prompt you for the download location. In Chrome, for example, this means going into the Settings > Advanced and flipping the switch that says “Ask where to save each file before downloading”. Then, you can save the generated .hex file directly to the micro:bit.