Cet article est un article de didacticiel destiné à ceux qui souhaitent effectuer une communication BLE de SwitchBot à l'aide de Bleak sous Windows 10. Il se connecte à SwitchBot et envoie des octets d'instructions. Le langage est python. De plus, bien que SwitchBot soit utilisé dans cet article, je pense qu'il peut être utilisé pour d'autres appareils BrueTooth en tant que communication BLE utilisant Bleak car il se connecte et envoie uniquement des octets d'instructions. (Probablement)
SwitchBot C'est un interrupteur qui peut être commandé à distance par Bluetooth. Il existe plusieurs types, mais cette fois, j'utiliserai le SwitchBot suivant https://www.switchbot.jp/bot
La communication BLE (Bluetooth Low Energy) est une norme ajoutée à partir de la version Bluetooth 4.0 qui permet la communication avec des appareils Bluetooth à faible puissance. Je pense qu'il est plus facile de comprendre ce domaine si vous vous référez à l'article du prédécesseur.
https://houwa-js.co.jp/blog/2018/06/20180629/
https://jellyware.jp/kurage/bluejelly/ble_guide.html
Si vous souhaitez effectuer une communication BLE de SwitchBot sous l'environnement Windows, pybluez, qui est la principale bibliothèque de communication BLE utilisée, ne peut pas être utilisé sous Windows. (Référence: https://atatat.hatenablog.com/entry/2020/07/09/003000#3-Bleak%E3%81%AE%E5%88%A9%E7%94%A8) De plus, SwitchBot a github pour la communication BLE sur PC, mais c'est un code qui n'est pris en charge que par pyblues, donc Il ne peut pas être utilisé tel quel.
De cet article Puisqu'il a été dit qu'un module appelé Bleak peut être utilisé pour la communication BLE sous l'environnement Windows, je vais l'utiliser. Exécutez la commande pip suivante.
pip install bleak
En vous référant au Document officiel, exécutez le programme pour rechercher les appareils Bluetooth à proximité sur votre PC.
Discover.py
import asyncio
from bleak import discover
async def run():
devices = await discover()
for d in devices:
#Afficher l'adresse Mac, le nom et la distance de l'appareil trouvé
print(d.address,d.name,d.rssi)
print(d)
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
Si SwitchBot est trouvé ici, l'adresse MAC de SwitchBot sera affichée, alors copiez-la. Si vous ne le trouvez pas, téléchargez le pilote Bluetooth depuis ici et vérifiez si le SwitchBot est correctement reconnu. De plus, il existe une possibilité de défaillance initiale de SwitchBot, il est donc recommandé d'effectuer un test de connexion à partir de l'application SwitchBot fournie par l'application Android / iOS. La méthode détaillée est décrite dans le guide de démarrage rapide fourni avec Switchbot.
Si l'adresse MAC peut être obtenue, connectez-vous au SwitchBot via la communication BLE → envoyez une commande. Le programme suivant est un exemple de la connexion et de la transmission créées.
Bleak_Connect_SwitchBot.py
import asyncio
from bleak import discover
async def run():
import asyncio
from bleak import BleakClient
import time
#Adresse Mac du switchbot.[Discover.py]Besoin de savoir dans
address = " "
#switchbot UUID.Excavé du github de SwitchBot
UUID = "cba20002-224d-11e6-9fb8-0002a5d5c51b"
async def run(address, loop):
async with BleakClient(address, loop=loop) as client:
#Faites une pause pour éviter les erreurs de synchronisation.
time.sleep(5)
#Test de connexion ci-dessous.[Connected: False]S'affiche, la connexion a échoué.
x = await client.is_connected()
print("Connected: {0}".format(x))
#Vérifiez l'état actuel du switchbot
y = await client.read_gatt_char(UUID)
print(y)
print("La connexion a réussi. Veuillez entrer la commande.\commande n → appuyez sur,on,off,exit")
while True:
#Recevez des commentaires. Modifiez la commande à envoyer pour chaque commande. sortie si sortie
command = input()
if command == "press":
write_byte = bytearray(b'\x57\x01\x00')
elif command == "on":
write_byte = bytearray(b'\x57\x01\x01')
elif command == "off":
write_byte = bytearray(b'\x57\x01\x02')
elif command == "exit":
#[exit]Si vous entrez, cela se terminera dans 1 seconde
await asyncio.sleep(1.0, loop=loop)
break
else:
print("Veuillez entrer la commande.\commande n → appuyez sur,on,off,exit")
continue
#Envoyer des instructions à switchbot
await client.write_gatt_char(UUID, write_byte)
#Vérifiez l'état actuel du switchbot
y = await client.read_gatt_char(UUID)
print(y)
#Pause en raison d'une erreur de synchronisation
time.sleep(2)
#Commencez la communication avec Switchbot par Bleak
loop = asyncio.get_event_loop()
loop.run_until_complete(run(address, loop))
Ce programme attend l'entrée des E / S standard si la connexion est réussie. Vous pouvez entrer la commande suivante:
Basculez l'octet d'instruction en fonction de l'opération que vous souhaitez effectuer et envoyez l'instruction à Switchbot par client.write_gatt_char (UUID, write_byte). Si le SwitchBot fonctionne correctement, vous avez réussi.
J'ai expliqué comment utiliser SwitchBot pour la communication BLE (python) sous environnement Windows. Le contenu expliqué dans cet article ne peut que se connecter et envoyer, et je ne sais pas encore comment changer de mode de SwtichBot en raison de mon manque d'étude. Si je trouve une méthode de changement de mode dans le document officiel ou github à l'avenir, je voudrais l'ajouter et la décrire dans un autre article.
[]( Le github qui résume le code est ici (seul le code de cet article est disponible) ) Postscript (11/09/2020): l'API SwitchBot utilise BlueZ, elle ne peut donc pas être utilisée sous Windows. https://github.com/RoButton/switchbotpy
Recommended Posts