Notas de desarrollo del sistema Tongxin UOS (8): Compile y cree el entorno básico mqtt en Tongxin UOS (la versión usa QMQTT::Client)

Si el artículo es un artículo original, indique la fuente del artículo original al reproducirlo.
La dirección del blog de este artículo: https://hpzwl.blog.csdn.net/article/details/131455493

Enciclopedia del blog de Red Fatty (Red Imitation): la colección de tecnología de desarrollo (incluida la tecnología práctica Qt, Raspberry Pi, 3D, OpenCV, OpenGL, ffmpeg, OSG, microcomputadora de un solo chip, combinación de software y hardware, etc.) actualizado... (haga clic en el portal)

Sistema doméstico Kirin, desarrollo relacionado con el sistema Tongxin UOS

Último artículo: " Notas de desarrollo del sistema Tongxin UOS (7): Use linuxdeployqt para lanzar programas qt en el sistema Tongxin UOS "
Siguiente artículo: Estén atentos...


prefacio

  Tongxin uos usa mqtt para el desarrollo, y mqtt necesita ser recompilado.Este artículo describe la compilación del código fuente de mqtt y la construcción del entorno en Tongxin uos20.


Aviso

  La versión de mqtt descargada aquí es diferente a otros artículos. Aquí se opera usando QMQTT::CLIENT. Aquí, el autor sabe que hay dos versiones de Qt: una es QMQTT::QMQTTCLIENT, y la otra es QTMQTT:CLIENT, correspondiente a diferentes clases y métodos, elija según sus necesidades)
  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí


blog relacionado

  " Notas de desarrollo de Mqtt: Construcción del servidor Mqtt "
  " Tecnología de desarrollo de Qt: Introducción a mqtt, compilación QtMqtt y construcción del entorno de desarrollo "
  " Notas de desarrollo de Mqtt: Introducción, compilación y uso del cliente C++ ActiveMQ en Windows "


Protocolo MQTT

Introducción

  MQTT (Message Queuing Telemetry Transport, Message Queuing Telemetry Transport Protocol), es un protocolo de comunicación "ligero" basado en el modelo de publicación/suscripción (publish/subscribe), que se basa en el protocolo TCP/IP, desarrollado por IBM en el año 1999 liberado. La mayor ventaja de MQTT es que puede proporcionar servicios de mensajes confiables y en tiempo real para dispositivos remotos conectados con muy poco código y ancho de banda limitado. Como protocolo de mensajería instantánea de baja sobrecarga y bajo ancho de banda, tiene una amplia gama de aplicaciones en Internet de las cosas, dispositivos pequeños y aplicaciones móviles.

Criterios de diseño

  • Simplificado, sin añadir funciones prescindibles;
  • Modo de publicación/suscripción (Pub/Sub) para facilitar la transferencia de mensajes entre sensores;
  • Permita a los usuarios crear temas dinámicamente, cero costos de operación y mantenimiento;
  • Minimice la cantidad de transmisión para mejorar la eficiencia de la transmisión;
  • Tenga en cuenta factores como el bajo ancho de banda, la alta latencia y las redes inestables;
  • Admite control de sesión continuo;
  • Comprenda que la potencia informática del cliente puede ser baja;
  • Proporcionar gestión de la calidad del servicio;
  • Suponiendo que los datos sean agnósticos, el tipo y el formato de los datos transmitidos no son necesarios para mantener la flexibilidad.

características

1) Utilice el modo de publicación/suscripción de mensajes para proporcionar aplicaciones de desacoplamiento y publicación de mensajes de uno a varios

  Esto es muy similar a XMPP, pero la redundancia de información de MQTT es mucho menor que la de XMPP, porque XMPP usa texto en formato XML para transferir datos.

2) Transmisión de mensajes para enmascarar el contenido de la carga útil

3) Proporcionar conexión de red mediante TCP/IP

  El MQTT principal se basa en la conexión TCP para el envío de datos, pero también hay una versión basada en UDP llamada MQTT-SN. Dado que estas dos versiones se basan en diferentes métodos de conexión, sus ventajas y desventajas son naturalmente diferentes.

4) Hay tres tipos de calidad del servicio de publicación de mensajes

  • "A lo sumo una vez", la publicación de mensajes depende completamente de la red TCP/IP subyacente. Puede ocurrir pérdida o duplicación de mensajes. Este nivel se puede utilizar en las siguientes situaciones, datos de sensores ambientales, no importa si se pierde un registro de lectura, porque habrá un segundo envío en un futuro próximo. Este método es principalmente para el envío de aplicaciones ordinarias.Si su dispositivo inteligente no está conectado a Internet cuando se envía el mensaje, el mensaje no se ha recibido en el pasado y no se recibirá cuando esté conectado a Internet. de nuevo.
  • "al menos una vez", asegura que el mensaje llegue, pero puede ocurrir la duplicación de mensajes.
  • "solo una vez", asegura que el mensaje llega una vez. Este nivel se puede utilizar en algunos sistemas de facturación con requisitos estrictos. En los sistemas de facturación, los mensajes duplicados o faltantes pueden generar resultados incorrectos. Este servicio de publicación de mensajes de la más alta calidad también se puede utilizar para enviar aplicaciones de mensajería instantánea, para garantizar que los usuarios reciban y solo reciban una vez.

5) Transmisión pequeña, sobrecarga baja

  (el encabezado de longitud fija es de 2 bytes), los intercambios de protocolos se minimizan para reducir el tráfico de red. Es muy adecuado para "en el campo de Internet de las cosas, la comunicación entre sensores y servidores, y la recopilación de información". La potencia informática y el ancho de banda de los dispositivos integrados son relativamente débiles, por lo que usar este protocolo para transmitir mensajes es perfecto.

6) Mecanismo de interrupción anormal del cliente.

  • Última voluntad: Es el mecanismo de última voluntad, que se utiliza para notificar a otros dispositivos bajo el mismo tema que el dispositivo que envió la última voluntad se ha desconectado.
  • Testamento: mecanismo de testamento, similar en función a la última voluntad.

Patrón de publicación/suscriptor

  MQTT es un protocolo de transporte de publicación/suscripción de mensajes basado en cliente-servidor. El protocolo MQTT es ligero, simple, abierto y fácil de implementar, características que lo hacen ampliamente aplicable. En muchos casos, incluidos entornos restringidos como la comunicación de máquina a máquina (M2M) y el Internet de las cosas (IoT). Se usa ampliamente en sensores que se comunican a través de enlaces satelitales, dispositivos médicos que ocasionalmente marcan, hogares inteligentes y algunos dispositivos miniaturizados.
  inserte la descripción de la imagen aquí

  De la figura, MQTT tiene tres funciones:

  • Broker agent : Mucha gente lo entiende como middleware, por supuesto que se puede considerar como tal. Él es un intermediario. Se utiliza para procesar la información y enviarla al suscriptor correspondiente.
  • Publicador : se utiliza para publicar información para el agente. Nota: un publicador también puede ser un suscriptor.
  • Suscriptor : Es el cliente utilizado para recibir información.

servidor MQTT

  El servidor MQTT se denomina "intermediario de mensajes" (Broker), que puede ser una aplicación o un dispositivo. Se encuentra entre los publicadores de mensajes y los suscriptores, puede:

  • aceptar conexiones de red de los clientes;
  • Aceptar la información de la aplicación publicada por los clientes;
  • Manejar las solicitudes de suscripción y cancelación de suscripción de los clientes;
  • Reenvía los mensajes de la aplicación a los clientes suscritos.

Métodos en el protocolo MQTT

  Algunos métodos (también llamados acciones) se definen en el protocolo MQTT para representar operaciones en ciertos recursos. Este recurso puede representar datos preexistentes o datos generados dinámicamente, según la implementación del servidor. Por lo general, un recurso se refiere a un archivo o salida en un servidor. Los métodos principales son:

  • Conectar : ​​Esperando para establecer una conexión con el servidor
  • Desconectar : ​​espere a que el cliente MQTT complete el trabajo y desconecte la sesión TCP/IP del servidor
  • Suscribirse : espere a que se complete la suscripción
  • Cancelar suscripción : esperar a que el servidor cancele la suscripción de temas y múltiples en vivo del cliente
  • Publicar : el cliente MQTT envía una solicitud de mensaje y vuelve al hilo de la aplicación después de enviar

Versión del sistema Tongxin UOS

  versión del sistema:
  inserte la descripción de la imagen aquí


Qt compila Mqtt (sistema uos)

  Qt comenzó a admitir mqtt en las versiones 5 y 10, pero no está integrado en el paquete de instalación, por lo que debe descargarlo y compilarlo usted mismo. (Qt5.9.3 también se puede usar para ejecutar mqtt)
  La biblioteca qtmqtt proporcionada por Qt no admite el modo de cola (punto a punto) y solo admite el modo de suscripción/editor.

Paso 1: descargue mqtt, cópielo y descomprímalo en el sistema de destino (este paso se elimina)

  Dirección de descarga: https://codereview.qt-project.org/admin/repos/qt%2Fqtmqtt
  , dirección general de CSDN: https://download.csdn.net/download/qq21497936/11211403
  Instrucciones:

git clone "https://codereview.qt-project.org/qt/qtmqtt"

   inserte la descripción de la imagen aquí

  (PD: la hora actual es el 16 de junio de 2023. En este momento, el qtmqtt descargado se actualizó para usar CMakeList para configurar y compilar la versión. La versión qtmqtt de otros bloggers del blogger es la versión .pro)
  inserte la descripción de la imagen aquí

  Marque " Into the Pit 1 " aquí, somos la versión qt5, por lo que la descarga de git es inútil, ahora cambie a la descarga del código fuente de qt para descargar la versión correspondiente del módulo mqtt.

Paso 2: código fuente qt para descargar el código fuente del módulo mqtt, descomprimirlo en el sistema de destino

  Aquí, debido a que desea descargar la versión correspondiente de qtmqtt, debe elegir la versión.
  No es bueno, github encontró una versión: https://github.com/emqx/qmqtt
  inserte la descripción de la imagen aquí

  Esto es compatible tanto con pro como con cmake, descárguelo, suéltelo y descomprímalo:
  inserte la descripción de la imagen aquí

Paso 3: use QtQCreator para abrir la compilación del proyecto profesional

  inserte la descripción de la imagen aquí

  Ajustado al lanzamiento, este error es consistente con el error compilado aquí en otras versiones de nuestro blog, así que descargué uno nuevo y probé mal, que resultó ser el mismo.
  inserte la descripción de la imagen aquí

  Después de borrar, cree la biblioteca mqtt por separado, lo mismo es cierto:
  inserte la descripción de la imagen aquí

  Después de la investigación, se encuentra que el problema es que el archivo Qt5Mqtt no se crea. Al crear manualmente el archivo Qt5Mqtt en la ruta .../qtmqtt/src/mqtt/.pch, se resuelve.
  inserte la descripción de la imagen aquí

  Entonces, tiene éxito fácilmente:
  inserte la descripción de la imagen aquí

  Luego, la depuración también se compila para la modularización.


Implementar el módulo mqtt en qt

  Aquí hay tres formas, la primera es sustituir directamente el código fuente en el proyecto, la segunda es implementarlo directamente en el directorio de instalación de qt en forma de módulo, y la tercera es agregar directamente bibliotecas y archivos de encabezado para uso, usamos Agregar el primer método al directorio de instalación de la biblioteca de instalación de Qt. En cuanto al segundo método, puede consultar " Tecnología de desarrollo Qt: Introducción a mqtt, compilación QtMqtt y construcción del entorno de desarrollo ".
  Se puede compilar en una biblioteca antes, por lo que el código se puede integrar directamente en el código fuente:

Paso 1: Cree un nuevo proyecto mqttClientDemo

  inserte la descripción de la imagen aquí

Paso 2: extraiga el módulo mqtt en el código fuente e intégrelo en

  Extraiga uno de los códigos fuente qtmqtt, agréguelo como un módulo de código ordinario a los módulos del nuevo proyecto e importe su archivo qmqtt.pri:
  inserte la descripción de la imagen aquí

Paso 3: Compilar y reportar errores, agregar módulos de red

  El error de compilación informó que no se pudo encontrar QHostAddress, faltaba el módulo de red y se agregó el módulo de red

QT += network

  En el .pri del código fuente extraído agregue:
  inserte la descripción de la imagen aquí

  Luego compila.

Paso 4: Compile e informe de un error, no se puede encontrar la definición de la función

  inserte la descripción de la imagen aquí

  Verifique " Entrando al Pit 2 ", porque antes era una biblioteca, usando PRIVATE_HEADERS, ahora es una integración de código fuente, y se reemplaza por HEADERS, como se muestra a continuación:
  inserte la descripción de la imagen aquí

  Deje que el archivo de encabezado salga:
  inserte la descripción de la imagen aquí

  Continuar compilando.

Paso 5: Compilar y aprobar

  inserte la descripción de la imagen aquí

  El código fuente se integra en la compilación y se pasa, por lo que no es necesario volver a compilar la adición posterior del módulo mqtt para cambiar el sistema o la versión, lo que es más adecuado para el autor.

Paso 6: optimizar el módulo de implementación

  Cree un nuevo módulo de administración mqttClientManager (use una clase de administración vacía para ocupar el lugar primero) y use este módulo para contener el código fuente de mqtt.
  inserte la descripción de la imagen aquí


Despliegue modular

  inserte la descripción de la imagen aquí


plantilla de proyecto

  inserte la descripción de la imagen aquí


en el hoyo

Entrada 1: descargar la última versión no es compatible con qt5, pero es compatible con qt6

pregunta

  La última versión de Git no admite qt5, pero admite qt6
  inserte la descripción de la imagen aquí

razón

  Q6 se cambia a cmake para compilar, qt5 es qmake, el autor es qt5

resolver

  Esta versión de mqtt se da por vencida, buscando la última versión de mqtt que admita qt5.

Entrada 2: no se puede encontrar el archivo de encabezado mqtt

pregunta

  El código fuente está incluido, pero no puedo encontrarlo

razón

  Para cambiar una macro de archivo de encabezado privado a una macro de archivo de encabezado

resolver

  inserte la descripción de la imagen aquí

Pozo 3: la versión anterior intentó integrarse en la compilación qt5.12.8 y falló

problema y causa

  inserte la descripción de la imagen aquí

resolver

  No es necesario resolverlo, indica un problema, descargue la versión correspondiente


Último artículo: " Notas de desarrollo del sistema Tongxin UOS (7): Use linuxdeployqt para lanzar programas qt en el sistema Tongxin UOS "
Siguiente artículo: Estén atentos...


Si el artículo es un artículo original, indique la fuente del artículo original al reproducirlo.
La dirección del blog de este artículo: https://hpzwl.blog.csdn.net/article/details/131455493

Supongo que te gusta

Origin blog.csdn.net/qq21497936/article/details/131455493
Recomendado
Clasificación