BBC Micro Bit, (micro:bit) is an open source hardware ARM-based embedded system designed by the BBC for use in computer education in the UK. The device is half the size of a credit card and has an ARM Cortex-M0 processor, accelerometer and magnetometer sensors, Bluetooth and USB connectivity, a display consisting of 25 LEDs, and two programmable button.
Depending on where you purchase it the price ranges between $15-$20. So this is a very attractive module for the beginning programmer.
The micro:bit module has 2 buttons to interface to it and a small 5×5 LED screen. This is good for small tests but its a little limiting.
For the most part micro:bit is a standalone unit so in this blog I wanted to show how to put micro:bits information on to a Node-Red web dashboard that could be viewed from a smart phone, tablet or PC.
Micro:bits Setup
The micro:bits has a USB connection that can be used for communications to PCs or Raspberry Pi’s. For my setup I used a Raspberry Pi Zero W, with a microUSB-to-USB adapter to connect into the micro:bit.
The micro:bit can be programmed via a nice Web Interface, for details see: https://microbit.org/guide/quick/. For this application I programmed with blocks.
My logic had the temperature and light sensor values written out ever 10 seconds, in the format of: T=xxx, L=xxx, I used a comma separator between the data pieces. Button presses were sent as either A=1, or B=1, .
Node-Red Setup
Node-Red is pre-install on the Raspberry Pi image, if you want to use a PC instead see the Node-Red installation documentation.
A Node-Red has a Serial port component (https://flows.nodered.org/node/node-red-node-serialport) that can be loaded manually or via the Palette Manager.
The first step is to insert a serial input node and define the serial interface. Double-click on the serial input node and edit the serial connection. The interface will vary with your setup but node-red will show a list of possible USB ports. The default baud rate of the micro:bits USB port is 115200. I used a timeout of 200ms to get the messages, but you could also look for a terminating character (the comma “,” could be used).
The logic used 4 Javascript function nodes to parse the micro:bit message
“Get Temp Value” Function:
// Pull out the temperature // var themsg = msg.payload; if (themsg.indexOf("T=") > -1) { var msgitems = themsg.split(","); var temp = msgitems[0]; temp = temp.substring(2,4) msg.payload = temp; return msg; }
“Get Light Value” Function:
// Pull out the Light Sensor Value // var themsg = msg.payload;</pre> if (themsg.indexOf("T=") > -1) { var msgitems = themsg.split(","); var light = msgitems[1]; light = light.substring(2,5) msg.payload = light; return msg; }
“Check Button A” Function:
// If the message is Button A pressed // "A=1," if (msg.payload == "A=1,") { msg.payload = 1; return msg; }
“Check Button B” Function:
// If the message is Button B pressed // "B=1," if (msg.payload == "B=1,") { msg.payload = 1; return msg; }
Chart nodes are used to show the results. (Note: you’ll need to create a dashboard name).
For the button presses a 1-0 transition is needed after a button press, otherwise the chart will always show a value of 1. The 0-1 transition is done using a trigger node.
The final web dashboard is available at: http://your_node_red_ip:1880/UI.
Final Comments
The next step will be to add the ability to have Node-Red write values to the micro:bit. This would be done with the Node-Red serial output node. Micro:bit’s have a serial read function that would then process the command.