Connect BBC micro:bit to Sigfox
Internet of Things (IoT) has become an integral part of our daily lives, operating silently in the background. IoT ensures that our trains, buses and taxis arrive on time. IoT warns us when the air becomes too polluted for us to breathe. (中文版)
Yet few children understand IoT concepts like Sensors and how Sensors are connected into Networks. And the consequences (potentially disastrous) of a faulty Sensor or Sensor Network.
A BBC micro:bit connected to the Sigfox IoT network is the perfect way to help kids understand how Sensors and Sensor Networks operate. The micro:bit is a good representation of a modern battery-powered sensor device, with ample processing power and support for most types of sensors. For education, Sigfox is likely the cheapest option today for experimenting with a city-wide sensor network.
In this article I’ll walk you through the steps for creating your own BBC micro:bit IoT device connected to the Sigfox network, like in the above video.
The micro:bit IoT device shall be powered by two AAA batteries, so that it will operate anywhere in the city. Free from the power and network constraints that bind many devices to a fixed location.
Like a real IoT sensor, our micro:bit shall transmit real sensor data in real time to the internet cloud. We’ll use the built-in sensors on the micro:bit to transmit the temperature, light level and acceleration.
There’s a high chance that your location is already covered by the Sigfox network that spans 50 countries across the globe. Check your coverage here.
The complete source code may be found in my GitHub repository…
Prepare The Hardware
To build the micro:bit IoT device, we’ll need…
1️⃣ BBC micro:bit with battery holder and two AAA batteries
2️⃣ Edge Connector Breakout Board for the micro:bit. I tested the Kitronik breakout board for this article.
3️⃣ Breakout Board for Wisol Sigfox Transceiver: Our micro:bit will transmit sensor data to the Sigfox network via the Wisol WSSFM10RxAT module.
To buy the Wisol Sigfox Breakout Board, browse the official list of Sigfox developer kits and click the
Zone box to filter by your region (e.g. Sigfox Zone
RCZ 1 for Europe,
RCZ 2for US).
Choose a breakout board that’s based on Wisol WSSFM10RxAT (where “x” denotes 1, 2, 3 or 4 for the four RCZ zones). And it should be powered by 3.3 volts, not 5 volts.
You may also buy the Wisol Sigfox Breakout Board from the Tindie marketplace. This is the breakout board that I tested for the article…
Breakout Board of WISOL Module for SIGFOX Network from Upton’s Gadgets on Tindiewww.tindie.com
If you’re using the above breakout board, remember to get the right U.FL antenna for your region: 868 MHz for
RCZ 1 (Europe and Middle East), 902 MHz for
RCZ 2 (US), 923 MHz for
RCZ 3 (Japan), 920 MHz for
RCZ 4 (Australia, New Zealand, other parts of Asia).
I have tested this antenna for
RCZ 4 (the one at the top of the photo).
Important: Always connect your antenna to your Wisol Sigfox Breakout Board before powering on the Blue Pill. Otherwise you may damage the Wisol module!
Connect The Hardware
Slot the micro:bit into the micro:bit Edge Connector Breakout Board. Follow the above diagram to connect the micro:bit Edge Connector Breakout Board to the Wisol Sigfox Breakout Board…
micro:bit Pin P0 (TX) → Wisol Pin RX (Blue)
micro:bit Pin P1 (RX) → Wisol Pin TX (Green)
micro:bit Pin 3V → Wisol Pin 3.3V (Red)
micro:bit Pin GND → Wisol Pin GND (Black)
When connected, our IoT device should look like this, powered by the batteries at the left. The U.FL PCB antenna is at the bottom edge. This article explains the functions of the micro:bit pins.
Fetch The Source Code
Click the link below to open micro:bit MakeCode, the web-based visual programming tool for micro:bit…
1️⃣ Click the
Import button at the right.
3️⃣ Enter the URL:
4️⃣ When the project has been loaded, click
Blocks at the top to reveal the visual program (see below).
Configure The Program
Setup Sigfox Block at the top, click the
COUNTRY box and select your country. This configures the program to transmit sensor data to the Sigfox network using the right country-specific settings.
The block also specifies the sensor names
“tmp”, “lig”, “acl”. These are the sensor values that we will be sending to the Sigfox network.
Blocks tab to switch back to the Blocks view.
Read The Sensors
Run In Background blocks above are responsible for reading the micro:bit onboard sensors (temperature, light, accelerometer) at regular intervals, also for transmitting the sensor values to the Sigfox network.
The micro:bit is capable of running multiple tasks concurrently in the background. We’re exploiting this capability to handle each sensor with its own processing logic, so we could read each sensor at different intervals, for example.
The Temperature Sensor Block reads the temperature sensor and assigns the value to the
tmp variable. The variable is then sent to the Sigfox network via the
Send To Sigfox function. The first parameter of the function (
“tmp”) identifies the sensor value that we are sending.
The Temperature Sensor Block waits 20 seconds (i.e. 20,000 milliseconds) before repeating the steps in the
The Light Sensor Block and Accelerometer Sensor Block operate the same way, reading the micro:bit’s light and accelerometer sensors and sending their values to Sigfox.
The sensor names
“tmp”, “lig”, “acl” should match the parameters of the
Setup Sigfox function.
Aggregate Sensor Values
The Sigfox network is dedicated for connecting IoT devices, so it only allows small, infrequent messages to be sent, up to 12 bytes per message, 140 messages per day. To optimise the transmission of Sigfox messages, we combine the three sensor values into a single message, transmitted to Sigfox in 20-second intervals.
Our Sigfox message looks like this…
0017 0310 2310 9860
- message sequence number (
- temperature (
tmp = 31.0)
- light level (
lig = 231.0)
- acceleration (
acl = 986.0)
aggregate.ts. To learn more about the aggregation logic, check out the section “Watch Blue Pill Run” in the article “Connect STM32 Blue Pill to Sigfox”. Instead of the BME280 temperature / humidity / altitude sensors mentioned in the article, we’re using the micro:bit’s temperature / light / accelerometer sensors instead.
Pair The micro:bit
Before downloading our IoT program to the micro:bit, we need to pair the micro:bit with our computer.
1️⃣ Connect the micro:bit to the USB port of your computer.
2️⃣ Click the
More icon (the cogwheel icon) at top right. Click
3️⃣ In the “Pair Device” box, Click
4️⃣ Select your micro:bit in the list that appears. Click
If the micro:bit was not detected, follow the instructions below to upgrade the micro:bit firmware, then repeat the above steps.
Download And Run The Program
To download the program to our micro:bit, click the
Download button at the lower left. After downloading, the program starts running.
In a while the
Show Console (Device) button appears. Click the button. (Make sure it’s not the
Show Console (Simulator) button)
Here we see the graphs of the temperature (
tmp), light (
lig) and accelerometer (
acl) sensor values, rendered in real time as our program reads the sensors.
Below the graphs is the debug console. The debug console displays debugging messages that were generated by our program. It’s useful for troubleshooting the program because it shows the sensor values that have been read and their transmission to Sigfox. Take note of the lines….
<< wisol.getID 003FA49D
<< wisol.getPAC B99F7CE054591652
These are the Sigfox Device ID and Porting Authorisation Code specific to your Wisol Sigfox module. You may require them for activating your Sigfox connection. To see a sample debug console log, click here.
Our micro:bit is now flashed with the IoT program. Whenever the micro:bit is powered on via USB or batteries, it will start operating as an IoT device, reading sensor data and transmitting to the Sigfox network.
Disconnect the micro:bit from your computer and switch to battery power. We’ll now check the Sigfox messages transmitted by our micro:bit.
Monitor Sigfox Messages
Follow the instructions provided by the makers of the Sigfox breakout board for activating the Wisol Sigfox module online. You’ll be guided through the steps to create a user account on the Sigfox Backend portal.
Device → Messages to check the messages sent by your micro:bit to the cloud. The messages will pop up in real time on that screen as the messages are received from your micro:bit. If you don’t receive any messages, try bringing the micro:bit outdoors or shift it closer to the window.
The message data (e.g.
0017 0310 2310 9860) contains the message sequence number (
0017), temperature (
31.0), light level (
231.0) and acceleration (
Do you need to visualise the sensor data? Or trigger alerts based on some sensor data rules? That’s all possible with the Sigfox callback feature.
Now you have your very own battery-powered IoT device that will transmit sensor data from anywhere in the city!
Better Living Through IoT
My IoT students at Temasek Polytechnic are about to conduct some experiments on IoT Education for kids — that’s my motivation for creating the code in this article.
As we have seen in this article, it’s easy to create a sensor device for demonstrating sensor networks and IoT, by reproducing real-world sensor applications. With better tools for IoT Education, I hope people around the world will better appreciate the impact of IoT on our daily lives.
Technical Challenges — Serial API
(This section dives deep into micro:bit technical issues that I encountered while creating the code for this article. You may skip to the next section if you’re not into the technical details.)
The creators of the BBC micro:bit (including Lancaster University) did a fantastic job. The micro:bit platform is much richer than I had imagined. Check out the micro:bit platform design.
Since I’m teaching IoT with the Arduino and STM32 Blue Pill platforms, I have difficulty adapting to some of the restrictive features in the micro:bit. The Serial API is one of them…
Direct the serial input and output to use the USB connection.makecode.microbit.org
Normally the Serial I/O is connected to the USB port. So that we may observe the debug messages on the console. For sending commands to the Wisol Sigfox module, I had to redirect the Serial I/O connection to pins P0 and P1…
Configure the serial port to use the pins instead of USB.makecode.microbit.org
This causes a contention for the Serial API — I can’t display a debug message on the console while I’m talking to the Wisol module. As a result I have to use a message queue to enforce sequential access to the Serial API. And there is some ugly code that switches between the USB and Wisol connections.
The switching of Serial I/O doesn’t seem to be clean — some garbled data gets sent to the Wisol module. Which causes some Wisol commands to fail and get retried. Compare this with the STM32 Blue Pill, which has separate ports for Serial I/O (i.e. UART1, UART2).
Read a text from the serial port until a delimiter is found.makecode.microbit.org
To keep the code simple and educational, I used the
serial.readUntil() function to read data from the Wisol module until the end-of-line delimiter
\r is found. What happens if the data is garbled? The delimiter may never be found. This causes a backlog of messages in my custom Serial I/O message queue, eventually running out of memory and forcing the micro:bit to reboot.
So you may observe a period with no messages being sent (or truncated messages), followed by a reboot and the message sequence number restarting at 0.
I could implement a “watch dog” task to catch this problem and reboot sooner. But that makes the code harder to understand and maintain. So the code in this article is not meant for use on production IoT devices. Though it got me thinking — what if I could reimplement the micro:bit runtime on STM32 Blue Pill and open-source
libopencm3? Could we actually use the MakeCode visual programming tool to create production-ready code for STM32 Blue Pill devices?
If you’re keen to use MakeCode and Static TypeScript for STM32 Blue Pill, drop me a note!
The Sigfox IoT code in this article was ported from C++ to Static TypeScript for the micro:bit. The original C++ code for STM32 Blue Pill and Arduino is explained in my previous article…
Are you creating a cloud-connected IoT device for commercial use that’s inexpensive, works with all kinds of sensors…medium.com
Although micro:bit doesn’t support the full set of multitasking functions, I have ported a small subset of the cocoOS multitasking library (for STM32 Blue Pill and Arduino) to the micro:bit…
2018-09-04: cocoOS, the IoT OS! coocOS is finding its way into the IoT world. This makes perfectly sense, as cocoOS is…www.cocoos.net
The micro:bit version of the cocoOS library may be found in