SeeedStudio was kind enough to send me a BLE Shield. Designed by RedBearLab and sold by SeeedStudio, the BLE Shield is a convenient way to experiment with Bluetooth Low Energy on an Arduino. Bluetooth Low Energy is a feature of the Bluetooth 4.0 specification, which is aimed primarily at low-power, low-latency wireless applications.
Here is a top view of the BLE Shield:
The tiny square SMT chip in the upper left is the Nordic Semiconductor nRF8001, a single-chip BLE connectivity IC.
The pass through headers support the extra pins on the new Arduino Leonardo. Currently, switch K1 should be left in the OFF position, as the OFF position is not supported. The bottom of the board is not particularly interesting:
Note that it connects to the ICSP header, and that the pins are not extended through the top of the board, so if you want to stack it with a shield that also needs the ICSP pins, you will have to put the BLE shield on top.
Currently, BLE support on host devices is patchy at best. On the Android platform, the Samsung Galaxy S3 contains a BT 4.0 hardware, but it’s currently not possible to program BLE, because the drivers are not yet available.
On Apple’s iOS platform, only the iPhone 4S/5, new iPad, and iPod 5th generation support BLE. What’s nice is that there’s full support in the iOS SDK. Unlike regular Bluetooth, for which very few profiles are available to the programmer in iOS (not even RFCOMM), you can easily design design your own custom BLE hardware and app. What’s more, with BLE, you can avoid the expensive MFi hardware program, and simply submit your app for approval.
I am not sure what kind of SDK support is available in Windows, but I have ordered a cheap BT 4.0 dongle to try on my PC.
To program the Arduino, you must first download and install the BLE Shield Library. To install the library, unzip the BLE and BluetoothLowEnergy folders into your <sketchbook>/libraries folder. There is a sample BLEFirmata sketch in the BluetoothLowEnergy/examples folder. It is compatible only with Arduino v1.0+. The BLEFirmata sketch allows you to read/write the Arduino’s I/O pins from a remote device. The current implementation of the library uses pins 8 and 9 for handshaking, so they are not available to your application. Furthermore, communication with the board is via SPI (MISO/MOSI/SCK) pins.
If you have a compatible iOS device, after loading BLEFirmata into your Arduino, you can go to the App Store, and download RedBearLab’s free BLE Arduino app. I installed BLE Arduino on my iPad under iOS6. When you launch the app and tap the Connect button, it automatically finds and connects to your BLE Shield. Unlike regular Bluetooth, you don’t have to go to Settings->General->Bluetooth and pair the devices (I wonder what happens if you have multiple BLE devices in the area, and how security is handled). Once the app finds your BLE Shield, it prompts you for the type of Arduino it’s attached to:
My Arduino Deumilanove is not listed as one of the options, but it works fine when you select Uno. You can read or write any of the I/O’s in realtime. If you select an analog pin, the app also gives you the option of treating it as analog or digital on input:
Here is the app displaying the value of pin A0 when configured for analog input, and the A0 pin is connected to the 3.3V pin:
Note that my USB cable is attached to the Arduino only to power it.
You can download the BLE iOS SDK and sample code from RedBearLab. Their website also has lots of other documentation, as well as a forum for getting help.
I am looking forward to implementing some projects with the BLE Shield in the near future.