Versuchen Sie, den toio core cube unter Windows 10 / macOS / Linux mit der düsteren Python-Bibliothek auszuführen

Ich möchte den toio core cube auf einem Computer ausführen, der mir nahe steht

Der Toio Core Cube ist ein "sehr süßer" Zweiradroboter, der durch BLE-Kommunikation gesteuert werden kann. https://toio.github.io/toio-spec/

Neulich schrieb ich Eine Geschichte über die Verwendung eines Smartphones zum direkten Verschieben des Toio-Core-Cubes mithilfe der BLE-Kommunikation, aber diesmal verwendete ich einen PC. Bewegen wir den Toio-Kernwürfel.

Die offizielle Umgebung für Javascript und visuelle Programmierung wird bereitgestellt.

Dieser Artikel verwendet jedoch Python. Visual Programming Environment wurde nur für macOS (Stand: 10. Dezember 2019) und ~~ Windows10 64bit oder veröffentlicht Benötigt macOS 10.13 oder höher. JavaScript-Bibliothek erfordert auch die Installation von node.js und noble. Der Zweck dieses Artikels besteht darin, den Toio-Core-Cube mithilfe eines PCs oder Raspberry Pi, den Sie verwenden können, schnell zu verschieben. Daher werde ich die Verwendung von Python vorstellen, das relativ einfach zu installieren ist.

Da der Beispielcode von düster Asyncio verwendet, ist die entsprechende Python-Version außerdem Python 3.5 oder höher.

Was ist trostlos?

Eine Bibliothek für die BLE-Kommunikation Python, die unter Windows 10 / Linux / macOS ausgeführt wird.

Es gibt verschiedene Python-Bibliotheken für die BLE-Kommunikation, aber ich habe Bleak als eine ausgewählt, die (fast) auf drei Arten von Betriebssystemen ausgeführt werden kann: Windows 10, Linux (Raspbian, Ubuntu) und MacOS.

Andere BLE-Kommunikationspythonbibliotheken

Wenn es ein wenig direkt BLE ist, ist es besser, die Bibliothek für den Toio-Core-Cube zu verwenden, der von großen Vorfahren erstellt wurde. Überprüfen Sie die Betriebsanforderungen für jedes Betriebssystem.

Wie trostlos funktioniert

Bleak wird implementiert, indem die BLE-Kommunikations-API jedes Betriebssystems eingeschlossen wird.

Da es in einer Form zu einer Python-Bibliothek gemacht wird, die den BLE-Kommunikationsteil jedes Betriebssystems verbirgt, ist es möglich, die BLE-Kommunikation mit (fast) demselben Python-Skript auf jedem Betriebssystem durchzuführen.

Lass es uns trotzdem tun

Installieren Sie Python unter Windows 10 und MacOS

Linux enthält Python (normalerweise) von Anfang an, Windows 10 jedoch nicht. Sie müssen es daher installieren. Außerdem enthält macOS python2.7, python3 ist jedoch nicht enthalten, sodass Sie es ebenfalls installieren müssen. Die folgenden Artikel sind hilfreich.

In der folgenden Erläuterung lautet die Eingabeaufforderung "$", es wird jedoch davon ausgegangen, dass die Eingabeaufforderung für Windows 10-, MacOS- und Linux-Umgebungen gilt. Der Vorgang selbst ist in jeder Umgebung gleich.

Installieren Sie düster

$ pip install bleak

Nach einer Weile wird die düstere Bibliothek installiert und verfügbar sein.

Ermitteln Sie die BLE-Geräteadresse des toio core cube

Dies ist düsterer Beispielcode remove.py ) Korrekt.

discover.py


import asyncio

from bleak import discover

async def run():
    devices = await discover()
    for d in devices:
        print(d)

loop = asyncio.get_event_loop()
loop.run_until_complete(run())

Wenn Sie dies verschieben, lautet die Ausgabe wie folgt.

$ python3 discover.py
D0:8B:7F:12:34:56: toio Core Cube
B0:52:22:33:44:5A: Unknown
6E:E4:DA:12:34:55: bluetooth deviceY
63:87:F5:55:22:33: bluetooth deviceX

Die Geräteadresse ist eine 6-Byte-Hexadezimalzahl, in der sich toio Core Cube befindet. Notieren Sie sich diesen Wert. Sie werden diesen Wert in einem späteren Skript festlegen. Im obigen Ausführungsbeispiel "D0: 8B: 7F: 12: 34: 56". Für macOS ist es eine lange UUID-Zeichenfolge wie 243E23AE-4A99-406C-B317-18F1BD7B4CBE anstelle einer 6-Byte-Hexadezimalzahl.

Lesen Sie den verbleibenden Batteriestand des Toio Core-Würfels ab, schalten Sie die LED ein und schalten Sie den Motor ein

Um den verbleibenden Batteriestand des Toio-Kernwürfels abzulesen, schließen Sie ihn an den Oio-Kernwürfel an und lesen Sie dann die Batteriecharakteristik (Batterieinformationen) (10B20108-5B3B-4571-9508-CF3EFCD7BBAE). Um die LED einzuschalten, schreiben Sie in die Kennlinie (10B20103-5B3B-4571-9508-CF3EFCD7BBAE) der Lichtsteuerung. Um den Motor zu bewegen, schreiben Sie den Wert in die Kennlinie des Motors (Motorsteuerung) (10B20102-5B3B-4571-9508-CF3EFCD7BBAE).

Schreiben wir den Wert, der sich auf das Beispiel "Lampe" und "Motor" der Kommunikationsspezifikation der technischen Spezifikation des Toio Core Cube bezieht.

read_write_sample.py


import asyncio
import platform

from bleak import BleakClient

#Charakteristik von Batterie, LED und Motor
BATTERY_CHARACTERISTIC_UUID = ("10b20108-5b3b-4571-9508-cf3efcd7bbae")
LAMP_CHARACTERISTIC_UUID = ("10b20103-5b3b-4571-9508-cf3efcd7bbae")
MOTOR_CHARACTERISTIC_UUID = ("10b20102-5b3b-4571-9508-cf3efcd7bbae")  
#In trostlosem Zustand scheint die charakteristische UUID in Kleinbuchstaben geschrieben zu sein.

async def run(address, loop):
    async with BleakClient(address, loop=loop) as client:
        x = await client.is_connected()
        #logger.info("Connected: {0}".format(x))
        print("Connected: {0}".format(x))
        #Batteriestandsanzeige
        battery = await client.read_gatt_char(BATTERY_CHARACTERISTIC_UUID)
        print("battery: {0}".format(int(battery[0])))
        #LED leuchtet 160 Millisekunden lang rot
        write_value = bytearray(b'\x03\x10\x01\x01\xff\x00\x00')
        await client.write_gatt_char(LAMP_CHARACTERISTIC_UUID, write_value)
        #Motor 100 Geschwindigkeiten vorne links, 20 Geschwindigkeiten hinten rechts
        write_value = bytearray(b'\x01\x01\x01\x64\x02\x02\x14')
        await client.write_gatt_char(MOTOR_CHARACTERISTIC_UUID, write_value)
        #Endet nach 5 Sekunden
        await asyncio.sleep(5.0, loop=loop)

if __name__ == "__main__":
    address = (
        # discovery.Stellen Sie hier die Geräteadresse des von py gefundenen toio Core Cube ein
        "D0:8B:7F:12:34:56"  #Geben Sie für Windows oder Linux eine hexadezimale 6-Byte-Geräteadresse an.
        if platform.system() != "Darwin"
        else "243E23AE-4A99-406C-B317-18F1BD7B4CBE"  #UUID an macOS für macOS angehängt
    )
    loop = asyncio.get_event_loop()
    loop.run_until_complete(run(address, loop))
$ python read_write_sample.py
Connected: True
battery: 100

Wenn Sie es bewegen, wird der verbleibende Batteriestand gelesen und angezeigt, und dann leuchtet die LED für einen Moment rot. P_20191209_221300.jpg Drehen Sie dann im Uhrzeigersinn um die leicht rechte Seite des Toio-Kernwürfels. P_20191209_221458.jpg Es endet in 5 Sekunden.

Benachrichtigen Sie den Tastenstatus des Toio-Core-Cubes und die vom Lesesensor gelesene ID

Um den Tastenstatus des Toio-Core-Cubes und die Lese-ID des Lesesensors, die Tasteninformationscharakteristik (10B20107-5B3B-4571-9508-CF3EFCD7BBAE) und den Lesesensor (ID-Informationen) zu benachrichtigen. Über das Merkmal informiert werden (10B20101-5B3B-4571-9508-CF3EFCD7BBAE).

Informationen hierzu finden Sie unter düsterer Beispielcode enable_notifications.py und schreiben Sie das folgende Skript.

enable_button_and_id_info_notification.py


import asyncio
import platform

from bleak import BleakClient

#Tasten- und Lesesensoreigenschaften
BUTTON_CHARACTERISTIC_UUID = ("10b20107-5b3b-4571-9508-cf3efcd7bbae") 
ID_READER_CHARACTERISTIC_UUID = ("10b20101-5b3b-4571-9508-cf3efcd7bbae") 
#In trostlosem Zustand scheint die charakteristische UUID in Kleinbuchstaben geschrieben zu sein.

#Benachrichtigungshandler für den Schaltflächenstatus
def button_notification_handler(sender, data):
    print("BUTTON {0}: {1}".format(sender, data))

#Lesen Sie den Sensor-Benachrichtigungs-Handler
def id_reader_notification_handler(sender, data):
    print("toio ID {0}: {1}".format(sender, data))

async def run(address, loop):
    async with BleakClient(address, loop=loop) as client:
        x = await client.is_connected()
        print("Connected: {0}".format(x))
        #Schaltfläche Status Benachrichtigung starten
        await client.start_notify(BUTTON_CHARACTERISTIC_UUID, button_notification_handler)
        #Start der Sensorbenachrichtigung lesen
        await client.start_notify(ID_READER_CHARACTERISTIC_UUID, id_reader_notification_handler)
        #Endet in 10 Sekunden
        await asyncio.sleep(10.0, loop=loop)
        #Tastenstatus, Lesen der Sensorbenachrichtigung beendet
        await client.stop_notify(BUTTON_CHARACTERISTIC_UUID)
        await client.stop_notify(ID_READER_CHARACTERISTIC_UUID)

if __name__ == "__main__":
    address = (
        # discovery.Stellen Sie hier die Geräteadresse des von py gefundenen toio Core Cube ein
        "D0:8B:7F:12:34:56"  #Geben Sie für Windows oder Linux eine hexadezimale 6-Byte-Geräteadresse an.
        if platform.system() != "Darwin"
        else "243E23AE-4A99-406C-B317-18F1BD7B4CBE"  #UUID an macOS für macOS angehängt
    )
    loop = asyncio.get_event_loop()
    loop.run_until_complete(run(address, loop))

Heben Sie nach dem Verschieben den Toio-Kernwürfel an und drücken Sie einen Knopf oder legen Sie ihn auf eine Matte oder einen Aufkleber in der Toio-Sammlung.

$ python enable_button_and_id_info_notification.py
Connected: True
toio ID 10b20101-5b3b-4571-9508-cf3efcd7bbae: bytearray(b'\x01\xa4\x01g\x01|\x00\xaf\x01e\x01|\x00')
toio ID 10b20101-5b3b-4571-9508-cf3efcd7bbae: bytearray(b'\x01\xa4\x01h\x01|\x00\xaf\x01f\x01|\x00')
toio ID 10b20101-5b3b-4571-9508-cf3efcd7bbae: bytearray(b'\x01\xa4\x01g\x01|\x00\xaf\x01e\x01|\x00')

Sie können sehen, dass der Wert, der sich jedes Mal ändert, benachrichtigt wird.

Tatsächlich ...

Nur Windows 10 (1909) und Linux (Raspbian Buster, RasPi 3B und 4B wurden bestätigt) funktionieren tatsächlich. Es tut mir Leid. Ich konnte unter macOS in meiner Umgebung nicht trostlos laufen. Discovery.py funktioniert, aber alles andere funktioniert überhaupt nicht. (Die Umgebung ist MacBook Pro 13 Zoll (Anfang 2015) macOS 10.14.6 (Mojave)) In dieser macOS-Umgebung funktioniert es mit Adafruits BLE-Bibliothek, die behauptet, Linux / macOS zu unterstützen, im Gegenteil, dies ist der Raspbian Buster. Es hat nicht funktioniert. (Verursacht durch den Unterschied in der Version von bluez) Es scheint, dass es funktionieren wird, wenn das Backend von bluez geändert wird, aber ich kann die Ursache nicht herausfinden.

schließlich

Computerclub in der Grundschule oder Realschule? Ich habe vorgestellt, wie man den Toio-Core-Cube mit Python auf einem vertrauten PC oder Raspberry Pi bewegt, in dem er sich zu befinden scheint. Ich denke, dass sogar ein PC ohne integrierte Bluetooth-Schnittstelle, wie z. B. ein Notebook-PC, durch Anschließen einer Bluetooth-Schnittstelle vom Typ USB-Dongle bedient werden kann. Für diejenigen, die ein wenig große Hürden bei der Installation von node.js, noble und Scratch-Link haben, und sogar in einer Umgebung, in der Windows 10 verwendet werden kann, die installierbaren Apps jedoch auf das Speichern von Apps beschränkt sind, kann die Store-App python3 installiert und düster sein Sie können es verwenden, probieren Sie es also aus.

Recommended Posts

Versuchen Sie, den toio core cube unter Windows 10 / macOS / Linux mit der düsteren Python-Bibliothek auszuführen
Setzen Sie Cabocha 0.68 in Windows ein und versuchen Sie, die Abhängigkeit mit Python zu analysieren
Versuchen Sie, Python mit Try Jupyter auszuführen
Führen Sie SwitchBot mit Bleak unter Windows 10 aus
Erste Schritte mit Python 3.8 unter Windows
Setzen Sie die MeCab-Bindung für Python unter Windows, Mac und Linux mit pip ein
Die Geschichte des Ausführens der asp.net Core 3.1-App auf der arm64-Version von Amazon Linux 2
Führen Sie das Servo mit Python unter ESP32 (Windows) aus.
[C] [Python] Lesen mit AquesTalk unter Linux
Laden Sie mit Python Dateien im Web herunter
Versuchen Sie HTML-Scraping mit der Python-Bibliothek
PIL mit Python 3.x unter macOS installieren
Anzeige von Positionsinformationsdaten in Python - Versuchen Sie, mit der Kartenanzeigebibliothek (Folium) zu zeichnen -
Versuchen Sie, die 4-Kern-CPU des Raspberry Pi 2 mit Parallel Python zu verbrauchen
Versuchen Sie, Google Chrome mit Python und Selenium auszuführen
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
Probieren Sie CI den Push-Python-Code auf GitHub aus.
Verwalten Sie AWS mit der Python-Bibliothek Boto
Versuchen Sie, mit Mongo in Python auf dem Mac zu arbeiten
Einführung in Python mit Atom (unterwegs)
Installieren Sie Python 3 unter MacOS Catalina (nur mit Homebrew)
Versuchen Sie, die DropBox Core-API mit Python zu verwenden
Python unter Windows
Versuchen Sie, das Programmier-Herausforderungsbuch mit Python3 zu lösen
Das Problem, dass Windows Python in pipenv auf WSL aufgerufen wird
Versuchen Sie, mit Python zu übersetzen, während Sie das PDF-Layout beibehalten
Versuchen Sie, das Problem der Zuweisung von Schulungsärzten mit Python zu lösen
Installieren Sie Selenium auf Ihrem Mac und probieren Sie es mit Python aus
Versuchen Sie, Python auf Raspberry Pi mit Visual Studio zu debuggen.
Ich habe versucht, Soma Cube mit Python zu lösen
Yum-Befehl zum Zugriff auf MySQL mit Python 3 unter Linux
Installieren Sie die Python-Bibliothek eines Drittanbieters auf Cinema4D
Machen Sie mit Python einen Haltepunkt auf der c-Ebene
Informationen zur Steuerung von Motoren mit Python auf RaspberryPi
PIL in Python unter Windows8 (für Google App Engine)
Informationen zur Option --enable-shared beim Erstellen von Python unter Linux
[Anfänger] Python installieren und Programme ausführen (Windows)
Grundlagen zum Ausführen von NoxPlayer in Python
Bis Sie die Kaggle-API mit Colab verwenden
Traps beim Ausführen von ausführbaren Python Windows-Dateien
Python unter Windows
Python Windows-Umgebung
Python-Installation (Windows)
Versuchen Sie, den toio core cube unter Windows 10 / macOS / Linux mit der düsteren Python-Bibliothek auszuführen
Berühren Sie den neuesten physikbasierten Renderer Mitsuba2 (2) Move from Python
Ich habe versucht, die App auf der IoT-Plattform "Rimotte" auszuführen.
Der Prozess der Installation von Atom und der Ausführung von Python