Aller au contenu

Utiliser pypixelcolor comme une bibliothèque Python

Utilisation de base

Vous pouvez également utiliser pypixelcolor comme une bibliothèque Python dans vos propres scripts.

import pypixelcolor

# Créer une instance de l'appareil PixelColor
device = pypixelcolor.Client("30:E1:AF:BD:5F:D0")

# Se connecter à l'appareil
device.connect()

# Envoyer un message texte à l'appareil
device.send_text("Bonjour depuis Python !", animation=1, speed=100)

# Se déconnecter de l'appareil
device.disconnect()

Appareils multiples

Vous pouvez vous connecter à plusieurs appareils en créant plusieurs instances de Client :

import pypixelcolor

devices = [
    pypixelcolor.Client("30:E1:AF:BD:5F:D0"), 
    pypixelcolor.Client("30:E1:AF:BD:20:A9")
]

for device in devices:
    device.connect()

for device in devices:
    device.send_text("Bonjour depuis Python !", animation=1, speed=100)

for device in devices:
    device.disconnect()

Utilisation asynchrone

Vous pouvez envoyer des commandes à plusieurs appareils iPixel Color simultanément en utilisant la programmation asynchrone avec la bibliothèque asyncio. Voici un exemple de la façon de procéder :

import asyncio
import pypixelcolor

async def main():
    addresses = [
        "30:E1:AF:BD:5F:D0",
        "30:E1:AF:BD:20:A9",
    ]

    # Créer des clients et se connecter séquentiellement (sûr pour les backends courants)
    devices = []
    for addr in addresses:
        client = pypixelcolor.AsyncClient(addr)
        await client.connect()
        devices.append(client)

    if not devices:
        return

    # Lancer les envois simultanément sur tous les appareils connectés
    tasks = [asyncio.create_task(d.send_image("./python.png")) for d in devices]
    await asyncio.gather(*tasks)

    # Tout déconnecter
    for d in devices:
        await d.disconnect()

if __name__ == "__main__":
    asyncio.run(main())

Précaution

Les opérations lourdes en données (comme l'envoi d'images) ne sont pas stables lorsqu'elles sont effectuées simultanément sur plusieurs appareils en raison des limitations potentielles du backend Bluetooth.