Introduction
In today's world, personal safety is more important than ever. The Pebblebee Halo represents a revolutionary approach to personal security, combining traditional tracking technology with advanced safety features like a 130dB siren and strobe light. This tutorial will guide you through setting up and using the Halo's core functionality using basic programming concepts and Bluetooth connectivity. You'll learn how to interact with Bluetooth Low Energy (BLE) devices, understand how safety alerts work, and build a simple interface to monitor your device's status.
Prerequisites
- Basic understanding of computer programming concepts
- Access to a computer with Bluetooth capabilities
- Python installed on your system
- Bluetooth Low Energy (BLE) support
- Basic knowledge of command-line interfaces
Step-by-Step Instructions
Step 1: Setting Up Your Development Environment
Install Required Python Libraries
Before we can interact with the Pebblebee Halo, we need to install the necessary Python libraries for Bluetooth communication. The bleak library is perfect for this task as it provides cross-platform BLE support.
pip install bleak
Why: The bleak library abstracts away the complexities of different operating systems' BLE implementations, allowing us to focus on the actual device interaction rather than platform-specific code.
Step 2: Discovering the Pebblebee Halo Device
Scan for BLE Devices
First, we need to find your Pebblebee Halo device on the Bluetooth network. Create a simple Python script to scan for nearby BLE devices:
import asyncio
from bleak import BleakScanner
async def scan_devices():
devices = await BleakScanner.discover()
for device in devices:
print(f"Device: {device.name} - {device.address}")
asyncio.run(scan_devices())
Why: This step is crucial because every BLE device has a unique identifier (address) that we'll need to connect to. The scan will help us identify which device is your Pebblebee Halo by its name or characteristics.
Step 3: Connecting to the Halo Device
Establish a Connection
Once you've identified your Halo's device address, create a connection script:
import asyncio
from bleak import BleakClient
# Replace with your actual device address
DEVICE_ADDRESS = "XX:XX:XX:XX:XX:XX"
async def connect_to_device():
async with BleakClient(DEVICE_ADDRESS) as client:
print(f"Connected: {client.is_connected}")
# Add your device interaction code here
asyncio.run(connect_to_device())
Why: Establishing a connection is the foundation of all device interactions. The BleakClient object provides a clean interface for sending and receiving data from the device.
Step 4: Reading Device Status Information
Accessing Safety Features
Now let's read the status information from your Halo device, which includes battery level and safety alert status:
import asyncio
from bleak import BleakClient
DEVICE_ADDRESS = "XX:XX:XX:XX:XX:XX"
async def read_device_status():
async with BleakClient(DEVICE_ADDRESS) as client:
# Read battery level (example characteristic)
battery_char = "00002a19-0000-1000-8000-00805f9b34fb"
battery_data = await client.read_gatt_char(battery_char)
battery_level = int.from_bytes(battery_data, byteorder='little')
print(f"Battery Level: {battery_level}%")
# Read safety status
safety_char = "0000180f-0000-1000-8000-00805f9b34fb"
safety_data = await client.read_gatt_char(safety_char)
print(f"Safety Status: {safety_data}")
asyncio.run(read_device_status())
Why: Understanding how to read device characteristics is essential for monitoring your safety device's status. The battery level helps you know when to recharge, and safety status tells you if any alerts are active.
Step 5: Activating the Safety Alert
Triggering the Siren and Strobe
The real power of the Pebblebee Halo lies in its emergency alert system. Here's how to trigger the 130dB siren and strobe light:
import asyncio
from bleak import BleakClient
DEVICE_ADDRESS = "XX:XX:XX:XX:XX:XX"
async def trigger_safety_alert():
async with BleakClient(DEVICE_ADDRESS) as client:
# Write to safety alert characteristic
alert_char = "0000180a-0000-1000-8000-00805f9b34fb" # Example UUID
alert_data = bytes([0x01]) # Trigger alert command
await client.write_gatt_char(alert_char, alert_data)
print("Safety alert triggered!")
asyncio.run(trigger_safety_alert())
Why: This command sends a specific signal to the device's safety module, activating both the siren and strobe light. The 130dB sound level is designed to be heard from great distances, making it effective for emergency situations.
Step 6: Creating a Simple Status Monitor
Building a User Interface
Let's create a simple monitoring script that continuously checks the device status:
import asyncio
from bleak import BleakClient
import time
DEVICE_ADDRESS = "XX:XX:XX:XX:XX:XX"
async def monitor_device():
async with BleakClient(DEVICE_ADDRESS) as client:
print("Starting device monitoring...")
while True:
try:
# Read battery level
battery_char = "00002a19-0000-1000-8000-00805f9b34fb"
battery_data = await client.read_gatt_char(battery_char)
battery_level = int.from_bytes(battery_data, byteorder='little')
# Read safety status
safety_char = "0000180f-0000-1000-8000-00805f9b34fb"
safety_data = await client.read_gatt_char(safety_char)
print(f"Battery: {battery_level}% | Safety Status: {safety_data}")
await asyncio.sleep(5) # Check every 5 seconds
except Exception as e:
print(f"Error reading device: {e}")
break
asyncio.run(monitor_device())
Why: This monitoring script gives you real-time visibility into your device's condition, helping you maintain optimal safety readiness and detect any issues before they become critical.
Step 7: Testing Your Setup
Verification and Troubleshooting
Run your scripts to ensure everything works correctly:
- Run the device discovery script to locate your Halo
- Connect to the device using the correct address
- Verify you can read status information
- Test the safety alert activation
- Confirm the monitoring script works properly
Why: Testing each component individually ensures that your entire system works correctly before relying on it for actual safety situations.
Summary
In this tutorial, you've learned how to interact with the Pebblebee Halo's Bluetooth Low Energy interface to monitor its status and activate its safety features. You've set up a development environment, discovered and connected to the device, read status information, and triggered the 130dB siren and strobe light. This foundation knowledge allows you to build more complex applications for personal safety monitoring and emergency response systems.
Remember that the Pebblebee Halo's true value lies in its combination of location tracking with immediate emergency response capabilities. While this tutorial focuses on the technical aspects, the real-world application is about having a reliable safety device that can alert others to your emergency situation when you need help most.



