No ACL setup yet! Denying access to everyone.
en:edu:zmitac:s2:aih:lab:nrf52zephyrblecentral
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| en:edu:zmitac:s2:aih:lab:nrf52zephyrblecentral [2023/12/19 22:14] – [BLE central] ktokarz | en:edu:zmitac:s2:aih:lab:nrf52zephyrblecentral [2023/12/19 23:19] (current) – [Tasks to do during the laboratory] ktokarz | ||
|---|---|---|---|
| Line 3: | Line 3: | ||
| BLE client must be configured to connect to the peripheral which exposes some specific service and characteristic. To do the lab exercise there is a need to create the peripheral device first. | BLE client must be configured to connect to the peripheral which exposes some specific service and characteristic. To do the lab exercise there is a need to create the peripheral device first. | ||
| ===== BLE Health Temperature peripheral ===== | ===== BLE Health Temperature peripheral ===== | ||
| - | The default Health Temperature example is sufficient to make the laboratory. How to import the project, flash, and execute is shown in {{en: | + | The default Health Temperature example is sufficient to make the laboratory. How to import the project, flash, and execute is shown in {{https:// |
| ===== BLE central ==== | ===== BLE central ==== | ||
| - | Among the examples provided with Zephyr OS, there is also one complementary to the Health Temperature peripheral. It is named central_ht ((..\.platformio\packages\framework-zephyr\samples\bluetooth\central_ht)). The program is quite complex, here we will explain the most important elements. | + | Among the examples provided with Zephyr OS, there is also one complementary to the Health Temperature peripheral. It is named central_ht ((..\.platformio\packages\framework-zephyr\samples\bluetooth\central_ht)). The program is quite complex, here we will explain the most important elements |
| - | In the main function, after the successful initialisation of the Bluetooth subsystem scanning for nearby devices is started. | + | The process of establishing and configuring a connection has a few steps: |
| + | - scanning the neighbourhood to find connectable devices | ||
| + | - comparing the advertising data to look for information on the required service | ||
| + | - establishing the connection to peripheral | ||
| + | - retrieving information on services and characteristics | ||
| + | - subscribing to the interesting data with a notification or indication mechanism (optional) | ||
| + | - reading data (by reading the characteristic value or automatically with notify/ | ||
| + | |||
| + | ==== Scanning the neighbourhood ==== | ||
| + | In the main function, after the successful initialisation of the Bluetooth subsystem, scanning for nearby devices is started. | ||
| < | < | ||
| err = bt_enable(NULL); | err = bt_enable(NULL); | ||
| Line 13: | Line 22: | ||
| ... | ... | ||
| </ | </ | ||
| - | The " | + | The " |
| + | ==== Searching advertising data for info on service ==== | ||
| + | The " | ||
| + | ==== Establishing the connection ==== | ||
| + | After a successful search establishes a connection with the remote device by calling the function " | ||
| Further processing is done by callback functions registered by the macro: | Further processing is done by callback functions registered by the macro: | ||
| < | < | ||
| Line 22: | Line 35: | ||
| </ | </ | ||
| Zephyr OS keeps the " | Zephyr OS keeps the " | ||
| - | The " | + | The " |
| - | After finding this service discovery_func() is executed which performs further searching. First, it looks for the Temperature Measurement characteristic (UUID = 0x2a1c). This characteristic should have the descriptor Client Characteristic Configuration (UUID = 0x1902) which makes it possible to enable notifications or indications. The indication enabling and registering the " | + | ==== Discovering the service ==== |
| + | This function registers the callback function " | ||
| + | ==== Searching for the characteristic ==== | ||
| + | After finding this service discovery_func() is executed which performs further searching. First, it looks for the Temperature Measurement characteristic (UUID = 0x2a1c). | ||
| + | ==== Subscribing to the data with indication ==== | ||
| + | This characteristic should have the descriptor Client Characteristic Configuration (UUID = 0x1902) which makes it possible to enable notifications or indications. The indication enabling and registering the " | ||
| + | ==== Ready! ==== | ||
| Notice that after every successful discovery the function " | Notice that after every successful discovery the function " | ||
| While the peripheral device updates the thermometer sensor reading, our central device receives this data and calls the " | While the peripheral device updates the thermometer sensor reading, our central device receives this data and calls the " | ||
| + | ===== Tasks to do during the laboratory ===== | ||
| + | - Create the Health Thermometer peripheral device and test if it operates properly | ||
| + | - Import central device program " | ||
| + | - Compile and execute it observing its behaviour with and without peripheral running | ||
| + | - Modify the peripheral code and central code to enable LED control on the central board with a button press on the peripheral board | ||
| + | < | ||
| + | If you find problems with undefined BT_ATT_FIRST_ATTRIBUTE_HANDLE and BT_ATT_LAST_ATTRIBUTE_HANDLE define them as in the following code. | ||
| + | </ | ||
| + | < | ||
| + | #define BT_ATT_FIRST_ATTRIBUTE_HANDLE 0x0001 | ||
| + | #define BT_ATT_LAST_ATTRIBUTE_HANDLE 0xFFFF | ||
| + | </ | ||
| + | < | ||
| + | To send simple binary data you can use a binary sensor service (UUID = 0x183B) with a binary sensor response characteristic (UUID = 0x2B2C). | ||
| + | </ | ||
en/edu/zmitac/s2/aih/lab/nrf52zephyrblecentral.1703020476.txt.gz · Last modified: by ktokarz
