📖 Scenario: You are working on a simple IoT device that uses Bluetooth Low Energy (BLE) to share its presence and discover other devices nearby. This is common in smart home gadgets and fitness trackers.
🎯 Goal: Build a basic BLE advertising and scanning setup where your device advertises a name and scans for other devices advertising their names.
📋 What You'll Learn
Create a dictionary called advertisement with keys 'name' and 'service_uuid' and exact values 'MyDevice' and '1234'
Create a variable called scan_duration and set it to 5 (seconds)
Write a function called scan_devices that takes scan_duration and returns a list of device names found (simulate with a fixed list)
Print the list of scanned device names
💡 Why This Matters
🌍 Real World
BLE advertising and scanning is used in smart home devices, fitness trackers, and proximity marketing to share and discover device presence.
💼 Career
Understanding BLE basics helps in IoT development, embedded systems, and wireless communication roles.
Progress0 / 4 steps
1
Create BLE advertisement data
Create a dictionary called advertisement with keys 'name' and 'service_uuid' and values 'MyDevice' and '1234' respectively.
IOT Protocols
Hint
Think of advertisement as a small card your device shows to others. It needs a name and a service ID.
2
Set scan duration
Create a variable called scan_duration and set it to the integer 5 representing seconds.
IOT Protocols
Hint
This variable controls how long your device listens for others.
3
Write a scanning function
Write a function called scan_devices that takes scan_duration as input and returns a list of device names found. For this exercise, return the fixed list ['DeviceA', 'DeviceB', 'DeviceC'].
IOT Protocols
Hint
This function pretends to look around and find other devices.
4
Print scanned devices
Call the function scan_devices with scan_duration and print the returned list of device names.
IOT Protocols
Hint
Show the devices your scan found by printing the list.
Practice
(1/5)
1. What is the main purpose of BLE advertising in Bluetooth Low Energy communication?
easy
A. To broadcast small packets of data repeatedly to nearby devices
B. To establish a full connection between devices
C. To encrypt data between devices
D. To scan for other devices' signals
Solution
Step 1: Understand BLE advertising role
BLE advertising sends small data packets repeatedly to announce presence.
Step 2: Differentiate from scanning and connection
Advertising is broadcasting, not scanning or connecting.
Final Answer:
To broadcast small packets of data repeatedly to nearby devices -> Option A
Quick Check:
Advertising = broadcast small data [OK]
Hint: Advertising means sending out info repeatedly [OK]
Common Mistakes:
Confusing advertising with scanning
Thinking advertising establishes connections
Assuming advertising encrypts data
2. Which of the following is the correct command to start BLE scanning using the Linux tool bluetoothctl?
easy
A. ble scan start
B. start scan
C. scan start
D. scan on
Solution
Step 1: Recall bluetoothctl scan command
The correct command to start scanning is exactly scan on.
Step 2: Check other options for syntax
Other options are incorrect commands or invalid syntax in bluetoothctl.
Final Answer:
scan on -> Option D
Quick Check:
bluetoothctl scan on = start scanning [OK]
Hint: Use exact command 'scan on' in bluetoothctl [OK]
Common Mistakes:
Using 'start scan' instead of 'scan on'
Typing commands not supported by bluetoothctl
Confusing scan commands with advertising commands
3. Given this Python snippet using a BLE library to scan devices:
devices = scanner.scan(5.0) for dev in devices: print(dev.addr)
What will this code output?
medium
A. Empty list because scan time is too short
B. List of device addresses found during 5 seconds scan
C. Error because scan() needs no arguments
D. List of device names found during 5 seconds scan
Solution
Step 1: Understand scan() usage with timeout
The scan method scans for devices for given seconds and returns device objects.
Step 2: Identify printed attribute
Printing dev.addr outputs device MAC addresses found.
Final Answer:
List of device addresses found during 5 seconds scan -> Option B
Quick Check:
scan(5.0) returns devices; dev.addr prints addresses [OK]
Hint: scan(timeout) returns devices; print dev.addr for addresses [OK]
Common Mistakes:
Thinking scan() takes no arguments
Confusing device address with device name
Assuming scan always returns empty list
4. You wrote this code to scan BLE devices but get no output:
scanner = Scanner() devices = scanner.scan() for dev in devices: print(dev.addr)
What is the likely problem?
medium
A. print(dev.addr) is incorrect attribute
B. Scanner() class does not exist
C. Missing scan timeout argument causes no devices found
D. scan() method should be called with 'start' keyword
Solution
Step 1: Check scan() method requirements
scan() requires a timeout argument to specify scan duration.
Step 2: Understand effect of missing timeout
Without timeout, scan may return immediately with no devices.
Final Answer:
Missing scan timeout argument causes no devices found -> Option C
Quick Check:
scan() needs timeout to find devices [OK]
Hint: Always provide scan timeout to get results [OK]
Common Mistakes:
Omitting scan timeout argument
Assuming dev.addr is invalid
Thinking scan() uses 'start' keyword
5. You want to filter BLE scan results to only show devices advertising a specific service UUID. Which approach correctly applies this filter in Python?
hard
A. Use a list comprehension: [dev for dev in devices if '1234' in dev.getScanData()]
B. Check if '1234' in dev.addr for each device
C. Filter devices by comparing dev.name to '1234'
D. Use devices.filter('1234') method directly
Solution
Step 1: Understand filtering by service UUID
Service UUIDs appear in scan data, not in address or name.
Step 2: Use list comprehension with getScanData()
getScanData() returns advertised data; check if UUID '1234' is present.
Final Answer:
Use a list comprehension: [dev for dev in devices if '1234' in dev.getScanData()] -> Option A
Quick Check:
Filter by UUID in scan data using list comprehension [OK]
Hint: Filter devices by checking UUID in scan data list [OK]
Common Mistakes:
Checking UUID in device address
Filtering by device name instead of UUID
Using non-existent filter() method on devices
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.