Thanks to the generous folks at Silicon labs, two months ago I found a package containing a Thunderboard Sense at my doorstep. Many thanks for giving me the chance to review this board! (And a big sorry I didn't finish this review sooner)
This wasn't the first board from Silabs that I got to see, but it was the first one to come in a different package size. My first thought was "**bleep**, that thing is small!"
Nice touch: this was the first Silabs (or Energy Micro) board that came in a smaller packaging, which makes sense since it really is just the size of 2 CR2032 cells (OK, just a little bit bigger). Although the parcel it came in was way too big as usual
I applied for this review since when I saw this board I had immediately three different applications in mind:
Given the number of sensors on this board it seams quite natural to use it to monitor environmental conditions. It would be quite interesting to add a large battery and a solar panel and then mount it on the top of our house (there is already a satellite antenna beam there) so I get my own weather station. It would need a clear side wall to measure ambient light, and some holes so it can measure humidity. Most sensible would be the usage of a radiation shield (such as these). But since its winter here in Europe this doesn't look like an inviting project at the moment...
Skiing is more interesting. Two years ago I create the "Skier impact monitor" (SkiMon for short) for an Element14 challenge. SkiMon was designed so I could track the effects to the head whenever my son (who started downhill skiing back then) would tumble or hit something.
The Sense Board would add a Gyro sensor to the mix, and have them together with the acceleration monitor and the BLE chip on one small board. This means it could be even smaller than my original solution. I had this in mind for the Thunderboard React board already, but this doesn't come with programming capabilities on board, so it was difficult there. For this project you really need to program the BLE chip, since you need to gather data with a high frequency (about 1000 samples per second) to aggregate them together and calculate the effects of any impact (see this posting about the Head Injury Criterion). Unfortunately there are two road blocks for this project: First I need to change the firmware to do all the calculations, and development requires an IAR embedded workbench license (more to that further down). Second the acceleration sensor must be able to handle high impact forces (a hard impact can easily reach 100g for some short moments). And the ICM-20648 can only handle 16g. Bummer (I still do know only about three chips from Analog Devices which can handle such forces - back then I used the ADXL375).
This leaves the heating system monitor project. The idea for this also came from a skiing vacation - some years ago the heating system went down while we were skiing. And since there were -20°C outside the house was just above the freezing point when we came back. Since then I have a mbed board running which pushes the current temperature of one room to the cloud so I can look for problems. It would be nice to have a solution in place which is much smaller, and also alerts me (by short message or email). Since I already have an OpenHAB server running, this would be a perfect integration. And the air quality sensors can tell me when something else is wrong. So I went out to see how well the Sense board works as environmental sensor.
Having a deeper look
As I said already - the Thunderboard Sense is much smaller than the other Silabs (or EnergyMicro) boards (apart from its sibling, the Thunderboard React). Both are about 45x30mm - as a comparison you could fit two CR2032 cells on them.
While the React board comes just with a motion sensor (acceleration and rotation) and a temperature+humidity+light sensor, the Sense kit (as the name implies) packs much more sensors to the board:
All of these do fit on such a small board, together with
This is quite a powerful package! Unfortunately it also means the board is so densely packaged that there is no real silk screen designating the components (the are no numbers for the IC on board). Fortunately all of the sensors are accompanied by small images showing their function (although it took me a while to discover this - the gold-coloured silk screen is quite unobtrusive).
So after inspecting the board, the first step was to download the Thunderboard app. Since I have a set of devices, I tested on a range of them. I used my iPad Air for iOS, and my Nexus 5 for Android. Since I was not able to connect the Thunderboard React to the Nexus 5 when I played with this board, I also took my old Samsung S4 mini from its archiving box (just to be see whether it fared better). Download was easy, and I was able to connect with all three devices. So the next step is playing around with the app and taking measurements.
The Thunderboard app comes with multiple pages which can be select from the start screen (after connecting to the board). The Motion page shows the accelerometer / gyro data (even in 3D , the Environment page all the sensor data, and IO allows to control the LEDs on the board. When looking at the sensor data, its possible to stream all data to the cloud (Thundercloud, that is) so you can get historical data and nice graphs.
Time for some measurements
The temperature seemed to be a bit on the high side - it showed 28.5°C where my other thermometers show only 27° (and they agree mostly). But it settled down after while, so maybe this was me handling the board. (The Sense board itself was in my room for several hours before testing so it should be settled). So this seems to be fine (and probably still within spec of all sensors involved).
Since I was in my study, I looked at workplace lighting (hey, there is a ambient light sensor in this thing, why shouldn't I use it?). After finding out how to orient the board properly (look for the small silk screen symbols for the sensors) it showed that my work desk has about 740 Lux, and with an additional direct light it goes up to 1200 Lux. According to this report this is more than sufficient. But OTOH the air in my room is too dry (its a typical winter problem).
Next test was looking at the microphone. I originally ignored this sensor, but the Thunderboard app uses it to show the ambient noise level. And since I have a 3D printer right beneath my desk, it was interesting to see how loud it really gets. The app showed between 43 and 50db when the printer was idle (this is due to the fans), and depended a little bit on the orientation of the board. So I put it in a fixed spot right at the printers base plate (its mounted on a wooden board). When running, the noise goes up to 60db with spikes up to 67db. Interestingly the noise level didn't account for mechanical vibrations at lower frequencies which (at least to my subjective feeling) are even louder. Either the microphone cannot handle them or they are filtered by the boards firmware somehow. As a comparison: the noise floor in my study is at about 38db with just my (nearly silent) PC running and the windows closed. This is quite OK, and the printer seems to be at an acceptable level.
While doing these test prints I also looked at the air quality. I'm printing with PLA so there shouldn't be a problem, but its always better to verify The air quality sensor needs some start-up time, even though it shows up in the app after about 30 seconds or so. Carbon Dioxide level was at 400ppm when I started (which is nearly outside air quality - I was venting the room before), and the VOC level was at 0ppb (which seemed strange). During printing the VOC rose to 3ppb, and CO2 stayed constant. Unfortunately I did not find any actual data which VOCs the sensors measures. And all the documents I found about air quality differed in the recommended threshold levels because they looked at different kinds of VOCs. But 3ppb should fine according to all of them...
For acceleration and rotation I did not make tests since I looked at them with the React board already (although I need to write the review for that too, shame on me). The biggest drawback I see here is that there are not enough measurements sent from the board to the app, so any graphs you make are not fine enough in their time resolution.
And I also did not look at the air pressure - I have nothing to compare it to, and on its own it is not really interesting. I just assume that it will work properly, like the rest of the board does.
I did experiment with the LEDs a little bit, and can confirm that you can indeed control them from the app (provided that you power the board from USB and not via the coin cell).
Unfortunately I did not have time to measure power consumption. One would either need a connector with 1.25mm pin pitch, or need to solder to the expansion connectors. But the Sense board uses an elaborate scheme to power all the sensors only when they are needed. This way it should keep the overall power consumption quite low, especially when the sensors are needed only once in a while.
How to monitor a heating system
My next test was to see how well I can use the Thunderboard Sense (together with the app) to monitor my heating system. Its a gas heater (nearly 20 years old, but quite efficient for that time, and its build robust). I placed the board about 50 cm away and powered it by an USB supply. I also powered the S4 mini via USB (and disabled any standby function so it would run until disabled). Then I connected the board to the app, enabled cloud streaming (so I would get nice graphs) and went to work. Unfortunately I found out that the app stopped sending any data after about an hour and said it got disconnected from the board. When repeating this experiment, the app disconnected after 30 minutes. That's not nice! When I tested with my Nexus 5, it got disconnected even faster. I then tested again with the React board - it could not connect to that one either (as before). Then I switched to my iPad Air, and lo and behold, it was able to stream data to the cloud for as long as wanted it to (or at least could abstain from using it...). So it seems either Android has a general problem with BLE (which I cannot confirm from my own work with it) or its the Thunderboard Android app.
So here is the graph I got from my experiments:
Thundercloud allows you to download the captured data. For that I did send the link to the last data set from the app via email, opened it with m,y browser and from there one can the navigate and download. The CSV files can be opened with LibreOffice, and then I create a diagram showing what I need.
Its interesting to see that the temperature curve is nearly flat. Even though the heating is configured to lower the temperature during the day by several degrees, the room with the heater stays at the same temperature. And the board was far away enough to not capture the heat from the actual flame.
The VOC levels are interesting - I started my measurements in the morning, right after the heater was running for longer periods to get the water hot and the rooms warm. So there were plenty of VOCs around, but their level fell over the day (since the heater is running less frequently - its doesn't need to keep the water and the rooms that warm). The same can be seen with carbon dioxide, just not as pronounced. In the afternoon the heating started again, because its configured to heat up the rooms before we are back at home.
Its interesting that there are large spikes of VOC and CO2 levels. Either the heater sometimes really produces these levels, or something peculiar happens with the air quality sensor. Unfortunately I was not able to find any data sheet for the CCS881 sensor, so I cannot dive deeper into that. (Its similar for the ICM-20648 - there is a data sheet but you need to sign an NDA for it...)
Most surprising for me was that the microphone was a really good indicator whether the heater is running or not. The flame is loud enough to be picked up well enough that one can see the heating periods, and even the longer runs in the afternoon. I found that interesting, and would try to incorporate that into a monitoring solution.
I later did run a test with the board nearer to the heater and the flame, and then the heating periods were more visible, but still not that much. It seems one needs a thermocouple really close, or an IR / thermopile sensor for that.
So after all these tests I can say that the Thunderboard sense really is a nice board and very capable. The application support for Android seems to be sub-optimal for the moment, unfortunately. To create a real monitoring solution (or a weather station), one probably needs a BLE app running on a PC (or maybe a RaspBerry PI), and a customized firmware on the Sense board.
And this is then my last topic for this review: firmware development. In the past I did several projects and experiments with the EFM32 MCUs, and was quite spoiled by Simplicity Studio and all the support. I always found development easy and well-supported. This is especially true since I'm a long-time Linux used and do all my work there whenever possible. And Energy Micro, and also Silabs later on supported that well. But when I looked into the documentation for BLE development, the picture was completely different. For BLE development one needs an IAR embedded workbench license, since the precompiled BLE stack library only work with that. I can understand that the BLE stack is delivered as library (regulatory reasons most probably), but requiring a separate tool for working with it? IAR only runs on Windows, and they do not even state prices on their web site (but from what I found it seems to be several thousands of Euros).
Fortunately after some swearing and spending time with Google I found two ways around that:
First, there is work underway to have the BLE stack compile with GCC (and so it should work with Simplicity Studio again). Its not officially released, but a preview is available from the knowledge base (and also see the discussion). Maybe in some months this can be a stable solution.
The second solution is to use BGScript. I always thought that this is intended for the BlueGiga modules only, but the developers guide explains how to use it for other EFR32 chips too. You just need to know the correct EFR32 part number, and hand this to the BGScript compiler. So I tested this with one of the example BGScript firmwares (which converts implements the temperature sensor BLE profile), compiled it and uploaded it to the Sense board (via the "Flash Programmer" tool), and it appeared as a different BLE device now (and needs a different app). Evewn though I could connect fine to the board, the app could not read the temperature. The reason: its doesn't know about the power and interrupt controller of the Sense board, so the sensor is still disabled. So the biggest problem with using BGScript is that you cannot re-use the Sense board demo firmware to talk to all the sensors, but need to implement anything from scratch. And since for some of them no data sheets are available, this seems difficult.
So it seems I should wait for the GCC BLE stack to be officially supported.
After playing around with programming I wanted to re-install the original firmware (to get some screenshots of the app for this review). It is only available when BLE stack 2.0.1 is installed (which is not the newest version), and can be selected from the "Getting started" section of Studio. Unfortunately after doing only the S4 mini would find the board in the Thunderboard app. I suspect that the board initially came with a newer firmware which is not available in the BLE SDK (see the forum discussion). So it seems I really need to look into the development setup...
So what's my verdict for this review? Thunderboard sense surely is a fine board, but the software support (especially for Android) needs some more work. Also, currently BLE development is only feasible right now if you are willing to invest some real money (at least for hobbyists and small companies) or willing to work with beta and preview versions (BGScript doesn't seems capable enough more my needs right now, but I need to have a deeper look into it).
I surely will experiment with, and follow the state of the BLE stack GCC support. When it reaches a usable state I will come back and look at how to implement my own firmware. Only then I will decide whether it will end up on my roof or near the heater
Thanks for a great review, really nice article!
>> I surely will experiment with, and follow the state of the BLE stack GCC support.
I'm happy to announce that the BLE SDK 2.3.1 was just released and with this version the ThunderBoard Sense app can be built with GCC without any tricks or hacks - just create the project and hit build.
(GCC support was added in 2.3.0 but there was still some integration issues with the TB sense example - these were fixed in 2.3.1)