Estructura del Proyecto y Organización de Archivos
La librería OpenTherm para Arduino presenta una arquitectura modular diseñada para facilitar la comunicación con calderas y termostatos compatibles. A continuación se detalla la organización jerárquica del código fuente:
arduino-opentherm/
├── examples/ # Casos de uso prácticos y demostraciones
├── library.properties # Metadatos del ecosistema Arduino
├── opentherm/ # Núcleo funcional de la librería
│ ├── src/ # Implementación (.cpp) y cabeceras (.h)
│ ├── tests/ # Scripts de validación y pruebas unitarias
│ └── examples/ # Plantillas de implementación básica
└── README.md # Documentación técnica general
- src/: Contiene la lógica central del protocolo, gestionando la temporización de los bits y la decodificación de tramas Manchester.
- examples/: Proporciona bocetos (sketches) listos para cargar que ilustran cómo solicitar la temperatura del agua o configurar el setpoint.
- library.properties/: Archivo fundamental para que el Gestor de Librerías de Arduino reconozca las dependencias y la versión del software.
Definición de Metadatos de la Librería
El archivo library.properties actúa como el manifiesto del proyecto. Define cómo se integra el código dentro del entorno de desarrollo. Un ejemplo de su configuración interna es el siguiente:
name=OpenTherm_Interface
version=1.1.0
author=OpenTherm Contributors
sentence=Librería para el protocolo de comunicación OpenTherm en sistemas embebidos.
paragraph=Permite la interacción bidireccional con sistemas de calefacción HVAC, facilitando la lectura de sensores y el control de actuadores.
category=Communication
url=https://github.com/ejemplo/arduino-opentherm
architectures=*
Este archivo asegura que el compilador identifique correctamente las rutas de inclusión y la compatibilidad con diferentes arquitecturas de microcontroladores (AVR, ESP32, SAMD, etc.).
Configuración de Parámetros de Hardware y Comunicación
La personalización de la librería se realiza principalmente a través de las definiciones en los archivos de cabecera. A diferencia de otros protocolos, OpenTherm depende críticamente de la precisión en los tiempos de respuesta. Para adaptar la librería a un diseño de hardware específico, se deben localizar y modificar las constantes de configuración en el código fuente.
Un ejemplo de redefinición de pines y parámetros de velocidad en el archivo Opentherm.h o directamente en el script principal sería:
// Ajustes de la interfaz física OpenTherm
#define OT_TX_PIN 11 // Pin de transmisión hacia el escudo (shield)
#define OT_RX_PIN 12 // Pin de recepción desde el bus
#define OT_SERIAL_DEBUG 9600 // Velocidad de la consola serie para diagnóstico
// Parámetros de temporización (en microsegundos)
const unsigned int OT_BIT_PERIOD = 1000; // Periodo nominal de bit
Al ajustar el OT_RX_PIN, es fundamental asegurarse de que el pin seleccionado en la placa Arduino soporte interrupciones externas, ya que la librería suele utilizar attachInterrupt() para captuarr los cambios de estado en el bus de datos en tiempo real sin bloquear la ejecución del programa principal.
Para implementar una comunicación básica, se instancia el objeto de control pasando los pines configurados como argumentos al constructor, permitiendo así múltiples interfaces OpenTherm si el hardware lo soporta.