Es necesario introducir que un sistema de estas características básicamente tiene dos tipos de objetos:
- Sensores: toman medidas del mundo exterior (temperatura, activaciones de pulsadores o interruptores, humedad, ...).
- Actuadores: realizan acciones sobre cosas del mundo exterior (contactores, telerruptores, accionadores de persianas, controladores de motores, ...)
Bueno, habíamos comentado que queríamos varias cosas:
- Gestionar la plataforma
- Englobar diferentes tipos de conexión
- Englobar diferentes tipos de actuadores y diferentes tipos de sensores
- Acceder de forma remota
En este sentido, lo que haremos es intentar aislar las capas más bajas de los protocolos de comunicación de las más altas. Esto es, que desde las funcionalidades que demos a los sensores, quede encapsulado (no tengamos que preocuparnos) si se conectan por buses SPI o I2C o incluso directamente. En este sentido he dividido los objetos en dos, uno que describe su funcionalidad, y otro que describe como se conecta, uno será un ObjetoConectado, que tendrá como atributo o campo una Conexión.
A continuación se puede ver el cómo la clase Conexion se especializa en diferentes tipos de conexión:
Acudiendo a la parte inferior de las herencias, vemos los diferentes tipos de conexion que implementaremos. Según vamos bajando, se ve cómo se especializan las clases:
- Digital: es una conexión física a un pin digital.
- Digital_ext: es una conexión física a un pin digital, pero que además tiene otro pin asociado que permite activaciones directas.
- Analógica: es una conexión física a un pin analógico, meramente será utilizada por sensores analógicos.
- DHT: es una coenxión que implementa lecturas de los sensores DHT-11 y DHT-12. Es específica para estos.
- USB: conexión serie.
- Bluetooth: conexión serie pero a una placa HC-06 que implementa de forma quasi transparente la comunicación inhalambrica.
- WLAN: conexión serie pero a una placa ESP8266, que implementará las comunicaciones 802.11.
- CONEX_I2C: implementa las comunicaciones serie a través de 2 pines configurables. En el caso de la Mega, vienen ya dos pines a tal efecto.
- CONEX_SPI: igual pero para el bus SPI, en este caso solo configuraremos los pines comunes del bus, cuando demos de alta algún objeto conectado, habrá que proporcionar el SS respectivo. A priori lo utilizaremos para la placa controladora de la microSD, pero se podría conectar un display i2c o cualquier otro elemento con dirección distinta.
- CONEX_ONEWIRE: implementa el protocolo 1-wire. Nos vendrá muy bien para algunos sensores de Dallas, por ejemplo.
- ETHERNET: comunicaciones 802.3.
Conviene comentar la clase ObjetoGeneral, que es la clase de la que heredarán todas las demás clases de la plataforma. Esta clase nos va a dar algunas funciones pseudoadminsitrativas para la gestión, impresión y demás de los obejtos que luego creemos en el sistema. Con eso conseguimos una reutilización de código (esto es puro C++) y el encapsulado del mismo. Podéis ver la clase definida a la derecha.
No hay comentarios:
Publicar un comentario