Klimate Board for the BBC micro:bit - Review

Table of contents

RoadTest: Klimate Board for the BBC micro:bit

Author: stevesmythe

Creation date:

Evaluation Type: Development Boards & Tools

Did you receive all parts the manufacturer stated would be included in the package?: True

What other parts do you consider comparable to this product?: SparkFun Weather:bit, Pimoroni enviro:bit

What were the biggest problems encountered?: Poor documentation

Detailed Review:


Update (15 June 2019)

I worked out a way of displaying the weather station readings on a four row, twenty column display. This looks better, I think.




Thanks to element14 and Kitronik for providing me with the Kitronik Klimate board (and micro:bit) to review.


I have been a user of Kitronik components since the BBC micro:bit first came out and one of the first things I bought was the Kitronik edge connector, to allow access to all of the ports on the micro:bit (i.e. not just the three that are exposed on the micro:bit board itself). Soon after, Kitronik brought out the first micro:bit motor driver board, which I also found to be good. So, I had high hopes for this Kitronik board.


I have always been impressed that, as well as producing hardware for the micro:bit, Kitronik normally supply comprehensive documentation and support materials.


I was interested in this RoadTest because the Klimate board uses the Bosch BME280 environmental sensor, which can be tricky one to use. The sensors supply "Raw" (uncalibrated) measurements, together with up to eighteen "Calibration Constants" (three for Temperature, nine for Pressure and six for Humidity). This needs careful coding to deliver accurate results. Kitronik have produced MakeCode blocks to support the board, so I was very interested to see how the board measures up and how the readings compare with other environmental sensors that I own.


What’s in the boxes?

For the RoadTest, element14 provided the Klimate board and a micro:bit.




Klimate board

The Klimate board is identical to Kitronik’s Real Time Clock (“RTC”) board except that IC2 is populated with the Bosch BME280 i2c environmental sensor. As well as the real time clock and BME280, the board can act as an edge connector board for the micro:bit and supplies unpopulated headers for i2c, “zip” LEDs (a.k.a. NeoPixel or WS2812) and breaks out all nineteen usable micro:bit pins in what Kitronik describe as “Link compatible header pads”.


The Link connector is Kitronik’s initiative to ensure compatibility between interconnected micro:bit boards, although I haven’t come across any other companies that adhere to the Link layout. Basically it is a single row of twenty-one 2.54mm pitch header pins (including 3V and GND) in a particular order. To use the Link header pins, you have to insert the micro:bit into the edge connector facing away from the board.


{gallery} Klimate board


Bosch BME280

According to the datasheet, the sensor has an operating range of -40 to +85 °C, 0% to 100 % relative humidity and atmospheric pressure from 300 to 1100 hPa (milliBar) and a response time of 1 second.


Accuracy and resolution is specified as follows:

Humidity +/- 3 %rh, resolution 0.008 %rh

Pressure +/- 1 hPa absolute, +/- 1.2 relative

Temperature +/- 0.5 *C, output res +/- 0.05 *C


MCP7940N real time clock

Kitronik doesn’t say, but the RTC on the Klimate board is the Microchip MCP7940N. This has an operating voltage range of 1.8V to 5.5V. Operating current from VCC is 1.2 μA at 3.3V and 925 nA at 3.0V operating from battery backup. The Klimate board is fitted with a CR2032 3v coin cell battery for RTC battery backup, which is takes over automatically once the main power supply is disconnected.



Kitronik need to change their data sheet as:

  • It clearly states that they offer Micropython support (they don’t).
  • The data sheet also omits to provide details of the real time clock used (it's a Microchip MCP7940N).
  • It does not specify which micro:bit port the onboard Zip LED1 (a.k.a NeoPixel or WS2812B) on the Klimate board is connected to (it is P0).
  • It does not make it clear that the onboard LED will not light up unless secondary power is connected (i.e. powering the micro:bit via its own power/programming connection does not power the onboard LED).
  • The digital output port intended for the additional Zip expansion port is not specified (it is P1).
  • There are two empty pads on the PCB marked R4 and R5 but no mention is made of them. (These are to add pullups to the i2c line if required. Pullups are normally required for i2c lines, but the micro:bit has pullups that can be enabled).
  • The title bar on the data sheet says “BBC micro:bit Motor Driver datasheet”, instead of “BBC micro:bit Klimate Board datasheet”.



The main objective for my testing was to assess how well the instructions provided would allow the target consumer (let's say a teenager) to get started with the Klimate board.


This involved:

  • Inserting a micro:bit in the Klimate board, connecting to the PC and getting MakeCode running with the Kitronik extension blocks.
  • Writing a test program to store the date and time onto the board's EEPROM, cycling the power and reading it back out onto the micro:bit's LED matrix display.
  • Writing a test program to display temperature, humidity and atmospheric pressure on the micro:bit's LED matrix display.


Real Time Clock

The MCP7940N real time clock (“RTC”) potentially offers better accuracy than the commonly-used DS1307. However, when I tested the Kitronik RTC, it gained around 5 minutes in 21 days (around 14 seconds per day). This is disappointing. The datasheet for the MCP7940N suggests that the accuracy of this chip depends on using an external oscillator with two small load capacitors (6-9pF), the exact size depending on the PCB stray capacitance. In the absence of a circuit diagram it is impossible to confirm what Kitronik have used, but there certainly appears to be a crystal marked X1 with two capacitors adjacent, marked C4 and C5. Whatever they have chosen, it doesn’t seem to be doing a good job. The MCP7940N does have a compensation register that allows you to adjust for inaccuracy in the oscillator frequency, but there is no way of accessing this from MakeCode.



I compared the results from the Klimate board with an MCP9808 digital temperature sensor attached to another micro:bit and a DS18B20 digital temperature sensor attached to my reference Picaxe datalogger.




It's a bit difficult to read the Klimate board screen, due to too much backlighting, compared with the other two screens, but if you click on the image you should be able to see it better. As can (hopefully) be seen from the photo, the BME280 reads a little higher than the DS18B20 and the MCP9808 but all have a rated accuracy of 0.5deg C so they could all be right!


Atmospheric Pressure

Since I live less than 2 miles from London City Airport where they have (presumably high precision) atmospheric pressure sensors, I decided to compare the BME280’s readings with theirs rather than comparing it with another “hobby” sensor. I obtained a reading of 1010 mBar, compared with 1014 at London City Airport at the same time which seems a reasonable correlation.



I compared the BME280 with a calibrated HIH-4000-001 Honeywell Relative Humidity Sensor connected to the Picaxe data logger. It read between 4% and 7% rh higher than the Honeywell sensor. Of all the environmental sensors I have used, humidity seems to show the greatest variation between devices, so I was not surprised at the Kitronik board's results.


Python coding

I had planned to assess how easy it would be to carry out the same testing process with Python using Kitronik's example code (referred to in their data sheet). I queried this with Kitronik on their website and they said that they never managed to get the BME280 sensor working with Micropython, due to the limited memory available on the micro:bit once Micropython is loaded. As another roadtester pointed out, they do still have python code on their GitHub account, which does seem to work although there are no example programs provided.


I did discover two other Python libraries for the BME280 sensor.


In all cases, however, there is little, if any, room for any other code on the micro:bit and there was certainly not enough memory for me to attach an LCD screen. I conclude that the sensor is just too complicated to allow a driver to be written that is compact enough to use with micropython on the micro:bit.

Conclusions (from testing)

The BME280 sensor on the Klimate board provides a reasonable degree of accuracy and the MakeCode extension is very easy to use. The RTC did not provide the expected level of accuracy, but it is probably good enough for general datalogging, where an accurate timestamp is not important.


A slightly nit-picking observation admittedly but two of the mounting holes on the Klimate board are too near the centre of mass of the board, once the micro:bit is inserted into the edge connector. This means that the board topples over easily if you try to use it on a desk (especially when there is a USB lead connected to the micro:bit.




Putting together a weather station

Having completed the basic functionality and usability testing, I then moved on to develop a weather station application using additional components from the Grove Inventor Kit roadtest.


Before I started, I soldered on some header pins (not supplied).


{gallery} Klimate board with header pins


I already have my own home made Picaxe-based wireless weather station using a wind speed and direction gauge that I bought from Maplin a few years ago and I didn’t want to dismantle that. However, a few months after I had bought mine, I noticed that they were selling spare wind speed gauges for about £5 and I bought one as a spare since I know they wear out eventually. The Maplin gauge is a rebadged “Fine Offset” windspeed sensor that is used in several other weather stations. Having that sitting in a box, I thought I’d use it to complete the micro:bit weather station. Not wanting to lose the RJ11 plug, I made an RJ11 adapter to connect the wind sensor to the Klimate board’s GPIO pins.


The outdoor part of the weather station is the Klimate board with micro:bit, a power supply and the windspeed sensor (connected between 3v and P8 so that a pulse is detected on P8 when the reed switch in the sensor closes). I didn’t have a spare wind direction sensor but I don’t find them terribly useful where I live as there are too many trees that cause random air currents. The outdoor part transmits the sensor data using the micro:bit’s onboard radio.




The Klimate board can be powered either from the micro:bit’s USB connection, a separate (power-only) USB connection on the board, or screw terminals. The power connections are regulated down to 3.3V on the board, and I used an Adafruit Powerboost 500+ to provide 5v from a 3.7V Lipo battery via a USB connector.


As I already have a wireless weather station, I didn’t try and make an enclosure for the Klimate board plus micro:bit. Ideally, the Klimate board would sit inside a Stevenson screen and the windspeed sensor would be mounted on a pole well above roof height. I suppose I should make one, one day, but for the time being, my weather station sits inside a box under the eaves of my garage and the wind sensors are on a pole on top of my garage.




Making a similar box for the Klimate board wouldn’t be too difficult, although having the micro:bit vertically mounted in the horizonatal Klimate board means that the enclosure would need to be cube-shaped, which doesn’t suit the majority of the project boxes that you can buy.


The indoor part consists of another micro:bit mounted in the Grove base shield. It receives the sensor data via radio and displays it on an I2C LCD screen and a Grove neopixel strip also provides a quick visual indication of the outdoor temperature (red is hotter, blue is colder, number of pixels lit up increases with temperature). Due to the current requirements for the neopixel strip, I powered the Grove base shield from a Raspberry Pi 2.5A power supply via the base shield’s USB power connector.




The MakeCode blocks for the “sender” and “receiver” are shown below. The code just counts the number of pulses per second and uses the manufacturer’s provided formula of 1mph=1.5 pulses per second. (n.b. If you wanted to add a wind direction sensor, you would need to use an "analogue read" block to measure the resistance across the sensor's terminals as it spins round. This is because wind direction sensors use a resistor network coupled with a reed switch to detect which way the pointer is facing).








Alternatively, you could cheat slightly, and just use the SparkFun weather:bit MakeCode extension which works out the windspeed for you (as well as providing temperature, humidity and pressure readings).





Having said that, the SparkFun MakeCode extension produced sensor readings that were way out, compared with the Kitronik extension (and my reference sensors). For example, when the weather station at London City Airport was reading 1027mBar, the Klimate board with the Kitronik extension gave a reading of 1023mBar but the SparkFun extension gave a reading of 1059mBar.


My coding is pretty basic and I didn’t try and distinguish between gust windspeed and average windspeed, although this wouldn’t be too difficult. Due to constraints with sending data by micro:bit radio, the data from each sensor has to be transmitted in turn every 250ms and the windspeed is updated every second. It would be possible to send all of the sensor data at once (and update the receiver unit more frequently) if you encoded the four variables as one number and then decoded it at the other end but once a second seems fine for weather data. The video below shows the sender at the bottom of my garden (you can just see the anemometer turning slowly), and the receiver in the kitchen. It worked pretty well, and the radio signal could be received from even further away. Notice the neopixel strip used as an at-a-glance temperature display.




Overall assessment of kit

Although I can envisage situations (like data logging) where having environmental monitoring sensors AND a real time clock would be advantageous, I feel that this board has missed the mark slightly.


The SparkFun weather:bit is a similar price, but would be a better choice as the basis for a weather station because it provides two convenient RJ-11 connectors for the Fine Offset windspeed/direction and rainfall sensors, breakout sockets for an OpenLog data logger, I2C breakout and two screw-terminal analogue connectors. The SparkFun MakeCode extension software also provides support for the popular (and accurate) DS18B20 one-wire digital temperature sensor. SparkFun sell their own re-badged version of the Fine Offset wind speed and direction sensors for a fairly pricey £70 (including mountings).


I know that the Klimate board is not specifically designed for use in a weather station but it’s an obvious application. If you do want to use it as a weather station, you should be aware that having the micro:bit at right angles to the board makes it difficult to find a convenient-sized IP55 box as it is as tall as it is wide. I think it would be neater if it had an edge connector that allowed the micro:bit to sit above the PCB. The Sparkfun weather:bit has the edge connector flush with the PCB, which is a slightly better design for a weather station, but still not ideal.


In compensation, the Klimate board does breakout all nineteen usable micro:bit pins (although only if you insert the micro:bit in the edge connector so that it is facing the other way). So, as a more general-purpose environmental sensor board, the Klimate probably has the edge. Having had high expectations of Kitronik’s documentation and support, I was disappointed that the data sheet was inaccurate and missing so much crucial information. Also, there were no tutorials for how you might use the board. As an experienced user this was not a problem for me personally, but I think the target users might be left struggling a bit.


The Pimoroni enviro:bit contains the same Bosch BME280 sensor as the other two boards but includes a colour sensor and a MEMS microphone. Unlike the other two boards however, it does not break out any spare micro:bit pins so it is a lot less versatile. It also costs around £20.


My verdict: go for the SparkFun weather:bit if you want to make a weather station, choose the Kitronik Klimate board if you want a micro:bit breakout board with a real time clock and the BME280 environmental sensor included and buy a Pimoroni enviro:bit if you need to code in Python and want a BME280 sensor, sound sensor and colour sensor but don’t need to connect any other components.