Dieser Artikel ist ein Tutorial-Artikel für diejenigen, die eine BLE-Kommunikation von SwitchBot mit Bleak unter Windows 10 durchführen möchten. Es stellt eine Verbindung zu SwitchBot her und sendet Anweisungsbytes. Die Sprache ist Python. Obwohl SwitchBot in diesem Artikel verwendet wird, kann es für andere BrueTooth-Geräte als BLE-Kommunikation mit Bleak verwendet werden, da nur Befehlsbytes verbunden und gesendet werden. (Wahrscheinlich)
SwitchBot Es ist ein Switch, der über Bluetooth ferngesteuert werden kann. Es gibt mehrere Typen, aber dieses Mal werde ich den folgenden SwitchBot verwenden https://www.switchbot.jp/bot
Die BLE-Kommunikation (Bluetooth Low Energy) ist ein Standard, der ab Bluetooth Version 4.0 hinzugefügt wurde und die Kommunikation mit Bluetooth-Geräten mit geringem Stromverbrauch ermöglicht. Ich denke, es ist einfacher, diesen Bereich zu verstehen, wenn Sie sich auf den Artikel des Vorgängers beziehen.
https://houwa-js.co.jp/blog/2018/06/20180629/
https://jellyware.jp/kurage/bluejelly/ble_guide.html
Wenn Sie die BLE-Kommunikation von SwitchBot unter Windows ausführen möchten, kann Pybluez, die wichtigste verwendete BLE-Kommunikationsbibliothek, unter Windows nicht verwendet werden. (Referenz: https://atatat.hatenablog.com/entry/2020/07/09/003000#3-Bleak%E3%81%AE%E5%88%A9%E7%94%A8) Darüber hinaus verfügt SwitchBot über github für die BLE-Kommunikation auf dem PC. Dieser Code wird jedoch nur von Pyblues unterstützt Es kann nicht so verwendet werden, wie es ist.
Aus diesem Artikel Da gesagt wurde, dass ein Modul namens Bleak für die BLE-Kommunikation in der Windows-Umgebung verwendet werden kann, werde ich es verwenden. Führen Sie den folgenden Befehl pip aus.
pip install bleak
Führen Sie das Programm aus, um auf Ihrem PC nach Bluetooth-Geräten in der Nähe zu suchen, während Sie auf das offizielle Dokument verweisen.
Discover.py
import asyncio
from bleak import discover
async def run():
devices = await discover()
for d in devices:
#Zeigen Sie die Mac-Adresse, den Namen und die Entfernung des gefundenen Geräts an
print(d.address,d.name,d.rssi)
print(d)
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
Wenn SwitchBot hier gefunden wird, wird die MAC-Adresse von SwitchBot angezeigt. Kopieren Sie sie daher. Wenn Sie es nicht finden können, laden Sie den Bluetooth-Treiber von hier herunter und überprüfen Sie, ob der SwitchBot korrekt erkannt wird. Da die Möglichkeit eines anfänglichen Ausfalls von SwitchBot besteht, wird empfohlen, den Verbindungstest über die von der Android / iOS-App bereitgestellte SwitchBot-App durchzuführen. Die detaillierte Methode ist in der dem Switchbot beiliegenden Kurzanleitung beschrieben.
Wenn die MAC-Adresse abgerufen werden kann, stellen Sie über BLE-Kommunikation eine Verbindung zu SwitchBot her → Senden Sie einen Befehl. Das folgende Programm ist ein Beispiel für die erstellte Verbindung und Übertragung.
Bleak_Connect_SwitchBot.py
import asyncio
from bleak import discover
async def run():
import asyncio
from bleak import BleakClient
import time
#Switchbot Mac-Adresse.[Discover.py]Müssen in herausfinden
address = " "
#Switchbot-UUID.Aus dem Github von SwitchBot ausgegraben
UUID = "cba20002-224d-11e6-9fb8-0002a5d5c51b"
async def run(address, loop):
async with BleakClient(address, loop=loop) as client:
#Pause, um Synchronisationsfehler zu vermeiden.
time.sleep(5)
#Verbindungstest unten.[Connected: False]Wird angezeigt, ist die Verbindung fehlgeschlagen.
x = await client.is_connected()
print("Connected: {0}".format(x))
#Überprüfen Sie den aktuellen Status des Switchbots
y = await client.read_gatt_char(UUID)
print(y)
print("Die Verbindung war erfolgreich. Bitte geben Sie den Befehl ein.\n Befehl → drücken,on,off,exit")
while True:
#Eingaben empfangen. Ändern Sie den Befehl, der für jeden Befehl gesendet werden soll. beenden, wenn beenden
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]Wenn Sie eingeben, endet es in 1 Sekunde
await asyncio.sleep(1.0, loop=loop)
break
else:
print("Bitte geben Sie den Befehl ein.\n Befehl → drücken,on,off,exit")
continue
#Senden Sie Anweisungen an switchbot
await client.write_gatt_char(UUID, write_byte)
#Überprüfen Sie den aktuellen Status des Switchbots
y = await client.read_gatt_char(UUID)
print(y)
#Pause wegen Synchronisationsfehler
time.sleep(2)
#Starten Sie die Kommunikation mit dem Switchbot düster
loop = asyncio.get_event_loop()
loop.run_until_complete(run(address, loop))
Dieses Programm wartet auf die Eingabe von Standard-E / A, wenn die Verbindung erfolgreich ist. Sie können den folgenden Befehl eingeben:
Schalten Sie das Anweisungsbyte entsprechend der Operation um, die Sie ausführen möchten, und senden Sie die Anweisung per client.write_gatt_char (UUID, write_byte) an Switchbot. Wenn der SwitchBot ordnungsgemäß funktioniert, sind Sie erfolgreich.
Ich habe erklärt, wie SwitchBot für die BLE-Kommunikation (Python) unter Windows verwendet wird. Der in diesem Artikel erläuterte Inhalt kann nur verbunden und gesendet werden, und ich weiß immer noch nicht, wie ich den Modus von SwtichBot wechseln soll, da ich nicht studiert habe. Wenn ich in Zukunft einen Weg finde, den Modus vom offiziellen Dokument oder Github zu wechseln, möchte ich ihn hinzufügen und in einem anderen Artikel beschreiben.
[]( Der Github, der den Code zusammenfasst, ist hier (nur der Code in diesem Artikel ist verfügbar) ) Postscript (2020/09/11): Die SwitchBot-API verwendet BlueZ und kann daher unter Windows nicht verwendet werden. https://github.com/RoButton/switchbotpy
Recommended Posts