Use BLE in Central Mode on arduino 101

Hello

I want to use BLE in Central Mode on arduino 101.
I want to realize communication between two arduino 101. (master to peripheral).
I did not find any example in Central Mode.

can you help me.

Thanks

Hi,
as reported here , at the moment the library only handles peripheral mode.

According to this the IC handling BLE on the Curie module is the Nordic Semiconductor NRF51822, which incorporates "soft device" binaries to implement roles. If it is loaded with the S110 soft device, then the module will be unable to support anything other than peripheral/broadcast roles unless the soft device can be changed through an available interface on the Arduino. The S120, conversely, supports only central/observer roles. The S130 soft device is by far the most flexible, allowing for any of peripheral/central/broadcast/observer roles.

Any ideas on which one is currently loaded, and/or whether that will be adjustable in the future?

I don't know which SoftDevice is loaded but I believe it's somehow "custom" and untouchable (at the moment).
But with the RTOS/Quark part being open-sourced in March it will surely become possible to flash the nRF :slight_smile:

Thank you for this information.

Do you know where I can find for the information of the firmware version?

Thanks

In my system I am obliged to have a central.

Can you suggest me Arduino board, or Arduino compatible modules that can do the bleCentral ?
I'm interested also sample code.

thanks

facchinm:
I don't know which SoftDevice is loaded but I believe it's somehow "custom" and untouchable (at the moment).
But with the RTOS/Quark part being open-sourced in March it will surely become possible to flash the nRF :slight_smile:

Thanks for the response. Here's hoping that things stay on schedule! Until then, I'm sure I can find plenty to keep me busy with peripheral mode :slight_smile:

Is there any update on this topic?

I was just quickly reading the released Arduino 101 firmware source. Its not obvious that it describes a flash of what Nordic calls a SoftwareDevice (in flavors S110, S120, S130), which are software stacks (of less to more functionality, i.e. from peripheral role only to multirole functionality) for Bluetooth, that at least on Nordics branded SoC modules seems to run on an ARM processor included on the Nordic brand chip. (The SoftwareDevice might be a proprietary binary only available from Nordic?)

Its not clear to me exactly what Intel has included on the Curie. It might be design intellectual property that Intel has manufactured into the Curie or it might be a wafer from Nordic that Intel has wire bonded into their module. Does it include an ARM processor, or only the radio transceiver? What is the interface? (Could the interface just be a serial device UART between the Quark and the Nordic?)

Maybe you can flash the SoftwareDevice into the flash on the Nordic part of the Curie, using JTAG? But no help is provided in the documentation for the Arduino 101 firmware upload?

Also, just because the Arduino BLE library only supports peripheral role, it doesn't mean the Nordic software stack doesn't support more. That is, maybe the library doesn't wrap all the functions that the Nordic stack supports. That is, the Nordic doesn't need to be flashed, the libraries just need to be augmented.

If only peripheral mode is supported, that is very limiting. That means you must use another system as a central to talk to your Curie peripheral devices, and you can't do thing like mesh networks with just the Curie.

Maybe I just need to keep reading, but some high-level documentation would be nice.

See

https://github.com/01org/corelibs-arduino101/tree/master/system/libarc32_arduino101/framework/include/services/ble/ble_service_gattc_api.h

That seems to define an API for a library that runs on the ARC and interfaces to BLE (through unspecified means.)

It seems to have functions that let you implement clients of services, i.e. a "central" or "scanner" of services. (the "c" in "gattc" seems to mean client. The arduino library already calls the "....gatts..." for "server" functions.)

So it seems like one could augment the Arduino library to wrap the ...arc32... library and thus implement a central (or an observer that didn't actually connect to any services.)

Has anyone been able to make the above code run on their Arduino 101? I have been unable to run the GATTC function to run and get an error stating that the BLE_services.h cannot be found. Any ideas on how to fix this?

I think it should better open a github issue to answer these questions.

bootchk:
...
If only peripheral mode is supported, that is very limiting. That means you must use another system as a central to talk to your Curie peripheral devices, and you can't do thing like mesh networks with just the Curie.

...

Linksprite BLE 4.0 shield (based on HM-10) can act as central and also as peripheral. See my post here.

Any updates on this.? I am not able to compile the code for arduino 101

cedric_grimault:
In my system I am obliged to have a central.

Can you suggest me Arduino board, or Arduino compatible modules that can do the bleCentral ?
I'm interested also sample code.

thanks

I have developed a Nrf based device to connect arduino101 into the Ble network. Not sure whether this could fix your system issue.

Try to take a look at wikitIDE: program arduino 101 visually | Hackaday.io

I am going to share all source code on github

rmandich:
Has anyone been able to make the above code run on their Arduino 101? I have been unable to run the GATTC function to run and get an error stating that the BLE_services.h cannot be found. Any ideas on how to fix this?

Could you share me your code? Most likely the notification is not enabled

Hi, intel released an experimental central here
https://github.com/01org/corelibs-arduino101/tree/master/libraries/CurieBLE/examples/LEDCentral

Experimental means that APIs will change in the next future since they are not very Arduino style.

Anyway if you want to give them a try remember to flash the new BLE firmware using the BLE flashpack in the release

Hi a_guadalupi,

The corelibs-arduino101 works well but I'm not able to update the firmware. I tried using the burn boatloader menu but that fails. Any suggestions?

Hi i made a litle how to,upgrade the firmware on Arduino 101

Regards!!!

ashhark91:
Any updates on this.? I am not able to compile the code for arduino 101

Just an update to close this topic as solved.

I wrote a basic example code to show how 2x Arduino 101 can communicate with each other. One device acts as a peripheral with a button, and the other as a central with a LED. The button then controls the LED.

Hope you find it useful.

Hi BBato: Is there a limitation for the version of the Arduino 101 board? I have tried to load the example code.
Load is fine no issue but for the board load BLE_Button.ino there is no reaction at all.

BLEDevice peripheral = BLE.available();
if ( peripheral )
never return a true. Looks like the board can not find the LED board via BLE.

BR
maiche2007