Hacker News new | comments | show | ask | jobs | submit login
Exploring the BBC Micro:bit Software Stack and OS (mattwarren.org)
135 points by matthewwarren 4 months ago | hide | past | web | favorite | 69 comments



It's important to point out that EVERYTHING to do with the MicroPython work on the micro:bit was done by a community of volunteers working in their spare time. Source code here: https://github.com/bbcmicrobit/micropython Documentation here: https://microbit-micropython.readthedocs.io/en/latest/

I estimate around 80 people volunteered time to bring Python and associated tools (such as the browser based editor, command line tools and a native editor called "Mu" https://mu.readthedocs.io/en/latest/) to micro:bit.

At the heart of all this work was the creator of MicroPython, Damien George who volunteered a huge number of hours to bringing a full reimplementation of Python3 (without standard library) to micro:bit. Check it out, it's awesome. MicroPython is both a reimplementation of Python 3 but on the micro:bit also has music, a simple speech synthesiser, funky display functions, radio and a simple file system all built in. :-)


The work done on MicroPython is amazing, it is the 21st century version of Basic for tiny devices.

It even allows compiling to native code and use of inline Assembly.

http://docs.micropython.org/en/v1.9.3/pyboard/reference/spee...

http://docs.micropython.org/en/v1.9.3/pyboard/pyboard/tutori...


I've switched all my new embedded projects to MicroPython, and I've found it far superior to Arduino for managing complexity in your software. No more loop() function that gets totally out of hand! Having an OS underneath with support for real concurrency constructs (like fibers) makes a huge difference, and Python is a pleasure to work with. Huge props to everybody involved in making this happen!


I knew that a lot of work went into MicroPython, but I didn't appreciate that is was all done by community volunteers. That's very impressive!


Yea, I got to try one out and added some pedagogical examples to help people learn about the platform. It was lots of fun!


For some background on the design decisions, here's the 'Key design constraints' from https://github.com/sparkslabs/microbit-prototype/tree/master... (the technical specs of the microbit prototype, written in Dec 2014) :

> Programmable - The device must be reprogrammable

> Simple to program - via a graphical browser based UI

> Small - maximum 5cm x 5cm

> Cheap - manufacture cost must be approximately £2 or less when produced in large scale - for example batches of 100,000 units


Just noticed that the BBC have re-released some of their archive of 'BBC Micro' related TV programmes from the 1980's, see https://www.bbc.co.uk/iplayer/group/p031v2bg (probably UK only)


Those have been on the iPlayer for a year or so now. Definitely worth a watch.


I love the Micro:bit and have used it in many "Coding for Managers" workshops.

Currently I switch for my workshops to the Calliope Mini [1], very similar (they talked to the Micro:bit guys), but has additionally RGB LED, microphone, sound, Grove sensor connectors (2) and motor drivers for two motors for robots (but is more expensive).

[1] https://calliope.cc/


Nifty, I hadn't seen Calliope before. I'll check it out next time I buy some experimental kit for my classes.


"I’d imagine that for a large amount of computer programmers (currently in their 30’s)..."

40s/50s surely. the 80s is 30 years ago.


In the UK programming was taught on BBC Micros in pretty much every school from the age of 5-6 years old as part of the school curriculum. I'm in my late 30s and learned Logo and BASIC almost 35 years ago in the early-mid 1980s. I then went back to it when I was 11 and learned BASIC "properly", and then by 14 was writing C which is around the early-mid-1990s.

Most of my colleagues from the UK went through a similar curve, taking in Atari and Amiga machines at home not just as games machines but piqued by their capability to produce software of their own.

The UK 8-bit market was one of the biggest economic helpers the country has had in generations. We then went about squandering it.

Whilst I was a teenager the school curriculums moved to teaching PowerPoint and Excel which basically meant STEM entrants at University fell off. I was one of the last years to be able to learn how to code at school.

Detecting an impeding and urgent skills gap, a couple of years ago a proper computer science GCSE was kicked off (by the much maligned, but on this occasion perhaps quite right, Michael Gove MP), but only 11% of pupils in the UK sat it last year, and most schools are struggling to hire teachers so the quality of the kids they're turning out is a problem for us as a country and economy.

This is something I'm spending a lot of time thinking about right now. An open-source set of text books with teacher notes might help a lot of kids get exposure to the skills they need for the workplace in 30 years, the way I got exposure.

Yes, the RPi and microbits stuff is part of that, but there needs to be some steps beyond that. Kids need to be able to go home, look at the PC or laptop and think "I could make something on that", and get the guidance needed to do so.


> In the UK programming was taught on BBC Micros in pretty much every school from the age of 5-6 years old as part of the school curriculum.

I'm sorry, that may have been your experience, but that statement is simply not true.

In the early 80s - when you say you were being taught BASIC at an age when most people are still learning to read - I was in middle school, and the only thing anybody was allowed to do on the school's single BBC was play Frak a handful of times.

Not only were there no computer lessons in middle school there were none in my high school either, until 1988, at which time we did not learn BASIC or C, but whatever database software the BBC was using.

The 1980s was a heyday of British kids being into computers and programming (creating a massive games industry), but it has essentially nothing to do with the piss-poor education system of the UK or a computer that had virtually no users outside of state institutions.

Kids in that decade were doing it for themselves, at home, not in school, primarily on the ZX Spectrum.


How was it squandered? Pre Brexit the UK was EU #1 for SW startups. Obviously the US is #1 globally in SW, but UK has been strong for a long time in many verticals: gaming, fintech, mech eng, petroleum eng. I started coding in Basic on a Pet in 79, and learned Z80 on a ZX81. The 8 bit experience was great for our SW sector, and far more fruitful than Tony Benn's misguided nationalisation of English Electric Leo Marconi to create a national champion in the shape of ICL. That was 50 years ago, and those govt backed ICL VME systems are still out there, a legacy dead weight on the orgs that bought into them.


I turned 30 this year, born 1987, and I had no idea that I missed out on this kind of education by so few years.

I remember there were a couple of BBC Micros sat getting dusty in the corners of a couple of classrooms in both my infant (year 1-2) and junior (year 3-6) schools, but we never used them.

Instead we had brand new Windows machines on which we learnt Powerpoint, Excel and used Encarta. Joy.


The BBC Micro didn't have the UK schools market entirely to itself.

I was born in 1971 and both my primary and secondary schools had LINK 480Z computers by Research Machines. The primary school only had the one, but the secondary school had a lab with 12 or 16 (I forget) of them. Later on it replaced them with a larger number of RM Nimbus PCs (again from Research Machines) which used 80186 processors. Yes, you read that right: 80186 processors. As you'd expect, they were not properly compatible with real PCs.

I was lucky enough to get a BBC Micro at home a couple of years after starting secondary school; my parents held off because they thought that maybe it was just a short-term interest. I think they might be convinced by now.


Oh yeah, I'd forgotten about the RM machines, they were pretty cool as well!


> Most of my colleagues from the UK went through a similar curve, taking in Atari and Amiga machines at home not just as games machines but piqued by their capability to produce software of their own.

Yep, that's exactly my programming history!

> The UK 8-bit market was one of the biggest economic helpers the country has had in generations. We then went about squandering it.

Yeah, such a shame that happened. I wonder why?


In my humble opinion, the home computer market fragmented into business machines (Amstrad's PCW and PC ranges) and gaming. Acorn and Sinclair [bought by Amstrad] failed to come up with the next generation of home computers.

We now have the Raspberry Pi to fill the "home computer" niche but it's a very different proposition to the home computer of the 1980's.


My school had Archimedes and I learned to program on those as well as BBCs.

Acorn did go on to come up with the next but one generation of computers, the 10 or so ARM cores in every smart phone.

In terms of defaults matter, shipping with a programming language by default is great. Also shipping with a 400 page manual explaining how to use that language was great, which Acorn did until about 1995 I guess.

I was the first person in my school to use the school computer. I can't say we had programming lessons that often, did Logo in secondary school, but only the graphical parts. But the teachers let us type in programs from magazines, learn ourselves. Depends on what teacher you had really, if they knew programming they probably taught it. That's what I do now.


Well, I was basing that on my own age!! (born in the early 80's, still just-about in my 30's).

But yes, I guess I should've extended it a bit :-)


I'm still in my 30s and starting coding in the 80s!


I was born in 84, and used BBC micros at school.


I'm in my (early) 40's and started coding in the (late) 70's


For more information on the runtime (the underpinnings of MakeCode): https://lancaster-university.github.io/microbit-docs/

We are using the approach taken with micro:bit to support other resource constrained devices, like the adafruit circuit playground: https://makecode.adafruit.com


http://www.nordicsemi.com/nordic/content_download/108537/184... states ”Nordic Semiconductor’s nrF51822 is the brain of the micro:bit combining the latest Bluetooth low energy, _ANt+_ and proprietary wireless technology with a 32-bit ArM Cortex-M0 microprocessor”

So, the hardware supports ANT+. The software stack doesn’t seem to, however. Does anybody know whether that is possible/worked on? If not, is there similar ‘beginner’ hardware that does?


Interesting, the PXT language (TypeScript subset) does have a native code backend.

https://makecode.com/language


Hmm, I completely missed that, thanks for pointing it out (https://makecode.com/language#static-compilation-vs-a-dynami...)

I assumed that the PXT worked the same as MicroPython, but it seems like it actually compiles directly to machine code, nice!


This computer seems the least interesting if all computers I can think of. It's like they actually tried to make it not have exciting potential.

You have to really work to hobble a modern computer to remove the excitement factor but somehow the BBC rose to the challenge.


I just had a look to see how to build an android app to make a hot/cold beacon finder and where to buy beacons.

You know what? I'm already bored. And that's before I've started trying to install eclipse and what sdks I need and whether to use kotlin and how to setup the right things.

I mean, I found the google docs and one of the first steps is

> Request an OAuth 2.0 Client ID

Great, going to get some young kids excited by explaining what oauth is and how to log into the google developers console.

Next up, what XML you need to know to create an interface and add what threads are and ...

Or:

https://makecode.microbit.org/projects/hot-or-cold

Done.


I think that sums a lot of 'progress' up to me; I've had several abortive attempts to 'get into programming' over the last 20 years or so, and all of them have floundered early on on various pre-requisites which just seemed too much to deal with. I'm now persevering with Python (which seems in some way to suffer less that others, but also because I'm sticking at it this time as I want to change career), but I can remember giving up when it seemed I had to write about 50 lines of code just to get a window up with an OK button. I'm sure the same is true many multiples over with kids, and the micro:bit seems a good solution to that.


If it helps, I've recently started adding more UIs to things and the main way I'm doing it is with web pages.

Easy to make, lots of tutorials, requires another language unfortunately but still a useful skill.

Not always applicable, but can be a good approach.

Best of luck, I know there are some hard steps to take (particularly the stage of "ok I can write code but what can I actually do with it"), but things really build after a while. Oh, and I've been coding for maybe 17 years and

1. I keep writing code that's wrong 2. I get basic things wrong all the time 3. I still have to regularly look things up

My wife is learning to code, and I think she felt these things meant she wasn't doing well at it, but it's really common. I'm just used to it and have more experience finding my mistakes because I've made them so much.

> and the micro:bit seems a good solution to that.

I think so. I think there's a huge step forwards when you can get something working quickly, then build from there.


Thanks for all that - one of the most honest and helpful comments I've seen on here, and particularly useful for me! Usually people don't let on about them, so I feel much better.

I'm buying my youngest step-child a Micro:bit for Christmas. Well, I say it's for him...


> I'm buying my youngest step-child a Micro:bit for Christmas. Well, I say it's for him...

I think that I'll be doing something similar ;-)


I think I should clarify a bit here, these "boring" things are important for real production work. I'm not arguing that they should be all removed, but if I just want to play with something then it's overkill.

It feels like having to get regulatory approval, surveys and having OSHA oversight while making sandcastles.


Beware not to deblaterate nonsense (in this case Eclipse and OAuth Client ID) when you want to make a point. This will make you vulnerable to counter argument on details and not on what you want to convey.


What nonsense? I found the google page on beacons and it says to go and deal with oauth.

https://developers.google.com/beacons/proximity/get-started

Android dev used to say to go to eclipse, now it's JetBrains apparently. Have a look at the "your first app" here:

https://developer.android.com/training/basics/firstapp/index...

Compare just part of the code for making text appear:

    public class MainActivity extends AppCompatActivity {
    public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /** Called when the user taps the Send button */
    public void sendMessage(View view) {
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText editText = (EditText) findViewById(R.id.editText);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }
    }
Which comes along with XML like this

     All you need to do is declare which activity is the logical parent in the AndroidManifest.xml file. So open the file at app > 
    manifests > AndroidManifest.xml, locate the <activity> tag for DisplayMessageActivity and replace it with the following:

    <activity android:name=".DisplayMessageActivity"
          android:parentActivityName=".MainActivity" >
    <!-- The meta-data tag is required if you support API level 15 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity" />
    </activity>
This is before trying to get radios working, beacons, etc. Just text, a button and "back".

For something exciting and interesting, I'd rather not see "paste the following XML" anywhere in the instructions.


The constraints are a feature.

The benefits of working within RAM and processing constraints teaches about those limits and you become more aware of the interaction between hardware and software.

Too many softies these days are completely unaware of this interaction.... (to their deficit).


I'd have to completely disagree there. I recently went round a new (high) school with my youngest step-son (who is 11, so year 6 in the UK).

He's not really that impressed by most computer stuff which is at a level he'd actually be able to understand/program. While he's shown some aptitude in scratch, etc., I think the problem is that everything that's exciting to him is light years away from whatever he can actually do.

However, he and his friends all spent some time on the open evening looking at the micro:bits that were on display which were set up to do various simple things - detect touches or switch presses and change LEDs, etc.

His elder sister is of the age that was supposed to get a free Micro:bit, but that didn't happen.... I think I'll have to buy one and have a play!


I'm not sure about that, of course it is limited compared to the Raspberry Pi.

But, have you ever watched a kid use one and within 5 mins be able to have their name scroll across the screen or make a simple Paper/Scissors/Stone game using the accelerometer? They get pretty excited about it!


It has the advantage as well as coming with buttons and lights (as well as accelerometer, compass, light sensor, temperature sensor, bluetooth), so the time between 'open package' and see your code doing something is much smaller.

At £15 for one with a battery pack, cables, tutorials, and all that, it sounds great.

And apparently has a different radio too, to connect to other micro:bits? Multiplayer rock paper scissors: https://makecode.microbit.org/projects/rps-teams

I'll happily trade not having loads of ram for something a kid (or a big kid myself :) ) can pick up and just make something fun in almost no time.


As I understand it it's using the bluetooth chip, but as it's actually a Software Defined Radio, they wrote simpler software that doesn't take up half the ram of the computer.


A few weeks ago I saw dozens of Singaporean kids showing off projects they'd built with the Micro:bit. They learned a good deal, had been very creative, and were clearly interested in learning more. Sounds like a good outcome.


I've heard this before, but how can the appeal last longer than a few minutes? Seriously, a computer is about potential but the possibilities are so incredibly limited with this device that it's hard to see where to go after a few blinking lights. That's just not exciting.

For an example of what the new BBC project should have been, look up littlebits - now there's potential and open ended creative possibility.

A few blinking lights and that's the total potential? Meh.


I've been teaching using these for the last 9 months, using them for an introductory and tactile programming environment (being able to easily switch from block code to Python when they get the concepts is great), learning about how computers use a variety of external sensors, introducing some of the structure of wireless networking, congestion and attenuation and more.

And that's without using any of the pins to hook up external gear. My kids have just started hooking up continuous servos and creating remote control buggies with them, learning about protocols in the meantime.

They're probably one of the best pieces of kit I've used in 13 years of teaching (and cheap to boot).

But feel free to keep rubbishing them, that's your prerogative :)


Well you can wire it up to eternal devices easily enough.

Also take a look at some of the ideas on this page, http://microbit.org/ideas/projects/.

(thanks for the info about 'littlebits', I'd not heard about that, taking a look now)


Multiplayer rock paper scissors with radio communication based on shaking them?

https://makecode.microbit.org/projects/rps-teams

Add on some motors and make a robot that hides from the light?

Make a robot that can follow a path, or that drives based on true compass directions.

Make a hide and seek with your microbit reporting hot/cold based on signal strength to other microbits? https://makecode.microbit.org/projects/hot-or-cold

Display the temperature?

Send messages to people?

Add on any other sensors?

Connect to your phone and do something else (app driven robot maybe)

Firefly synchronisation https://makecode.microbit.org/projects/fireflies

There's loads on that page and really you've got sensors and can control other things, and do distributed communication. There's lots of things you can do with a low powered processor, and it's not locked down to a few options.

Edit - I've just found out you can play sounds with it too.

Edit 2 - I'm now actually quite excited about this. I'm going to go out and buy one now.


Based on my experience the compass is the only part of these I haven't liked. I haven't successfully managed to accurately calibrate one yet, which has really put a crimp on how that feature is used.


There's seems to be a known bug related to this, see https://github.com/lancaster-university/microbit-dal/issues/....


Really useful to know, thanks.


Sorry but for a modern kid, the sort of projects you are talking about sound like the sort of projects that an adult thinks kids would love, not what kids would actually love, which is screens, color, games, robotics and interaction.

It was a huge mistake not to ship this with a video port.


> a modern kid

I think it's a mistake to assume modern kids need high powered things to be interesting. I've been at a maker faire where the kids were amazed at seeing an old broadcast camera hooked up to a TV. All it was doing was recording and playing things back, but they liked it. I'm sure lots of them even had phones which would do the same thing but with higher quality.

The local science museum always hads kids running about in the discovery section playing with things like pulleys and shouting into the long tube that creates a delay, or the glasses that turn things upside down.

Kids still play with lego which has absolutely no moving parts or complex interaction.

I'm sure if you start by telling kids it'll be boring they'll hate it. Otherwise kids seem to be able to have fun with anything as complex as a cardbox box upwards.

> games, robotics and interaction.

I mean, several of my examples are games, robots and involve interaction.

I can easily see how to use two of these to make a robot wars robot, one for the controller (steer with tilting and a button for "go" and a button for "fire") and one for the robot. Don't tell me kids wouldn't be interested in making fighting robots.

> It was a huge mistake not to ship this with a video port.

I think it'd be a huge mistake to try and make something like the rPi. That already exists if you want to do stuff connected to a screen with a full OS and internet access.

I doubt it would have fitted into the budget for production either, given that these needed to be given to every year 7 in the country.

I think you're trying to make it boring, and have fun with that, I'm going to go and make a robot. Or maybe finally build the sensor to see how far my degu runs in a day on his wheel.


> It was a huge mistake not to ship this with a video port.

Looking at what I see happening with the Raspberry Pi, I don't agree with that assertion. It's not been very important for making cooler projects with kids, it only made coding on it easier since it didn't come with a nice remote environment and you thus could use the Linux desktop on the Pi for coding. (It also opens up use cases like "media center", but those are not very relevant for education).

Kids find going to hardware like the microbit/Pi/Arduino interesting because it is breaking out of the usual screen(+keyboard in case of a PC) environment, and you can do

> games, robotics and interaction

that's not limited to the screen. And nothing stops you to combine both, have the microbit talk to a PC/phone.


Littlebits is considerably more expensive than the micro:bit.


Yes but the BBC would have been better not to commission a new computer, but to design a standard for connecting tiny cheap computing devices together and let industry build interesting BBC compatible things that could be hooked together, expanded, interfaced, with electronics, vision, sound, robotics, movement etc etc


It's not exactly a new computer, it's using ARM's mbed system, so that's a standard real world IoT platform, not a toy.

You can drive larger displays https://github.com/carlosperate/awesome-microbit

Plus don't think it's the only computer they'll have, it's an IoT computer, it's supposed to not have a video out.

I like that it's all in one, you can program it in 5 mins with a browser, and yet connects to real IO the same way real embedded computers do, you have to get a bit messy, you know it's not a toy.


You can hook up lots of the popular kit that works with Arduino to Microbits quite easily (servos, steppers, ultrasonic sensors, extended LED arrays, humidity and moisture sensors). Most of it will work with block code too.


That's great - unless you mission is to quickly get cheap devices into classrooms


Yeah, I suspect the BBC had a very specific remit and they would've been in trouble if they'd got into too much competition with existing manufacturers/companies.

They are very much a publicly funded corporation, so everything they do has to fit with that.


I'll add my anecdote: my family and I visited friends in California this past summer for vacation. We visited the local Fry's and I saw these and picked up a pair. Our friends' oldest son was mildly interested, but didn't see the appeal. We looked at the peripherals on the boards and decided to make a remote sensing thermometer that we'd put in the freezer. Literally 15 minutes later, we had built working code in the block editor for both components (the broadcasting thermometer, sending the latest temperature once a second, and the receiver which showed the data) We popped it in the freezer and watched as the temperature slowly creeped down to below freezing. He was amazed that we could build something like that so quickly. Our friends went out and purchased their own micro:bits the next day :)


It seems like the RISC-V ISA would make more sense for a project like this, no?


No, why would it? ARM is well-known, well-supported by the software ecosystem and there are tons of cheap chips readily available so you can pick whatever you like.

RISC-V has none of these things right now. One type of chip available, I doubt they could have gotten it at the time (or even right now) in the numbers they need, it would need companion chips for things the current one has integrated (Bluetooth), would be more expensive and would likely require more software work. Exciting, yes, but at the lower levels "boring" is exactly what you want for a project like this. The entire thing is supposed to be cheap so you can distribute it widely and additional effort spent has a way higher impact if it goes to documentation, teaching materials, example projects, … than to making low-level changes most users won't even notice.


Can you buy a RISC-V device off the shelf with integrated Bluetooth?

It looks like BT was the architecture driver, so they used https://www.nordicsemi.com/eng/Products/Bluetooth-low-energy... - the radio is the difficult bit, and the processor having spare capacity is a convenient by product.


There is a very long history regarding the BBC and ARM, you could say that without the BBC ARM would not have existed at all.


> you could say that without the BBC ARM would not have existed at all

Huh, I'd not thought about it like that before. Yeah I guess ARM/Acorn does owe the BBC quite a bit!


RISC-V is the new Rust



Upvoted for being such a positive champion


Not yet. But hopefully soon.




Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact

Search: