Serveur d'impression

Programmation Bluetooth avec Python 3 – Bien choisir son serveur d impression

Par Titanfall , le 27 septembre 2019 - 5 minutes de lecture

écrit

Cet article présente les techniques de base pour communiquer via Bluetooth avec Python 3.3 et versions ultérieures (à l'aide de sockets Python). Quelques exemples simples de communication via
Bluetooth avec prises sera affiché. Des exemples PyBluez seront également présentés pour
Comparaison.

Les deux options

À l’heure actuelle, le moyen le plus documenté de communiquer avec Python via Bluetooth est d’utiliser PyBluez. Auparavant, PyBluez ne supportait que Python 2. En janvier 2014, ils ont publié une version Python 3.

Les sockets Python natifs de Python 3.3 prennent en charge la communication Bluetooth. Malheureusement, il existe très peu de documentation disponible décrivant Comment utiliser les sockets Python pour communiquer via Bluetooth. Bien que l’utilisation de Bluetooth avec ces sockets puisse être facile pour quelqu'un qui sait déjà utiliser les sockets Python, le manque de documentation laisse de nombreuses personnes ignorantes de l’existence même de cette méthode d’utilisation de Bluetooth. Depuis que PyBluez a été porté sur Python 3, l’utilisation des sockets Python natifs a une utilisation limitée.

Compétence requise: trouver l'adresse MAC d'un adaptateur Bluetooth

Pour exécuter les exemples, l'adresse MAC de l'adaptateur Bluetooth utilisé par le serveur doit être connue. L'application client utilise cette adresse pour se connecter au serveur. Sous Linux, vous pouvez obtenir une liste de tous les périphériques Bluetooth disponibles et de leurs adresses MAC à l’aide de la commande hciconfig, ainsi:

sortie hciconfig

Messagerie du client

Cette application connecte deux appareils via Bluetooth et permet à l'un d'envoyer des messages à l'autre. Le périphérique d'envoi fonctionne socketClient.pyet le périphérique de réception fonctionne socketServer.py. Ces scripts sont présentés ci-dessous, en utilisant d’abord les sockets Python, puis PyBluez:

Sockets python

Client (socketClient.py)
1
2
3
4
5
6
sept
8
9
dix
11
12
13
14
15
16
17
"" "
Un simple script Python pour envoyer des messages à un serveur via Bluetooth en utilisant
Sockets Python (avec Python 3.3 ou supérieur).
"" "

importation prise

serverMACAddress = '00: 1f: e1: dd: 08: 3d '
Port = 3
s = prise.prise(prise.AF_BLUETOOTH, prise.SOCK_STREAM, prise.BTPROTO_RFCOMM)
s.relier((serverMACAddress,Port))
tandis que 1:
    texte = contribution()
    si texte == "quitter":
        Pause
    s.envoyer(octets(texte, 'UTF-8'))
s.proche()
Serveur (socketServer.py)
1
2
3
4
5
6
sept
8
9
dix
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
"" "
Un simple script Python pour recevoir des messages d'un client sur
Bluetooth utilisant des sockets Python (avec Python 3.3 ou supérieur).
"" "

importation prise

hostMACAddress = '00: 1f: e1: dd: 08: 3d ' # L'adresse MAC d'un adaptateur Bluetooth sur le serveur. Le serveur peut avoir plusieurs adaptateurs Bluetooth.
Port = 3 # 3 est un choix arbitraire. Cependant, il doit correspondre au port utilisé par le client.
arriéré = 1
Taille = 1024
s = prise.prise(prise.AF_BLUETOOTH, prise.SOCK_STREAM, prise.BTPROTO_RFCOMM)
s.lier((hostMACAddress,Port))
s.écoute(arriéré)
essayer:
    client, adresse = s.Acceptez()
    tandis que 1:
        Les données = client.recv(Taille)
        si Les données:
            impression(Les données)
            client.envoyer(Les données)
sauf:	
    impression("Prise de fermeture")	
    client.proche()
    s.proche()

En passant, ce code est presque identique au code requis pour créer une application client-serveur sur Internet. Tout ce qui doit être changé, ce sont les deux lignes:

1
2
3
4
5
6
sept
8
9
# Pour le serveur
s = prise.prise(prise.AF_INET, prise.SOCK_STREAM)
s.lier(("192.168.1.17",50001)) # L'adresse MAC Bluetooth et le port RFCOMM sont remplacés par une adresse IP et un port TCP.

# Pour le client
s = prise.prise(prise.AF_INET, prise.SOCK_STREAM)
s.relier(("192.168.1.17",50001))

# Remarque: il s’agit d’adresses IP et de ports TCP arbitraires.

PyBluez

Pour comparer, voici l’application fonctionnellement identique écrite à l’aide de la bibliothèque PyBluez.

Client (PyBluezClient.py)
1
2
3
4
5
6
sept
8
9
dix
11
12
13
14
15
16
17
"" "
Un simple script Python pour envoyer des messages à un serveur via Bluetooth
en utilisant PyBluez (avec Python 2).
"" "

importation Bluetooth

serverMACAddress = '00: 1f: e1: dd: 08: 3d '
Port = 3
s = Bluetooth.Prise Bluetooth(Bluetooth.RFCOMM)
s.relier((serverMACAddress, Port))
tandis que 1:
    texte = entrée brute() # Remarque: passage à l'ancien (Python 2) raw_input
    si texte == "quitter":
    Pause
    s.envoyer(texte)
chaussette.proche()
Serveur (PyBluezServer.py)
1
2
3
4
5
6
sept
8
9
dix
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
"" "
Un simple script Python pour recevoir des messages d'un client sur
Bluetooth en utilisant PyBluez (avec Python 2).
"" "

importation Bluetooth

hostMACAddress = '00: 1f: e1: dd: 08: 3d ' # L'adresse MAC d'un adaptateur Bluetooth sur le serveur. Le serveur peut avoir plusieurs adaptateurs Bluetooth.
Port = 3
arriéré = 1
Taille = 1024
s = Bluetooth.Prise Bluetooth(Bluetooth.RFCOMM)
s.lier((hostMACAddress, Port))
s.écoute(arriéré)
essayer:
    client, clientInfo = s.Acceptez()
    tandis que 1:
        Les données = client.recv(Taille)
        si Les données:
            impression(Les données)
            client.envoyer(Les données) # Écho au client
sauf:	
    impression("Prise de fermeture")
    client.proche()
    s.proche()

Conclusion

PyBluez est le moyen le plus efficace de communiquer via Bluetooth en utilisant Python. Les sockets Python peuvent maintenant être utilisés pour la communication Bluetooth (depuis Python 3.3). Pour une application simple, le code est presque identique. Cependant, pour certaines tâches, telles que la découverte de périphériques et les publications de services Bluetooth, il ne semble pas possible de les exécuter à l'aide de sockets Python. En conséquence, PyBluez a surpassé à bien des égards les sockets Python. Cette question Stackoverflow traite de certaines des limitations des sockets Python pour Bluetooth.

Lectures complémentaires

Il y a peu ou pas d'informations sur la programmation Bluetooth avec les sockets Python. Il y a beaucoup d'informations sur PyBluez. Voici quelques ressources utiles:

Bluetooth Essentials pour les programmeurs
Couvre de nombreux langages de programmation et utilise PyBluez avec Python. Idéal pour commencer vite et gagner la compréhension en cours de route.
Exemples PyBluez
Exemple de code couvrant diverses tâches Bluetooth.

Click to rate this post!
[Total: 0 Average: 0]

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.