BLE for wearables and beacons in IOT Protocols - Time & Space Complexity
When devices like wearables and beacons use BLE, they send and receive data packets repeatedly.
We want to understand how the time to process these packets grows as more devices or data increase.
Analyze the time complexity of the following BLE scanning and processing loop.
startScan()
for device in scannedDevices:
if device.type == "beacon":
processBeacon(device)
else if device.type == "wearable":
processWearable(device)
stopScan()
This code scans for BLE devices, then processes each device based on its type.
- Primary operation: Loop over all scanned devices.
- How many times: Once for each device found during scanning.
As the number of devices found increases, the processing time grows proportionally.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 device checks and processing calls |
| 100 | 100 device checks and processing calls |
| 1000 | 1000 device checks and processing calls |
Pattern observation: The time grows linearly as more devices are scanned.
Time Complexity: O(n)
This means the time to process devices grows directly with the number of devices found.
[X] Wrong: "Processing one device takes constant time, so total time is always the same."
[OK] Correct: More devices mean more processing calls, so total time increases with device count.
Understanding how processing time grows with device count helps you design efficient BLE scanning in real projects.
"What if we added nested loops to compare each device with every other device? How would the time complexity change?"
Practice
Solution
Step 1: Understand BLE's design goal
BLE is designed to use minimal power to keep small devices running longer on batteries.Step 2: Compare options
High speed is not BLE's focus, pairing is often needed, and BLE works with many devices, not just smartphones.Final Answer:
It uses very little power, extending battery life. -> Option CQuick Check:
Low power = A [OK]
- Confusing BLE with classic Bluetooth speed
- Thinking BLE needs no pairing always
- Assuming BLE only works with phones
Solution
Step 1: Identify advertising types
Beacons typically use Non-Connectable Undirected Advertising to broadcast data without needing a connection.Step 2: Eliminate other options
Connectable Directed requires connection, Scan Response is a reply to scans, Extended Advertising is newer but not typical for simple beacons.Final Answer:
Non-Connectable Undirected Advertising -> Option DQuick Check:
Beacon broadcasts = Non-Connectable Undirected [OK]
- Choosing connectable advertising for beacons
- Confusing scan response with advertising
- Assuming extended advertising is always used
devices = scanner.scan(5)
for dev in devices:
if dev.getValueText(9) == 'Beacon123':
print(f"Found: {dev.addr}")Solution
Step 1: Understand the code logic
The code scans for 5 seconds, then checks each device's advertised name (type 9) for 'Beacon123'.Step 2: Analyze the print statement
If found, it prints 'Found: ' plus the device's address, not the name itself.Final Answer:
Found: <device address> -> Option AQuick Check:
Print device address when name matches [OK]
- Expecting the name printed instead of address
- Thinking getValueText is invalid
- Assuming no output if beacon found
Solution
Step 1: Understand connection timeout causes
If a device advertises as non-connectable, it will not accept connection requests, causing timeout.Step 2: Evaluate other options
Invalid address would cause immediate error, scanning duration doesn't affect connection, classic Bluetooth devices won't appear in BLE scan.Final Answer:
The device is advertising as non-connectable only. -> Option AQuick Check:
Non-connectable device causes timeout [OK]
- Confusing scanning time with connection issues
- Assuming invalid address causes timeout instead of error
- Mixing classic Bluetooth with BLE scanning
Solution
Step 1: Understand BLE data reading workflow
First, scan to find the device, then connect to it to access its data.Step 2: Discover GATT services and read characteristic
After connecting, discover services to find the heart rate characteristic by UUID, then read it.Step 3: Disconnect after reading
Once data is read, disconnect to save power and free resources.Final Answer:
Scan for devices -> Connect to device -> Discover GATT services -> Read heart rate characteristic using UUID -> Disconnect -> Option BQuick Check:
Scan -> Connect -> Discover -> Read -> Disconnect [OK]
- Trying to read before connecting
- Discovering services before connecting
- Skipping disconnect step
Ready to prove it?
Pass the test and this pattern moves unknown
