Integração Transparente de Sensor Modbus Usando EdgeX Foundry no Raspberry Pi
Integração Transparente de Sensor Modbus Usando EdgeX Foundry no Raspberry Pi
Implantações de Industrial Internet of Things (IIoT) dependem cada vez mais de gateways de borda para conectar periféricos Modbus com análises em nuvem. Construir gateway proprietário pode ser caro e lento. Este case study demonstra como framework open-source – EdgeX Foundry – pode ser implantado em Raspberry Pi para conectar sensor Modbus de temperatura-umidade, transmitir dados para nuvem e acionar atuações em tempo real com esforço mínimo.
Por que Modbus e EdgeX?
Modbus é protocolo aberto e leve que roda sobre links RS-485 baratos. Usa registradores simples (inteiros sem sinal de 16 bits) para valores analógicos e coils para estados binários, tornando-o ideal para dispositivos industriais. EdgeX Foundry, middleware de borda open-source, atua como ponte entre sensores físicos e sistemas de TI, fornecendo gerenciamento de dispositivos, transformação de dados e conectividade com nuvem out of the box.
Stack de Hardware
- Raspberry Pi 4 (gateway de borda)
- Sensor Modbus RTU: SHT20 (temperatura & umidade)
- Conversor RS-485 para USB
- LEDs para status visual (GPIO-12 & GPIO-14)
- Fonte de alimentação USB
Figura 1:
Figura 1. EdgeX Foundry – middleware de borda open-source
Figura 2:
Figura 2. Diagrama de blocos de alto nível da implantação EdgeX
Integração Passo a Passo
- Configure o Raspberry Pi
- Instale Ubuntu 20.04 LTS com Docker e docker-compose.
- Clone o repositório EdgeX Foundry e inicie stack via docker-compose.
- Simule dispositivo Modbus
- Use ModbusPal (GPL) para emular até 247 slaves Modbus.
- Configure slave com holding registers para temperatura (endereço 2) e umidade (endereço 3). Cada register mapeia para inteiro de 16 bits que será escalado para °C e %UR.
- Inicie ModbusPal sobre TCP ou serial (USB-RS485) para verificar comunicação.
- Carregue perfil do dispositivo
Envie requisição
POSTparahttps://localhost:48081/api/v1/deviceprofile/uploadfilecom arquivo YAML contendo perfil (veja abaixo). Resposta retorna ID único do perfil. - Registre o dispositivo
Poste JSON seguinte para
https://localhost:48081/api/v1/devicepara criar entrada do sensor. Seçãoprotocols.modbus-rtuaponta para/dev/ttyUSB0a 9600 baud.{ "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"} ] } - Verifique fluxo de dados
- Serviço de dispositivo EdgeX puxa dados a cada 5 s e escreve no core service, que armazena no Redis.
- Serviços de aplicação encaminham dados para IBM Cloud (ou nuvem de escolha).
- Entradas de log mostram pacotes de request/response Modbus.
- Atue LEDs com motor de regras Kuiper
- Defina regras: se temperatura > 30 °C ligue LED vermelho; se < 30 °C desligue; similar para azul LED a 28 °C.
- Kuiper empurra comandos para EdgeX core-command, que então atualiza serviço de dispositivo GPIO.
- Saídas GPIO verificadas via
/sys/class/gpio/gpio12/valuee/sys/class/gpio/gpio14/value.
Snippets de Configuração-Chave
Perfil do 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] configuração TOML device-modbus (trecho)
[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
Fluxo ponta-a-ponta mostra dados de temperatura e umidade em tempo real chegando na IBM Cloud, acionando mudanças de status de LED baseadas em regras, demonstrando capacidades completas do EdgeX em Raspberry Pi de baixo custo.
Conclusão
EdgeX Foundry permite implantação rápida de soluções IIoT baseadas em Modbus com overhead mínimo de desenvolvimento. Ao abstrair gerenciamento de dispositivos, armazenamento de dados e conectividade com nuvem, liberta engenheiros para focar em lógica de domínio e análises.
Acrônimos
| Acronym | Expansion |
|---|---|
| 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 |
Tecnologia da Internet das Coisas
- Guia para Iniciantes: Terminologia de Open Source
- Cisco Revela Roteadores Industriais Catalyst 5G para Conectar Redes Corporativas e de Borda
- AT&T e Tech Mahindra Lançam Acumos: Plataforma Open-Source de IA para Implantação Rápida
- Elevando a Excelência na Manufatura com Indústria 4.0: A Ascensão da Qualidade 4.0
- Protegendo Software Open-Source na IoT: Mitigando Riscos de Software
- Elevando Indústria 4.0: Aproveitando Edge Analytics para Manufatura Mais Inteligente e Rápida
- IIC e OpenFog Fundem-se para Impulsionar Inovação em Edge Computing
- Ferramentas de Desenvolvimento IoT Open Source vs. Suportadas por Fornecedores: Escolhendo a Stack Certa para sua Empresa
- Por Que Código Aberto Impulsiona Inovação na Borda — eBook Essencial
- Open Source Impulsiona Ascensão de IoT e Edge Computing