Come connettersi a un dispositivo Bluetooth con un MacBook e Python
Connettiti a orologi intelligenti, lampadine intelligenti e sensori Bluetooth LE con Python e Bleak sul tuo computer Mac OS.
Questo è un tutorial per principianti su Python e Bluetooth LE (Low Energy). Se conosci già Python e Bluetooth, dai un'occhiata alla breve versione TL;DR di questo articolo .
Ci collegheremo a un sensore di movimento indossabile Xsens DOT come dispositivo di esempio, sebbene tu possa connetterti a qualsiasi dispositivo che possiedi.
Requisiti
- Un computer Mac OS (12.x+)
- Pitone 3
- Bleak (una libreria Python Bluetooth LE)
- Uno smartwatch, una lampadina smart o un dispositivo Bluetooth LE simile
Ci collegheremo a un dispositivo Bluetooth LE con Python 3 scrivendo il codice da zero. Questo codice sarà un elemento costitutivo per l'aggiunta di funzionalità Bluetooth ai tuoi progetti e può essere utilizzato per creare dashboard, strumenti e pipeline di analisi dei dati per i dispositivi Bluetooth LE.
NOTA: questo tutorial è per i dispositivi Bluetooth LE , non per il normale Bluetooth . Sebbene siano simili, Bluetooth LE e Bluetooth non sono la stessa cosa sotto il cofano. Il codice che scriviamo qui non può essere utilizzato per connettersi a un normale dispositivo Bluetooth (" Bluetooth Classic ").
Se non hai bisogno di una spiegazione approfondita su Bluetooth o AsyncIO , consulta la nostra versione breve di questo articolo qui .
Passi
In questo tutorial:
- Installa Bleak , una libreria Python per la connessione ai dispositivi Bluetooth LE.
- Importa Bleak in un file Python di base.
- Usa le funzioni integrate di Bleak per trovare e connetterti ai dispositivi Bluetooth LE nelle vicinanze.
Che cos'è il Bluetooth LE?
Bluetooth LE è un modo wireless per connettersi a orologi intelligenti, lampadine intelligenti, tag di prossimità e altro ancora. Il Bluetooth consente a questi piccoli dispositivi di connettersi al telefono o al computer in modo che possano scambiarsi messaggi sulla frequenza cardiaca, sui messaggi di testo ricevuti o sulla posizione delle chiavi della macchina perse. "LE" sta per "Low Energy", perché è come il Bluetooth originale ma più veloce e leggero.
Come funziona la connessione quotidiana al Bluetooth
Per le persone comuni (non programmatori), la connessione Bluetooth funziona così:
- Hai un dispositivo principale (un laptop o un telefono cellulare) e un dispositivo Bluetooth, come uno smartwatch o una lampadina.
- Attiva il Bluetooth su questi due dispositivi.
- Entrambi i dispositivi inviano segnali wireless nell'universo dicendo: “Mi chiamo [ Macbook di Joe o Smartwatch di Sarah ]. Posso fare Bluetooth! Chi vuole connettersi con me?
- Vedrai i dispositivi Bluetooth più piccoli in un elenco "Dispositivi disponibili" sul tuo laptop o smartphone.
- Fai clic su un pulsante per accettare di connettere i dispositivi.
Come connettersi al Bluetooth con il codice
Per connetterci con il codice, tuttavia, dobbiamo suddividere i 5 passaggi precedenti in passaggi multipli, più piccoli e più specifici.
Non dobbiamo scrivere tutto da zero però. Possiamo usare alcune librerie Python che altre persone hanno scritto (Bleak e AsyncIO) per rendere le cose un po' più semplici.
Rendi le cose più facili con la libreria "Bleak".
Bleak è una libreria Bluetooth LE per Python che è gratuita e viene fornita con una serie di codice pre-scritto in modo che possiamo connetterci rapidamente ai nostri dispositivi Bluetooth LE. Può connettersi a dispositivi Bluetooth LE da macOS, Windows e Linux.
Per usarlo, lo installeremo sul nostro Macbook (trattato di seguito) e poi importnel nostro codice Python in questo modo:
# Our python code file, "main.py"
import bleak
...
# the rest of our code
Ci saranno ancora alcune righe necessarie per far funzionare bene Bleak, ma questo è il modo più semplice per includere Bleak nel nostro codice Python: installa e importa.
La fase di installazione prima dell'importazione è un po' più impegnativa, a causa della necessità di un gestore di pacchetti come Pip.
Installazione di "Bleak" per Python
Github di Bleak ha una guida all'installazione, che è semplice come aprire Terminal sul tuo Macbook ed eseguire:
pip install bleak
Your Terminal prompt may have a “%” or “$”. Write all commands in Terminal after this character.
Il tutorial di installazione ufficiale per Pip è collegato qui.
Pip è il gestore di pacchetti per Python e qualsiasi libreria Python di moderata popolarità può essere scaricata utilizzando Pip. Se hai scaricato Python tramite Python.org , Homebrew o se era già installato sul tuo Macbook, probabilmente hai già Pip. Tutti i comandi Pip possono essere eseguiti digitando pip <your command>nel Terminale.
Per verificare se hai Pip, puoi aprire Terminal e digitare semplicemente pip. Premi invio e Pip stamperà un menu di aiuto se è già installato.
Perché scaricare Pip? Pip è utilizzato nella maggior parte degli altri tutorial e pacchetti Python che incontrerai. Conoscere Pip è la chiave per essere un buon programmatore Python.
Se non hai Pip, puoi seguire le istruzioni di installazione ufficiali o riscaricare Python 3 . Pip verrà incluso nell'installazione di Python 3.
Quanto sopra, pip install bleakscaricherà e installerà Bleak sul tuo laptop. Quindi saremo in grado di entrare nel nostro codice Python (i file che terminano in .py) e utilizzare il importcomando per importare Bleak e usarlo.
Per ribadire, i passaggi sono:
- Controlla se hai già installato Pip (digita
pipTerminale) - Scarica Pip , se non ce l'hai.
- Installa Bleak dal terminale con
pip install bleak import bleaknel tuo codice (ad esempio metti quella riga nella parte superiore del tuo file Python)
NOTE: the versions for Bleak and Python in this tutorial are the following:
bleak = 0.18.1
python = 3.9.6
- Crea un nuovo file Python chiamato
main.pyin un editor di testo come Sublime o altri . - Nella parte superiore di
main.py, importa la libreria Bleak con la lineaimport bleak
Una breve pausa: i passaggi dietro il codice Python
Come promemoria, i passaggi per la connessione al Bluetooth tramite codice sono più dettagliati rispetto alla connessione Bluetooth quotidiana.
Tuttavia, nel codice, questo appare come segue:
- Attiva il Bluetooth sul tuo laptop e sul piccolo dispositivo Bluetooth. (Questo passaggio viene eseguito manualmente da un essere umano.)
- Importa una libreria Bluetooth come Bleak.
- Dì al tuo codice di cercare tutti i dispositivi Bluetooth LE vicino a te e di salvarli in un elenco.
- Cerca nell'elenco dei dispositivi Bluetooth LE salvati quello che desideri, che potrebbe avere un nome reale come "Philips Lightbulb" o potrebbe apparire solo come indirizzo MAC (ad es. ), che è come un indirizzo IP permanente per dispositivi individuali, wireless
aa:bb:cc:11:22:33, dispositivi elettronici. - Invia una richiesta dal tuo laptop per connetterti al dispositivo Bluetooth.
Torna a scrivere codice Python: come usare Bleak
Abbiamo imported Bleak. Ora cosa dobbiamo fare con esso?
Possiamo interagire con i dispositivi Bluetooth utilizzando le funzioni integrate in Bleak. Ad esempio, possiamo trovare dispositivi Bluetooth vicino a noi con:
bleak.BleakScanner()
# OR
bleak.BleakScanner.discover()
address = "ab:cd:ef:34:56:78"
bleak.BleakClient(address)
Un esempio di codice reale
Questa è una "scansione" del codice per tutti i dispositivi Bluetooth LE nell'area (tra 20 e 100 metri da te).
Usa Bleak su discovertutti i dispositivi vicini, quindi printli sullo schermo. Non si connette ancora a loro, ma lo tratteremo di seguito.
import asyncio
from bleak import BleakScanner
async def main():
devices = await BleakScanner.discover()
for device in devices:
print(device)
asyncio.run(main())
Di solito, il codice viene eseguito dall'alto verso il basso, una riga dopo l'altra. Ma per quanto riguarda il codice in cui dobbiamo inviare un messaggio wireless a un dispositivo Bluetooth e quindi non sappiamo quando riceveremo risposta da quel dispositivo? Non possiamo mettere in pausa il nostro codice e attendere indefinitamente, quindi cosa facciamo?
Dobbiamo usare il codice asincrono , che in Python è fornito dalla libreria incorporata, asyncio. Asyncio ci consente di eseguire più parti di codice contemporaneamente, il che semplifica operazioni come cercare e parlare con dispositivi Bluetooth che potrebbero richiedere alcuni secondi per risponderci. (Ulteriori informazioni sulla "scansione" sono riportate di seguito.)
In effetti, Bleak non funzionerà senzaasyncio . Il codice di esempio dalla documentazione di Bleak mostra come si fa:
# Connect to a single Bluetooth device
import asyncio
from bleak import BleakClient
async def main():
async with BleakClient("XX:XX:XX:XX:XX:XX") as client:
# Read a characteristic, etc.
...
# Device will disconnect when block exits.
...
# Using asyncio.run() is important to ensure that device disconnects on
# KeyboardInterrupt or other unhandled exception.
asyncio.run(main())
Senza asyncio, il codice invierà messaggi ai dispositivi Bluetooth, ma poiché non attende e non ascolta alcun messaggio da tali dispositivi, il codice va avanti immediatamente e si chiude senza dispositivi trovati o messaggi ricevuti.
I passaggi complessivi per il codice Bluetooth
Per connetterci a un dispositivo Bluetooth, dobbiamo fare due cose:
- Trova il dispositivo (AKA "scansione" per esso).
- Richiedi di connetterti ad esso.
- Gli indirizzi MAC sono simili a:
ab:cd:ef:12:34:56 - Gli UUID sono simili a:
123e4567-e89b-12d3-a456–426614174000
La scansione è trattata in dettaglio di seguito.
Come cercare dispositivi Bluetooth con codice
Scriviamo uno scanner per dispositivi Bluetooth LE.
Tutti i dispositivi Bluetooth LE accesi ma non connessi a nulla inviano continuamente segnali wireless dicendo: "Ehi, esisto e voglio connettermi!" Scriveremo un codice che ascolti questi "Hey!" messaggi e li stampa sullo schermo del nostro computer.
Alla fine, avremo un elenco di nomi e indirizzi di tutti i dispositivi Bluetooth LE disponibili nella nostra zona.
La carne del codice sarà una asyncfunzione, all'interno della quale c'è una riga in cui chiamiamo BleakScanner.discover(). Raccogliamo tutti i dispositivi rilevati nella devicesvariabile. Quindi, una volta terminata la scansione (5-10 secondi dopo, l'impostazione predefinita per discover()) utilizziamo un forciclo per stampare tutti i dispositivi trovati.
Di seguito è riportato il modo più semplice per utilizzare Bleak per cercare dispositivi Bluetooth:
import asyncio
from bleak import BleakScanner
async def main():
devices = await BleakScanner.discover()
for device in devices:
print(device)
asyncio.run(main())
- importare le librerie asincrone e Bleak
- avviare la modalità
BleakScannerindiscover, che cercherà i dispositivi Bluetooth per 5-10 secondi printtutti i dispositivi Bluetooth trovati
L'ultima riga, asyncio.run(main()), dice a Python che vogliamo che la funzione principale ( async def main():) venga eseguita in modo asincrono all'avvio del programma , main.py. Altrimenti, asyncionon avvolge nessuna parte del nostro codice e le parole chiave awaite asyncdiventano prive di significato.
Avviamo il nostro scanner.
Con il codice sopra salvato in un scanner.pyfile, eseguiremo il codice dalla riga di comando (AKA "Terminale"), la stessa app che usavamo per pip install bleak.
In Terminale, vai alla cartella in cui scanner.pyè stato salvato. Ad esempio, se scanner.pyè salvato nella cartella Documenti, aprirai Terminale, quindi digita cd Documents( cd= "cambia directory") per navigare su "Documenti", quindi puoi eseguire scanner.py.
Per eseguire il tuo codice, digita python scanner.py. Il programma inizierà ad ascoltare i dispositivi Bluetooth. Dopo 10 secondi, scriverà un gruppo di dispositivi (i loro UUID e nomi) sullo schermo. Nota: alcuni sistemi richiedono di scrivere python3invece di python, a seconda dell'installazione.
L'output dello scanner:
Grazie al nostro scanner, possiamo vedere tutti i dispositivi Bluetooth vicino a noi, con i loro UUID e nomi.
Sulla prima riga dell'immagine, eseguiamo lo scanner ( python3 scanner.py).
La seconda riga mostra il nostro primo dispositivo Bluetooth trovato. Il suo indirizzo, o UUID, è E06699287-436C-XXXX-XXXX-XXXXXXXXXXXXe il suo nome. (Ci sono molti Unknownnomi, dal momento che non tutti i dispositivi Bluetooth daranno il proprio nome.)
Perché ci sono UUID e nessun indirizzo MAC? Questa è una stranezza dei computer Mac OS che è stata implementata per motivi di sicurezza. I Mac possono connettersi utilizzando gli indirizzi MAC se ti capita di conoscere l'indirizzo del tuo dispositivo, ma per impostazione predefinita il Mac utilizza gli UUID.
In caso di problemi con la scansione:
- assicurati che il Bluetooth del tuo Macbook sia attivo
- prova a rieseguire
scanner.py
Lo scopo della scansione è trovare l'indirizzo di un dispositivo Bluetooth (il suo indirizzo MAC o UUID).
Come promemoria:
- Gli indirizzi MAC sono
xx:xx:xx:xx:xx:xx - Gli UUID sono
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
La fase di connessione del dispositivo effettivo
Per connetterci a un dispositivo Bluetooth , tutto ciò che dobbiamo fare è restituire l'indirizzo MAC del dispositivo a BleakClient.
Questo sarà simile al codice negli esempi precedenti. Inseriremo questo codice in un file separato, denominato connect.py. Per questo esempio, proveremo a connetterci a uno degli Xsens DOT trovati dallo scanner, che sono minuscoli dispositivi di tracciamento del movimento del corpo .
Il nostro codice di connessione funziona come segue:
# connect.py
import asyncio
from bleak import BleakClient, BleakScanner
async def main():
address = "338312FA-C3D1-183F-325A-0726AFDBEB78" # Xsens DOT UUID
async with BleakClient(address) as client:
print(client.is_connected) # prints True or False
asyncio.run(main())
Se stampa True, il nostro codice ha funzionato. Se è False, il dispositivo non è stato trovato. Se un dispositivo non viene trovato, l'indirizzo era sbagliato, il dispositivo non ha risposto, il Bluetooth del Mac era disattivato o qualcosa di simile. Per risolvere i problemi, prova a eseguire nuovamente il codice per confermare, ricontrollare il tuo indirizzo Bluetooth o riattivare il tuo dispositivo Bluetooth, poiché il Bluetooth a volte può dormire o fallire inspiegabilmente.
Questo è tutto ciò di cui abbiamo bisogno per connetterci a un dispositivo Bluetooth LE.
Cos'altro possiamo fare?
Non è sufficiente connettersi solo ai dispositivi. Che ne dici di ottenere e inviare dati da questi dispositivi Bluetooth?
Possiamo eseguire lo streaming di dati, creare dashboard con i nostri dati e controllare le nostre lampadine intelligenti e altri dispositivi. Questi tutorial sono in arrivo. Rimani sintonizzato.
Domande e feedback
Se hai domande o commenti, scrivici a [email protected] o inviaci un messaggio su Instagram (@protobioengineering) .
Se ti è piaciuto questo articolo, considera di sostenerci donando un caffè .

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































