- 15 May 2025
- Imprimir
- DF
Activación con MQTT y Node-Red
- Actualizado el 15 May 2025
- Imprimir
- DF
Esta guía te explicará cómo configurar y usar la comunicación MQTT para activar la OV20i usando Node-RED. Al finalizar, podrás activar remotamente la captura y el procesamiento de imágenes mediante mensajes MQTT.
Vista General
MQTT (Message Queuing Telemetry Transport) es un protocolo de mensajería ligero, ideal para dispositivos IoT. Usar MQTT con la OV20i permite activar la cámara de forma remota y comunicarte con otros sistemas en tu red. Este enfoque es especialmente útil en entornos de producción donde necesitas integrar la cámara con otros sistemas automatizados.
Requisitos Previos
Antes de comenzar, es necesario tener lo siguiente:
- Cámara OV20i conectada a tu red
- Node-RED instalado y configurado
- Un broker MQTT configurado (puede configurarse dentro de Node-RED)
- Conocimiento básico sobre flujos en Node-RED
- Cámara configurada con una receta funcional
- El disparo de la cámara debe estar configurado como Disparo manual en la configuración de imagen
Si aún no has configurado la comunicación MQTT, consulta primero la guía de Configuración de Comunicación MQTT.
Configuración del Flujo para MQTT
* Configurar la conexión con el Broker MQTT
- Abre tu editor de Node-RED en el navegador
- Arrastra un nodo mqtt-in desde la librería a tu espacio de trabajo
- Haz doble clic en el nodo para abrir sus propiedades
- Haz clic en el ícono del lápiz junto al campo Server para agregar un nuevo broker
- Configura el broker con los siguientes datos:
- Nombre: Broker MQTT Cámara
- Servidor: Dirección IP de tu broker (ejemplo: 192.168.1.100) o localhost
- Puerto: 1883 (puerto por defecto de MQTT)
- Client ID: Puedes dejarlo vacío para que se genere automáticamente
- Haz clic en Add para guardar la configuración del broker
* Configurar el Flujo
Para que la solicitud MQTT funcione, se deben enviar objetos de mensaje a distintos topics. En este flujo, se deben enviar 2 mensajes. El primero pone la cámara en modo HMI y el segundo solicita el disparo de la cámara
Configurar el nodo Inject
- Haz doble clic en el nodo [Inject]
- [msg.payload]: puede dejarse como timestamp, ya que funcionará como punto de inicio o pulso para activar la cámara
- Guardar
Configurar el primer nodo Change
- Haz doble clic en el nodo change
- Configura estas dos reglas:
- Haz clic en "Agregar" → SET → msg.topic con el valor: stream_mode/set
- Haz clic en "Agregar" nuevamente → SET → msg.payload con el valor: HMI_MODE
- Guardar
Configurar el segundo nodo Change
- Haz doble clic en el nodo [Change]
- Configura estas dos reglas:
- Haz clic en "Agregar" → SET → msg.topic con el valor: hmi/?/capture_mode
- Haz clic en "Agregar" nuevamente → SET → msg.payload con el valor: single
- Guardar
El número de receta único no es el mismo que el número de receta del PLC. El número de receta puede encontrarse en la parte superior de la URL de una receta activa. Cambiará según la receta y no habrá dos iguales.
- Conectar al nodo [Mqtt-in] que ya configuraste
Pruebas y Verificación
Para verificar que la configuración funcione correctamente:
- Haz clic en el botón del nodo inject para activar la solicitud MQTT
- Revisa el panel debug
- Verifica que la cámara haya tomado una fotografía. Una forma sencilla de confirmarlo es si aparece un nuevo mensaje en el debug del nodo AllBlocksOutput
Ejemplo Completo del Flujo
Como referencia, aquí tienes el flujo completo en formato JSON que puedes importar directamente en Node-RED:
[
{
"id": "80474d6fc128742d",
"type": "mqtt out",
"z": "6e6e08c3c76c7987",
"name": "",
"topic": "",
"qos": "0",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "5628611a59df452b",
"x": 850,
"y": 860,
"wires": []
},
{
"id": "51e487a95039d080",
"type": "change",
"z": "6e6e08c3c76c7987",
"name": "Set Payload 1",
"rules": [
{
"p": "topic",
"t": "set",
"pt": "msg",
"to": "stream_mode/set",
"tot": "str"
},
{
"p": "payload",
"t": "set",
"pt": "msg",
"to": "HMI_MODE",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 680,
"y": 860,
"wires": [
[
"80474d6fc128742d"
]
]
},
{
"id": "a6d5a4132ed1f39d",
"type": "change",
"z": "6e6e08c3c76c7987",
"name": "Set Payload 2",
"rules": [
{
"p": "topic",
"t": "set",
"pt": "msg",
"to": "hmi/10/capture_mode",
"tot": "str"
},
{
"p": "payload",
"t": "set",
"pt": "msg",
"to": "single",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 680,
"y": 900,
"wires": [
[
"80474d6fc128742d"
]
]
},
{
"id": "25f5166b2886fcc7",
"type": "delay",
"z": "6e6e08c3c76c7987",
"name": "",
"pauseType": "delay",
"timeout": "10",
"timeoutUnits": "milliseconds",
"rate": "1",
"nbRateUnits": "1",
"rateUnits": "second",
"randomFirst": "1",
"randomLast": "5",
"randomUnits": "seconds",
"drop": false,
"allowrate": false,
"outputs": 1,
"x": 510,
"y": 900,
"wires": [
[
"a6d5a4132ed1f39d"
]
]
},
{
"id": "1435d7b97a321f86",
"type": "inject",
"z": "6e6e08c3c76c7987",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 320,
"y": 860,
"wires": [
[
"25f5166b2886fcc7",
"51e487a95039d080"
]
]
},
{
"id": "5628611a59df452b",
"type": "mqtt-broker",
"name": "",
"broker": "localhost",
"port": "1883",
"clientid": "",
"autoConnect": true,
"usetls": false,
"protocolVersion": "4",
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthRetain": "false",
"birthPayload": "",
"birthMsg": {},
"closeTopic": "",
"closeQos": "0",
"closeRetain": "false",
"closePayload": "",
"closeMsg": {},
"willTopic": "",
"willQos": "0",
"willRetain": "false",
"willPayload": "",
"willMsg": {},
"userProps": "",
"sessionExpiry": ""
}
]