Integración fluida de sensores Modbus usando EdgeX Foundry en Raspberry Pi
Integración fluida de sensores Modbus usando EdgeX Foundry en Raspberry Pi
Los despliegues de Internet Industrial de las Cosas (IIoT) dependen cada vez más de pasarelas de borde para conectar periféricos Modbus con analíticas en la nube. Construir una pasadera propietaria puede ser costoso y lento. Este caso de estudio demuestra cómo un marco de código abierto —EdgeX Foundry— puede desplegarse en una Raspberry Pi para conectar un sensor Modbus de temperatura-humedad, transmitir datos a la nube y activar actuaciones en tiempo real con mínimo esfuerzo.
Por qué Modbus y EdgeX
Modbus es un protocolo abierto y ligero que funciona sobre enlaces RS-485 económicos. Usa registros simples (enteros sin signo de 16 bits) para valores analógicos y bobinas para estados binarios, lo que lo hace ideal para dispositivos industriales. EdgeX Foundry, un middleware de borde de código abierto, actúa como puente entre sensores físicos y sistemas TI, proporcionando gestión de dispositivos, transformación de datos y conectividad cloud lista para usar.
Pila de hardware
- Raspberry Pi 4 (pasarela de borde)
- Sensor Modbus RTU: SHT20 (temperatura y humedad)
- Conversor RS-485 a USB
- LEDs para estado visual (GPIO-12 y GPIO-14)
- Fuente de alimentación USB
Figura 1:
Figura 1. EdgeX Foundry – middleware de borde de código abierto
Figura 2:
Figura 2. Diagrama de bloques de alto nivel del despliegue EdgeX
Integración paso a paso
- Configurar la Raspberry Pi
- Instalar Ubuntu 20.04 LTS con Docker y docker-compose.
- Clonar el repositorio EdgeX Foundry y lanzar la pila vía docker-compose.
- Simular el dispositivo Modbus
- Usar ModbusPal (GPL) para emular hasta 247 esclavos Modbus.
- Configurar un esclavo con registros de retención para temperatura (dirección 2) y humedad (dirección 3). Cada registro mapea a un entero de 16 bits que se escalará a °C y %HR.
- Iniciar ModbusPal sobre TCP o serial (USB-RS485) para verificar comunicación.
- Subir el perfil del dispositivo
Enviar una petición
POSTahttps://localhost:48081/api/v1/deviceprofile/uploadfilecon el archivo YAML que contiene el perfil (ver abajo). La respuesta devuelve un ID de perfil único. - Registrar el dispositivo
Enviar el siguiente JSON a
https://localhost:48081/api/v1/devicepara crear la entrada del sensor. La secciónprotocols.modbus-rtuapunta a/dev/ttyUSB0a 9600 baudios.{ "name": "TemperatureHumiditySensor", "description": "Industrial Grade Temperature & Humidity Transmitter SHT20", "adminState": "UNLOCKED", "operatingState": "ENABLED", "protocols": { "modbus-rtu": { "Address": "/dev/ttyUSB0", "BaudRate": "9600", "DataBits": "8", "StopBits": "1", "Parity": "N", "UnitID": "1" } }, "labels": ["TemperatureHumiditySensor","modbusRTU"], "service": {"name": "edgex-device-modbus"}, "profile": {"name": "TemperatureHumiditySensor"}, "autoEvents": [ {"frequency": "5s", "onChange": false, "resource": "TemperatureDegC"}, {"frequency": "5s", "onChange": false, "resource": "HumidityPercentRH"} ] } - Verificar flujo de datos
- El servicio de dispositivo de EdgeX extrae datos cada 5 s y escribe en el servicio central, que los almacena en Redis.
- Los servicios de aplicación reenvían los datos a IBM Cloud (o cualquier nube elegida).
- Entradas de log de ejemplo muestran los paquetes de petición/respuesta Modbus.
- Actuar LEDs con motor de reglas Kuiper
- Definir reglas: si temperatura > 30 °C encender LED rojo; si < 30 °C apagarlo; similar para LED azul a 28 °C.
- Kuiper envía comandos al core-command de EdgeX, que actualiza el servicio de dispositivo GPIO.
- Salidas GPIO verificadas vía
/sys/class/gpio/gpio12/valuey/sys/class/gpio/gpio14/value.
Fragmentos clave de configuración
Perfil de dispositivo (YAML)
name: TemperatureHumiditySensor manufacturer: ROBOKITS model: RKI-4879 labels: - SHT20 description: Industrial Grade Temperature & Humidity Transmitter SHT20 Sensor High Precision Monitoring Modbus RS485 deviceResources: - name: TemperatureDegC description: Room Temperature in Degrees Celsius. attributes: { primaryTable: INPUT_REGISTERS, startingAddress: 2, rawType: INT16 } properties: value: { type: Float32, readWrite: R, scale: 0.1, floatEncoding: eNotation } units: { type: String, readWrite: R, defaultValue: degrees celsius } - name: HumidityPercentRH description: Room Humidity in %RH. attributes: { primaryTable: INPUT_REGISTERS, startingAddress: 3, rawType: INT16 } properties: value: { type: Float32, readWrite: R, scale: 0.1, floatEncoding: eNotation } units: { type: String, readWrite: R, defaultValue: %RH } deviceCommands: - name: TemperatureDegC get: [{ index: 1, operation: get, deviceResource: TemperatureDegC }] - name: HumidityPercentRH get: [{ index: 2, operation: get, deviceResource: HumidityPercentRH }] coreCommands: - name: TemperatureDegC get: path: /api/v1/device/{deviceId}/TemperatureDegC responses: - code: 200 description: Get the temperature in degrees C expectedValues: [TemperatureDegC] - name: HumidityPercentRH get: path: /api/v1/device/{deviceId}/HumidityPercentRH responses: - code: 200 description: Get the humidity in %RH expectedValues: [HumidityPercentRH]
Configuración TOML device-modbus (extracto)
[DeviceList] Name = "TemperatureHumiditySensor" Profile = "TemperatureHumiditySensor" Description = "Industrial Grade Temperature & Humidity Transmitter SHT20" labels = ["TemperatureHumiditySensor","modbusRTU"] [DeviceList.Protocols.modbus-rtu] Address = "/dev/ttyUSB0" BaudRate = 9600 DataBits = 8 StopBits = 1 Parity = "N" UnitID = 1 [[DeviceList.AutoEvents]] Frequency = "5s" OnChange = false Resource = "TemperatureDegC" [[DeviceList.AutoEvents]] Frequency = "5s" OnChange = false Resource = "HumidityPercentRH"
Resultados
El flujo extremo a extremo muestra datos de temperatura y humedad en tiempo real llegando a IBM Cloud, activando cambios de estado de LED basados en reglas, y demostrando las capacidades completas de EdgeX en una Raspberry Pi de bajo coste.
Conclusión
EdgeX Foundry permite despliegue rápido de soluciones IIoT basadas en Modbus con sobrecarga mínima de desarrollo. Al abstraer gestión de dispositivos, almacenamiento de datos y conectividad cloud, libera a ingenieros para centrarse en lógica de dominio y analíticas.
Acrónimos
| Acrónimo | Expansión |
|---|---|
| AOF | Append Only File |
| API | Application Program Interface |
| AWS | Amazon Web Services |
| BACnet | Building Automation and Control Network |
| BLE | Bluetooth Low Energy |
| CURL | Client Uniform Resource Locator |
| GPIO | General Purpose Input Output |
| HTTP | Hypertext Transfer Protocol |
| IBM | International Business Machines |
| IIoT | Industrial Internet of Things |
| IoT | Internet of Things |
| IT | Information Technology |
| LED | Light Emitting Diode |
| LTS | Long Term Support |
| M2M | Man to Machine |
| MQTT | Message Queuing Telemetry Transport |
| RDB | Redis Database |
| Redis | REmote DIctionary Server |
| REST | Representational State Transfer |
| RS-485 | Recommended Standard – 485 |
| SCADA | Supervisory Control and Data Acquisition |
| SQL | Structured Query Language |
| TCP/IP | Transmission Control Protocol/Internet Protocol |
Tecnología de Internet de las cosas
- Domina la inferencia Edge AI: Guía práctica para insights accionables
- Guía para principiantes sobre terminología de código abierto
- Cisco Presenta Routers Industriales Catalyst 5G para Conectar Empresa y Edge sin Fisuras
- AT&T y Tech Mahindra lanzan Acumos: plataforma open-source de IA para despliegue rápido
- Elevando la excelencia en manufactura con Industria 4.0: El auge de Calidad 4.0
- Asegurar Software Open-Source en IoT: Mitigar Riesgos de Software
- Elevando la Industria 4.0: Aprovechando analítica en el edge para manufactura más inteligente y rápida
- IIC y OpenFog se fusionan para impulsar innovación en edge computing
- Open-Source vs. Herramientas IoT Vendor-Supported: Elegir el stack correcto para tu empresa
- Por Qué el Open Source Impulsa la Innovación en el Edge: eBook Esencial
- El Open Source Impulsa el Auge del IoT y Edge Computing