Inicio Noticias Pi IoT en Python usando GPIO Zero - Dispositivos compuestos

Pi IoT en Python usando GPIO Zero – Dispositivos compuestos

Página 1 de 3

La mayoría de los dispositivos son complejos con más de una función. Para hacer frente a estos necesitamos construir dispositivos compuestos. En este extracto de un nuevo libro sobre el uso de GPIO Zero en Pi en Python, veamos cómo empezar.


Raspberry Pi IoT en Python usando GPIO Zero

Por Harry Fairhead y Mike James

Compra en Amazon.

Contenido

¿Por qué Pi para IoT? Primeros pasos con Python y GPIO Zero Introducción a GPIO Python – Habilitar/deshabilitar dispositivos simples para clases y objetos
Extracto 1: Dispositivos de encendido/apagado de pines y fábricas de pines Algunos dispositivos de entrada complejos de entrada electrónica simple
Extracto 1: Modulación de ancho de pulso de entrada compleja que controla motores y servos
Extracto 1: motores de CC que funcionan con dispositivos compuestos
Extracto 1: Dispositivos compuestos *** NUEVO !!! El bus SPI Dispositivos SPI personalizados Apéndice Visual Studio remoto Código de Python

Podría comenzar con una sola línea GPIO haciendo parpadear un LED, pero poco a poco irá avanzando hacia dispositivos más elaborados como un robot que consta de una serie de LED parpadeantes, motores, etc. Si lo que ha creado es un desarrollo en un dispositivo existente, puede crear una nueva clase personalizada usando la herencia y hemos visto ejemplos de esto en capítulos anteriores. Por ejemplo, cuando queríamos implementar una clase de bloqueo, la forma obvia era crear una nueva clase heredada de la clase LED existente. El motivo es que tanto el LED como la cerradura comparten un comportamiento básico de encendido/apagado, pero en el caso de la cerradura es mejor llamarlo “bloquear/desbloquear”.

Compare esto con el problema de crear una clase personalizada para controlar tres o más LED separados. En este caso no es necesario heredar el comportamiento de un solo LED, se requieren múltiples instancias de la clase LED. En este caso lo que se necesita es composición, es decir, la combinación de clases, en lugar de herencia. GPIO Zero tiene una clase que puede usar para crear dispositivos compuestos, y este capítulo examina cómo funciona con suficiente detalle para crear los suyos propios.

Dispositivos que contienen dispositivos

La clase CompositeDevice debe heredarse de las clases personalizadas para que sea más fácil incluir instancias de otras clases, pero primero tiene sentido ver cómo hacer el trabajo sin ayuda.

Si estaba implementando un dispositivo compuesto desde cero, lo lógico es crear una tupla, una lista o un diccionario de las instancias que necesita. Por ejemplo, si desea crear una clase TriLED personalizada, puede escribir algo como esto en el constructor:

self.LEDs = (LED (pin1), LED (pin2), LED (pin3))

Después de esto, debe escribir los métodos que se requieren usando la tupla para acceder a los LED.

Por ejemplo, es posible que desee un método AllOn y AllOff:

from gpiozero import LED from time import sleep class TriLED (): def __init __ (self, pin1 = Ninguno, pin2 = Ninguno, pin3 = Ninguno): self.LEDs = (LED (pin1), LED (pin2), LED (pin3 ) ) def AllOn (auto): auto.LED[0].on () auto.LED[1].on () auto.LED[2].on () def AllOff (self): self.LEDs[0].apagado () auto.LED[1].apagado () auto.LED[2].desgastado()

Un programa para usar la nueva clase sería algo como:

leds = TriLED (4,17,27) while True: leds.AllOn () dormir (0.001) leds.AllOff () dormir (0.001)

Por supuesto, en una aplicación TriLED real puede tener métodos para configurar los patrones: rotar a la izquierda, rotar a la derecha, etc., pero la idea general es la misma.

La clase CompositeDevice

La clase CompositeDevice está diseñada para ayudar con este patrón general de usar una tupla de dispositivo. Agregue dispositivos en el constructor y puede agregarlos como miembros sin nombre de una tupla o como atributos con nombre. La diferencia es que los atributos con nombre facilitan el acceso a subdispositivos del mundo exterior. Si especifica un dispositivo como parámetro posicional, se agrega a una tupla. Si especifica un dispositivo como parámetro con nombre, se agregan atributos con el mismo nombre. El único pequeño misterio es ¿cómo se accede a la tupla del dispositivo? La respuesta es que la propia clase CompositeDevice se comporta como una tupla y puede acceder a su contenido de la forma habitual. Él no recibe esto por herencia. En cambio, reemplaza el método mágico __getitem__ que se llama cuando se usa la indexación.

Por ejemplo:

compdev = Dispositivo compuesto (LED (pin1), LED (pin2)) compdev[1].sobre()

el led del pin2 se enciende.

Los parámetros nombrados son más fáciles de entender:

compdev = CompositeDevice (led1 = LED (pin1), led2 = LED (pin2)) compdev.led2.on ()

Debe usar el primer enfoque para los dispositivos que se usan internamente y el segundo si desea permitir el acceso externo a los dispositivos de componentes.

Por supuesto, si está creando una clase personalizada para algunos dispositivos, una mejor idea es heredar de CompositeDevice que instanciarlo para que su clase personalizada herede el mismo comportamiento.

Marc Gomez
Vine a por tabaco y ya me quedé aquí. Cuando no estoy en el sótano de Tecnopasion suelo pasear por las calles de Barcelona.
RELATED ARTICLES