Advertisement
Advertisement

Hands-on with BLE, apps, and ARMduino: The Simblee

-November 10, 2016

This product is featured in EDN's Hot 100 products of 2016. See all 100 here.
BLE (Bluetooth Low Energy), app development, IoT design – all have pretty steep learning curves when you're approaching them from scratch. What are those of us in small companies (or hobbyists/makers) supposed to do? We look for shortcuts, and if we're lucky, we find them.

RF Digital's Simblee is very definitely a shortcut, and in short order, you can work up an embedded system that talks to an iOS or Android app of your own design.

The Simblee hardware comprises a small module that contains a 16MHz ARM Cortex-M0 processor, a BLE radio, and firmware that pulls it all together to make a Superduino, or ARMduino, or… *duino… Whatever you want to call it.

The Simblee's innards are left a mystery, but I'd wager a fancy dinner (with wine) that the key ingredient is a Nordic Semi nRF51822, a BLE SoC that integrates the ARM Cortex, 128k of flash, 32k of RAM, 10-bit ADC, 31 GPIOs, SPI, I2C, temperature sensor, UART, encryption HW, timers, RTC, and a noise-based random number generator (RNG). Phew. Also under Simblee's hood are 32.768kHz & 16MHz crystals, a handful of discretes, and a BLE antenna. Like other Bluetooth modules, it's pre-certified.

Simblee's big differentiator though is how it interacts with iOS/Android apps. You don't have to learn anything about either platform's development environment. Instead, as part of your Simblee code, you define your app's GUI in one function, and the GUI's interaction with your embedded code in another function, all using just the Arduino environment (I won't call it an IDE). The Simblee iOS/Android app is totally generic; a blank slate whose behaviour is fully defined by your GUI code. When it starts up, you're presented with a list of any Simblees within comms range. The GUI definition from the Simblee you select is sent to your device, and away you go. Simblees can also network amongst themselves, with or without app intervention.

The Simblee app's home page

To ease development, RF Digital offers a range of stackable boards, such as Simblee breakouts, a USB programmer (unlike an Arduino, a separate board is needed), an RGB/button board, and battery, relay, SD card, servo controller, and prototyping boards. The regrettable "shield" moniker has been retained, even though the boards are not Arduino-compatible. Only seven GPIOs are brought to the stacking pins, but the larger Simblee breakout board has 29 GPIOs that are accessible by using a breadboard, wire leads, or your own stacking board.

Once a Simblee is embedded in a device, it can be programmed OTA (over the air) – no USB programmer needed. I haven’t tried this yet, as it requires a deeper dive into the software.

My own interest in Simblees was stoked by colleague/chum Max Maxfield (of the Hawaiian shirt), and my desire to build some lighting control projects.

Regular readers will know I have no qualms about bashing a product I feel is not up to snuff. Well, the Simblee does have some issues, but I'm going to try to be kind. It's a very interesting and potentially useful product made by a small company, and I'd like to see it succeed. That said, I must report my honest impressions. 

My first project idea was utterly simple: A remote-controlled light switch so I wouldn't have to stumble to bed in the dark. Yeah…first-world problem. Implementation would require some care, as the board would need a simple capacitive-drop AC-line supply, and need to fit in an electrical box.

Then I installed RGB strip lighting over my bathtub and in the adjoining linen closet (why RGB? why not!). The LED controller, though a slick touch-sensitive remote, is not to my liking, so using a Simblee to make a new and better one struck me as a simpler – and more interesting – first project. All I'd need would be a 3.3V regulator and a few MOSFETs.

One of the example "sketches" (Arduino programs are called "sketches") in the Simblee folder is, sure enough, a colour-wheel/slider controller for an RGB LED. Perfect – I can at least test with that – then rewrite it to my liking.

 

As you can see, it's not a great GUI. The wheel is pretty ugly, and I'd rather have HLS (hue, lightness, saturation) controls, but worst of all, it's buggy. Compare the slider positions to the numeric values. They don't match. More often than not, moving a slider does not update the value. Sometimes it even causes other sliders to move. Whether this is bad luck due to a problem with my setup, or more widespread, I haven't yet been able to determine.

The biggest problem with Simblee may well be the documentation. I'll get to that momentarily. First, here's a very simple sketch I wrote (basically a stripped-down version of the colorwheel example) to test slider functionality. BTW, it uses 23% of the 128kB code space – obviously mostly taken up with Simblee library code.

 

//Very simple test using a slider to control blink rate

#include <SimbleeForMobile.h>

const int blue_led = 4; //GPIO4 that is
uint8_t blinkyfreq;

//The standard Arduino initialization block
void setup() {
  SimbleeForMobile.deviceName = "Blinky";
  SimbleeForMobile.advertisementData = "the LED";
  SimbleeForMobile.begin();
  pinMode(blue_led, OUTPUT);
  Serial.begin(9600);
}

//The standard Arduino main loop
void loop() {
  digitalWrite(blue_led, HIGH);
  delay(3);
  digitalWrite(blue_led, LOW);
  delay(blinkyfreq);
  SimbleeForMobile.process();  //This enables Simblee functionality
}

//The GUI is defined here
void ui() {
  SimbleeForMobile.beginScreen();
  uint8_t slider = SimbleeForMobile.drawSlider(55, 110, 175, 0, 255);
  SimbleeForMobile.setEvents(slider,EVENT_DRAG);  //Simblee support added this line
  SimbleeForMobile.endScreen();
}

//Called on any GUI event
void ui_event(event_t &event) {
  blinkyfreq = event.value;
  Serial.println(blinkyfreq);
}


Sure enough, the original code behaved identically to the colour wheel program – badly. Simblee support looked at the code and added one line in the GUI definition function. Now, a stream of values is emitted as I move the slider (as seen on the "serial terminal"). Okay… I can work with that.

Some scope captures of the LED pin follow:

The high levels are the 3ms on-times. Low times are a combination of delay(0) and the internal Simblee processing. Using infinite persistence, you can see the jitter.

 

Close-up of the LED-off time

 

Now with a LED-off time of 10ms. The stats show the range of on/off times.

 

But what about documentation? Exactly.

I'll start with installation. There's no software to download from the Simblee site. Grab the quickstart guide to discover that you first download the Arduino software, then the Simblee extensions from within it. Thus began a small comedy (tragedy?) of errors.

There were two quickstarts on the website, and I made the mistake of downloading the older one (iOS only). The newer version added Android information, which I didn't need. Unfortunately, it also contained an updated URL for the Simblee library code.

The URL text in the pdf guide was hyperlinked: useless, as you don't want to open it in a browser. You want to copy the text into the Arduino software. I did that. I should have realized that because the URL text was split by a line break, there might be problems. Yup – the line break became a space, but it took me half an hour to notice that. And the cherry on top? The hyperlink was wrong, containing the URL only up to the line break. Wow…four errors in one URL: hyperlinked, wrong hyperlink, line break, outdated URL.

So, then I grabbed the newer quickstart (and suggested they remove the old one…which they did). This was better, though the URL was still pointlessly hyperlinked (well, not entirely pointless, as you can COPY it easily). Pasting this into the Arduino board manager initiated download of the Simblee libraries. I also had to install FTDI USB drivers. Yuck.


Next: Data and GUI

Loading comments...

Write a Comment

To comment please Log In

FEATURED RESOURCES