Bluetooth (General Info)

Bluetooth is a wireless protocol on the 2.4 GHz band that has traditionally been used in wireless devices.

Relevance in Project


Ultimately, I chose Bluetooth as the wireless protocol for this project for the following reasons:

  • There is already a Bluetooth 5 chip on the Raspberry Pi 4B+ [1], the chosen MCU for this project gateway, which makes it faster and cheaper to start programming the gateway.
  • BLE is used by many of the other industrial machine health monitoring products that were benchmarked before development started on this project, which implies there has been some level of success in using BLE in industrial environments in the past.
  • Bluetooth 5 has a practical range of up to 60m, which is 4x higher than the Bluetooth 4 standard.
  • Bluetooth 5 has a max speed of 2 MBps, which allows higher throughput and lower battery strain than previous versions (lower strain because the faster data rate allows the radio to be transmitting for less time).
  • It is easy to find online community support for programming Bluetooth in Python (chosen language for the gateway).
  • Simplicity Studio 5, the chosen tool suite for programming the sensor node MCU, has a really nice Bluetooth configuration toolkit, including many Bluetooth examples that serve as nice templates for new projects.

Alternatives to Bluetooth

Future researchers in this project may decide that Bluetooth 5 Low Energy is not meeting the needs for this project, and that they have the technical knowledge and skill to change it to something else. There are many alternatives to Bluetooth that I have explored and benchmarked in some depth in Wireless Protocols.

Bluetooth Learning Resources

Bluetooth protocol is extensively documented online, although there is a learning curve to figuring out the particulars of how it works. Before you start coding, you should have at least some familiarity with the following concepts:

  • The difference between a 'server' device and a 'client' device.
  • Generic Attribute Profile (GATT), and what is meant by 'services' and 'characteristics' (and to a much lesser extent, 'descriptors').
  • Different kinds of BLE events, such as advertisement, connection requests, notifications, requests, and - which events require acknowledgement, which ones

Here are suggested reads for building background information to use Bluetooth (specifically Bluetooth Low Energy, AKA BLE) in our application.

Silicon Labs Bluetooth Whitepapers

Silcon Labs Examples

Other Great Resources

  • Ellisys YouTube Bluetooth Video Series - This is a fairly detailed, high-level explanation of the BLE protocol. I recommend watching episodes 1 - 9 for our purposes.
  • Bluetooth Standard 16-bit UUID Numbers - Gives a list of Universally Unique Identifier (UUID) values that correspond with standard services and characteristics. Useful for creating creating services and characteristics.

Important Term Cheat Sheet

Attribute Data Operations
Packet Type Direction of Information Response Required? Project-specific Example
Commands client -> server No Flash a status LED to identify the right device in a list.
Requests client -> server Yes Poll for data at a set interval.
Responses (in response to a request) server -> client No Data sent from the node.
Notifications server -> client No A "node battery-low" alarm.
Indications server -> client Yes Node asking for the time period of data to collect.
Confirmation (in response to an indication) client -> server No Gateway telling the node what time period to collect.

See Also

1. Raspberry Pi Foundation; Raspberry Pi 4 Tech Specs;
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License