The new Simblee has been on the market for around a year. How can you use the Simblee BLE in your next IoT project? How easy is it to create nice looking smartphone apps straight from the Arduino IDE?
How does it perform in a real world example?
This review will be taking a look at the Lilypad Simblee. There's not much to say about the Lilypad side as it's all you expect from a Lilypad, but there's certainly a lot to say about the Simblee.
The Lilypad Simblee is everything that you will come to expect from a Lilypad. It has on it's typical round package:
- LiPo connector and charging circuitry.
- On/off switch.
- Reset button.
- User programmable LED.
- FTDI programming header.
- 7 fabric wiring points.
I tend to use the Lilypads a lot, but not in the usual manner, because they are the cheapest way to get LiPo battery supply in a small enough package. Even though these days you don't have to worry about static electricity so much, the Lilypads will reduce the chance of any potential anti-static damage because they are designed to be on clothing.
This Lilypad has the Simblee module soldered on, which is the next generation of BLE modules. On the Lilypad you will only have access to 7 of the 29 GPIO pins that the Simblee is capable of.
However, one great feature of the Simblee is the ability to redirect GPIO pin functionality around. So you can redirect the I2C or SPI bus to any of the 7 pins on the Lilypad. Nice!
The Simblee has a everything the Maker would need:
- ARM Cortex M0 MCU
- 6x ADC
- 2x PWM
- 2x master/slave SPI
- 2x I2C
- 1x UART
- Temperature sensor
- 24K RAM
- 128K flash
- Onboard 16MHz and 32KHz crystals
- Bluetooth antenna
- Battery monitoring
- Over The Air programming
- 1.8v to 3.6v power
Programming is via a standard FTDI header, but make sure you get the 5v version as the 3.3v version apparently can't source enough current from the 3.3v rail.
The Simblee also supports AES encryption. This is a must have for any IoT application, and I would steer clear of any MCU that doesn't have this capability when using it for IoT. It also supports CBC-MAC and CCM which adds a further layer of security.
The Simblee also has several Low Power modes with the Ultra Low Power sleep mode only consuming 600nA, and ULP with clock consuming only 4uA. Theoretically you could run it on a coin cell battery for years! Check out the datasheet for further details.
This is one seriously nice module, but this isn't all! The Simblee offers you the ability to create mobile smartphone and cloud applications without having to throw yourself into yet another IDE. You can do this all from the Arduino IDE! See later in this article for examples.
Installing the board enabler for the Arduino IDE is easy enough. If you are running v1.6.6 or later then enter into the “Additional Boards Manager URLS” this:
If you see the below error when compiling, then you are using the wrong version with your IDE.
Make sure that you remove any older versions otherwise you will see errors like this:
The Simblee API comes in 4 main parts. Check out the full API on the Simblee website.
This API provides all the basic control over the BLE module. It allows you to change the devicename, power levels, and iBeacon data and advertising rates. It also provides callbacks for device connects/disconnects, signal strength, RX data and wake from sleep interrupts.
Unlike AT style control of a BLE module the Simblee API functions can be called at any stage.
SimbleeCOM provides bidirectional communications and has two basic functions. (a low latency high performance protocol designed for high noise environments supporting both AES encrypted and non-encrypted communication. This is a failry basic API that has only two functions:)
- SimbleeCOM.send - which does the obvious.
- SimbleeCOM_onReceive - which is a callback function for received data.
SimbleeForMobile is probably the most interesting API. This is the API that allows you to create iOS and Android applications that interact with your Simblee. It's great because you can target both mobile platforms without having to touch iOS Xcode or the Android SDK.
You first have to install the Simblee app for either iOS or Android after that everything is created from the Arduino IDE.
SimbleeForMobile provides all the typical graphics and control APIs that allow you to create some decent apps.
- Drawing rectangles with solid or gradient fills, or alpha transparency.
- Images with a limit of 31, but I doubt it'll be reached as the images have to come from the onboard Simblee flash. You can also make use of a selection of images built in to the smart phone app.
- Buttons of various sizes and styles.
- Text fields.
On top of these basic graphics primitives you also have:
- Functions which allow you to update an object once drawn on the screen. Important for adjusting a slider from the Simblee.
- Functions which allow you to capture events from any of the objects on screen. Only basic events such as press, release, drag, and position are captured on those objects not advanced events such as multitouch.
- A cache mechanism that will cache data on your smart phone to speed up application responsiveness.
- Creating multiple screens in your application allowing for a fairly complex application.
At the end of this article I'll show you some further examples.
SimbleeCloud attempts to provide the complete IoT architecture for you to use for free. It allows bidrectional communications between nodes and modules. This, along with SimbleeForMobile, well and truely targets IoT. All you have to do is signup at https://admin.simbleecloud.com/ and you can get to work straight away. You will have access to all your modules, and services and you can connect arbitrary web pages to your SimbleeCloud account and associate to devices. This means that not only do you have the power to create applications for your smart phone, but also for the web.
Real World tests
So what's it like in a real world scenario?
Well, frankly, it's dead easy. There's a bucket load of examples provided to get you started.
The two examples you can try out of the box are the LEDButton and Temperature examples. They both worked as expected without any issues.
However, one problem I did see was that when using the SimbleeForMobile API you need to call the SimbleeForMobile.process() function within every 2 seconds, otherwise the iPhone will report a lost connection.
I then took a look at how it would work connecting it to an iPhone app without using the SimbleeForMobile API. Just to see if there was any limitations in the Simblee firmware.
So I attached an MPU6050 IMU to the I2C bus, wrote a simple sketch and iOS application that would display the IMU data from the Simblee.
It performed quite well and I was hitting probably the peak of BLE data transmission at 12 IMU samples per second.
Another issue I found was the fact that the SimbleeCOM API limits data packets to only 20 bytes at a time. This just means you have to provide your own round-robin buffering techniques.
So, what would you use the Simblee for?
The small serial packet transmit size, and BLE radio priority makes this device useful for adhoc iBeacon applications that require low CPU power.
- Home automation
- iBeacon signage
- Roadside counters
- Gas/electricity metering
- Small IoT applications
The long battery life and OTA capabilities make this a good choice for applications where the device is not easily accessible.
- Shop front iBeacon signage
- Distant weather stations
- Vehicle tracking
The encryption capabilities and SimbleeCloud platform gives this device a well rounded position in the IoT space.
- Hospital patient monitors
- Secure payments
- Vehicle control
And how would I rate the Simblee?
The Simblee has the following advantages:
- Inbuilt iPhone API so you don't need to learn any iOS programming.
- Quick to market deployment of your IoT application.
- Over The Air programming of the Simblee.
- AES encryption.
- Full API control of the BLE module.
- Ultra low power modes.
The disadvantages I found with the Simblee:
- 20 byte TX packet limitation.
- The BLE radio takes priority over your code.
- Need to call SimbleeForMobile.process() within every 2 seconds.
I'd give it an overall score of: 4.5.
- 4.7 - Offers rapid development of apps without having to code up for iOS or Android.
- 4.6 - Offers ultra power savings, encryption and OTA.
- 4.6 - Tiny small package.
- 4.0 - At the moment it's expensive, but you are paying for the rapid application development.
I quite like this module, and I think I'll run a few tutorials on how to use it in particular scenarios.
Further SimbleeForMobile examples
As time goes on I'll update example links here.
Take a look at the Sparkfun Simblee Github examples. These are a great starting point and currently show off LED control, reading inputs, and working with low power modes.
Sparkfun also have a great tutorial on working with graphics primitives.