1 | #Bluetooth Low Energy
|
2 |
|
3 | ##Under Development
|
4 |
|
5 | The BLE Library is still under heavy development and most functionality isn't available but the functions outlined below work. __You will need to update your firmware to our [January 3 release](https://github.com/tessel/firmware/releases/tag/2014-01-03) (or later) in order to use this library__. That's because this is a relatively bulky code package and our old USB driver code didn't allocate enough memory.
|
6 |
|
7 | You can add more functionality if you want to look at the [BlueGiga BLE113 Datasheet](http://www.bluegiga.com/en-US/products/bluetooth-4.0-modules/ble113-bluetooth--smart-module/documentation/). You'll have to make an account on their website.
|
8 |
|
9 | ###Installation
|
10 | ```
|
11 | npm install ble-ble113
|
12 | ```
|
13 |
|
14 | If you are using Tessel V1 (should say TM-00-00 on the back), you should wire the module to the GPIO port because UART isn't routed to the module ports in that hardware revision. GPIO 3, 2, and 1 on GPIO port goes to GPIO 3, 2, and 1 on module, respectively.
|
15 |
|
16 | If you have Tessel V2, you can use module port a, b, or d.
|
17 |
|
18 | ###Example
|
19 | ```
|
20 | var tessel = require('tessel');
|
21 |
|
22 | // Pick one of the two lines based on which version Tessel you have:
|
23 | // Tessel V1 (should say TM-00-00 on back) must use GPIO port
|
24 | var hardware = tessel.port('gpio');
|
25 |
|
26 | // Tessel V2 (should say TM-00-02 on back) can use any port but C
|
27 | var hardware = tessel.port('a')
|
28 |
|
29 | var ble = require('../');
|
30 |
|
31 | var bleController = ble.connect(hardware, function(err) {
|
32 | if (err) return console.log(err);
|
33 |
|
34 | // Use the device as a peripheral
|
35 | // bleController.startAdvertising();
|
36 |
|
37 | // Use the device as a master
|
38 | // bleController.scanForPeripherals()
|
39 | });
|
40 |
|
41 | bleController.on('discoveredPeripheral', function(peripheral) {
|
42 | console.log("Discovered a Peripheral!");
|
43 | console.log("RSSI: ", peripheral.rssi);
|
44 | console.log("Sender: ", peripheral.sender);
|
45 | });
|
46 | ```
|
47 |
|
48 | ##Events
|
49 |
|
50 | * "discoveredPeripheral"
|
51 | * "connectedPeripheral"
|
52 | * "disconnectedPeripheral"
|
53 | * "connectionStatus" for when you connect to a peripheral or a master connects to you
|
54 | * "completedProcedure" should be called after searching for peripheral handles
|
55 | * "readValue" should be called after reading the value of a handle
|
56 | * "foundInformation" called when information about characteristics is found
|
57 | * "booted"
|
58 |
|
59 | ##API
|
60 | ```
|
61 | scanForPeripherals(callback);
|
62 | stopScanning(callback);
|
63 | startAdvertising(callback);
|
64 | writeValue(value, callback); // Write the value to be read by a master (only 1 value available now, will increase to 64 soon)
|
65 | connectToPeripheral(address, address_type, conn_interval_min, conn_interval_max, timeout, latency, next);
|
66 | disconnectFromPeripheral(connection_handle, next);
|
67 | findInformation(connection_handle, start_handle, end_handle, next); // Used to find services/characteristics used by peripheral
|
68 | readRemoteHandle(connection_handle, attHandle, next); // Used to read a remote value being advertised by slave.
|
69 | ```
|
70 |
|
71 | When used in Master mode, typically, you connect to a peripheral, call `findInformation` to get a list of available characteristics to read, then call `readRemoteHandle` with the handle returned from the foundInformation event.
|
72 |
|
73 |
|
74 | Email jon@technical.io with any questions/concerns
|