How to Scan for Bluetooth Devices with Python Library

5/5 - (1 vote)

In today’s connected world, knowing how to interact with Bluetooth devices is a valuable skill. Python is a popular and versatile programming language that can help you scan and connect to Bluetooth devices. Using a library called PyBluez, you can easily discover nearby Bluetooth-enabled devices, making it a perfect choice for beginners and advanced programmers. 📱💻

💡 PyBluez is a popular Python library that allows developers to create Bluetooth applications and interact with nearby devices. With this library, you can scan for nearby devices, establish connections, and send and receive data. The library is compatible with various platforms, including Windows, Linux, and macOS. 🌎

To start scanning for Bluetooth devices with Python and PyBluez, you must install the required packages and import the necessary modules before writing your code. Scanning for devices is simple and intuitive, making it easy for programmers to integrate Bluetooth functionalities into their projects. So, gear up to explore the world of wireless communication with Python! 🐍✨


Before diving into scanning for Bluetooth devices using Python, let’s make sure you have the necessary setup in place. This section guides you through setting up your Python environment and installing the Pybluez library. 🛠️

Python Environment Setup

To get started, ensure that you have Python installed on your machine. For this tutorial, we recommend using Python version 3.6 or higher. You can check your Python version by running the following command in your terminal:

python --version

If you don’t have Python installed or need to upgrade, visit the official Python website to download the latest version.

Next, you’ll want to set up a virtual environment. This creates an isolated environment to install Python packages, ensuring that your projects don’t interfere with each other or with the system Python installation:

python -m venv venv
source venv/bin/activate  # or "venv\Scripts\activate" on Windows

With your environment set up, you can move on to installing Pybluez. 🚀

Installing Pybluez

Pybluez is a Python library that provides a simple interface for working with Bluetooth devices. To install it, you’ll need to use pip, the Python package manager:

pip install pybluez

💡 If you don’t have pip installed, you can follow our full guide on the Finxter blog.

Great! Now you have a Python environment with the Pybluez library installed, you’re all set to start scanning for Bluetooth devices. In the next sections, you’ll learn how to use Python and Pybluez to detect nearby devices and manipulate Bluetooth services. 💻🔍

Discovering Bluetooth Devices

This section will discuss how to scan for Bluetooth devices using the Python programming language. We’ll explore the Pybluez library, discover devices using the discover_devices function, and fetch device names with the lookup_names function. 🌐🐍

Using Pybluez Library

Pybluez is a popular Python library that simplifies working with Bluetooth devices. You can easily install it using pip, the Python package manager:

pip install pybluez

With Pybluez installed, you can now access various features for Bluetooth devices, such as scanning, connecting, and retrieving information. 📡

Discovering Devices with Discover_Devices

To discover nearby Bluetooth devices, use the discover_devices function of the Pybluez library. This function returns a list of device addresses.

Here is a simple example to get started:

import bluetooth

nearby_devices = bluetooth.discover_devices()
print("Found %d devices" % len(nearby_devices))

This code snippet initiates a Bluetooth scan, and when the scan is complete, prints the number of devices found. 🌟🔍

Fetching Device Names with Lookup_Names

After discovering the available devices, you can retrieve their names using the lookup_names function. Here’s a code snippet that demonstrates how to use lookup_names in combination with discover_devices:

import bluetooth

print("Performing inquiry...")
nearby_devices = bluetooth.discover_devices(lookup_names=True)
print(f"Found {len(nearby_devices)} devices.")

for addr, name in nearby_devices:
    print(f"Address: {addr}, Name: {name}")

This code initiates a Bluetooth scan and returns a list of tuples containing the address and name of each discovered device. The results are printed in a human-readable format, making it easy to identify nearby devices. 📱🖥️

Platform Compatibility

Next, we’ll discuss the platform compatibility of scanning for Bluetooth devices using Python libraries. We’ll cover Linux Support and Windows Support.

Linux Support

For Linux, the recommended library is pybluez2. Pybluez2 provides an easy-to-use interface for scanning and connecting to Bluetooth devices on Linux systems.

To install pybluez2, simply run the following command:

pip install pybluez2

Once installed, you can use it to scan for nearby devices and open Bluetooth sockets 👍.

Windows Support

On the Windows platform, PyBluez is a popular choice for working with Bluetooth devices in Python. It works well with Windows and can be installed by running:

pip install pybluez

Additionally, you can use the pygatt library to communicate with BLE devices on Windows. Install with:

pip install pygatt

Using these libraries, you can effectively scan and communicate with Bluetooth devices on both Linux and Windows platforms 🖥️.

Remember to keep your code updated and use the appropriate library for your specific platform, ensuring a smooth and efficient experience while working with Bluetooth devices in Python.

Bluetooth Low Energy Scanning

This section will focus on how Bluetooth Low Energy (BLE) scanning works using Python libraries. We’ll dive into the details of BLE and its differences from Bluetooth Classic. This will help you understand how to scan for devices using Python more effectively. 🚀

Exploring Bluetooth LE

Bluetooth Low Energy, or BLE, is a low-power wireless technology designed for short-range communication between devices.

One of the key features of BLE is its ability to send and receive advertisements, which are small packets of data broadcasted by devices that contain necessary information such as MAC addresses and service identifiers.

Scanning for BLE devices with Python can be achieved using libraries like gattlib or bleak. These libraries streamline discovering and connecting to BLE devices, giving you the power to interact with and manage Bluetooth LE connections.

Differences from Bluetooth Classic

BLE differs from Bluetooth Classic in several ways, making it a more suitable option for applications that require low power consumption and efficient wireless communication. Some key differences include:

  • ⏱️ Power consumption: BLE is designed with power efficiency in mind, making it ideal for battery-operated devices or IoT applications.
  • 📶 Range: Bluetooth Classic offers a longer range, but BLE provides shorter range communication, focusing on minimizing power consumption.
  • 📘 Protocol: Bluetooth Classic uses a complex protocol stack, while BLE employs a simpler protocol, allowing for quicker and lighter device connections.
  • 🏎️ Connection speed: BLE connects much faster than Bluetooth Classic, making it more suitable for applications that need frequent connectivity changes.

By understanding these differences, you’ll be better equipped to choose the appropriate technology and Python library for your specific project needs.

Whether you’re working with BLE or Bluetooth Classic, leveraging Python libraries will simplify scanning for and connecting to other devices. 🌐

Pairing and Connecting Devices

This section will explore how to pair and connect Bluetooth devices using Python libraries. We’ll provide a general understanding of the pairing process and explain how to establish connections using Python sockets.

Understanding the Pairing Process 😃

Pairing is establishing a connection between two Bluetooth devices, ensuring they are authenticated and have the required permissions to interact with each other. This usually involves exchanging a passkey or using an “out-of-band” method, such as Near Field Communication (NFC).

  1. Device A initiates the process by sending a pairing request to Device B.
  2. Device B receives the request and either accepts or rejects it.
  3. If accepted, both devices exchange authentication keys and establish a secure connection.

Connecting using Python Sockets 🚀

Python provides a powerful and flexible way to establish connections between Bluetooth devices using sockets. These are virtual communication channels enabling data exchange between devices.

First, install the PyBluez library to utilize Bluetooth functionality in Python.

pip install PyBluez

Create a socket to establish a connection between two Bluetooth devices:

import bluetooth

server_socket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)

You can bind the server socket to a specific address and port, and start listening for incoming connections:

server_socket.bind(("", bluetooth.PORT_ANY))

To accept incoming connections and initiate data exchange, use the following code:

client_socket, client_address = server_socket.accept()
print(f"Accepted connection from {client_address}")
data_received = client_socket.recv(1024)

Close the connection once the data exchange is completed:


Advanced Topics

In this section, we will explore using a Raspberry Pi for Bluetooth device scanning and the application of Python libraries in Covid-19 contact tracing.

We will discuss the benefits, implementation, and requirements for using these advanced tools in your project.

Using Raspberry Pi for Scanning

Raspberry Pi can be a powerful tool for scanning Bluetooth devices when properly equipped with a Python library. Utilizing the pybluez library, a Raspberry Pi can search for active Bluetooth devices and expand its functionality.

Some benefits of using Raspberry Pi for scanning include:

  • Compact and portable design 🌟
  • Affordable and easy to use
  • Highly customizable with various Python libraries

However, there are a few requirements to set up your Raspberry Pi for scanning:

  1. A compatible Raspberry Pi model with Bluetooth capabilities
  2. The Pybluez library installed
  3. A Python script that uses Pybluez for scanning

After meeting these requirements, you can start exploring Bluetooth scanning capabilities with Raspberry Pi, opening up new possibilities for your projects.

💡 Recommended: Getting Started With Thonny – The Optimal IDE for the Raspberry Pi Pico

Application in Covid-19 Contact Tracing

Python libraries and Bluetooth scanning can play a crucial part in Covid-19 contact tracing efforts.

Using Bluetooth signals to detect nearby devices makes it possible to estimate the proximity between individuals, helping to identify potential exposure risks.

Key concepts in using Python and Bluetooth scanning for contact tracing include:

  • Developing an app or software that uses a Python library for Bluetooth scanning 📱
  • Collecting anonymous encrypted data from nearby devices
  • Analyzing device proximity to determine potential exposure risks

By putting these concepts into practice, Python and Bluetooth scanning can contribute to contact tracing methods, helping in the fight against the spread of infectious diseases. Implementing this technology may keep people safe and provide valuable data for health officials during a pandemic.

Licensing and Limitations

PyBluez is distributed under the GNU General Public License (GPL), which allows you to use, modify, and distribute the library as long as the same license terms are applied to your software. More information about the license can be found on the PyBluez PyPI page. Adhering to the license terms is crucial when using open-source software like PyBluez. 🔐

Regarding limitations, it is essential to be aware of the compatibility of PyBluez with your platform.

While PyBluez supports both Windows and Linux operating systems, you might face some challenges with Mac OS.

Additionally, it is important to keep in mind that PyBluez primarily focuses on classic Bluetooth and not Bluetooth Low Energy (BLE) devices. Thus, in case your project targets BLE devices, you may need to look for alternative libraries like Adafruit’s BLE library. 🌐

Lastly, ensure that your Python version is compatible with the PyBluez library. Regular updates to the library are necessary to maintain compatibility with newer Python versions and to leverage bug fixes from the community. Staying updated ensures you have a smooth development experience with minimal issues. 🔄


Scanning for Bluetooth devices using Python is simple with the help of libraries such as PyBluez and Bleak. Following the provided examples, one can efficiently develop an application to discover nearby Bluetooth devices and even incorporate communication between them. 💡

Working with Python and Bluetooth allows for the creation of various applications, like remote monitoring or automation. It’s essential to have a solid understanding of both Python programming and Bluetooth technology to develop useful solutions. 🖥️

Always test your code thoroughly, ensuring it works with various Bluetooth devices and operating systems. This way, you can create a robust and reliable application. Good luck on your Python and Bluetooth journey! 🚀

If you want to improve your skills in Python, check out our free email academy and download our Python cheat sheets: