C++ MQTT客户端

news/2024/11/24 11:33:14/

下面是一个简单的ROS节点的C++ MQTT客户端的示例,包括.h和.cpp文件。

很抱歉,我之前提供的代码中似乎有一些错误。下面是更新后的代码,修复了mqtt命名空间中disconnect_response的问题:

mqtt_client.h

#ifndef MQTT_CLIENT_H
#define MQTT_CLIENT_H#include <ros/ros.h>
#include <mqtt/async_client.h>class MqttClient
{
public:/*** @brief Constructor for MqttClient class.* @param serverURI The URI of the MQTT broker.* @param clientId The client ID to be used for connecting to the broker.* @param topic The MQTT topic to publish messages to.*/MqttClient(const std::string& serverURI, const std::string& clientId, const std::string& topic);/*** @brief Destructor for MqttClient class.*/~MqttClient();/*** @brief Connects to the MQTT broker.*/void connect();/*** @brief Disconnects from the MQTT broker.*/void disconnect();/*** @brief Publishes a message to the MQTT broker.* @param payload The payload of the message to be published.*/void publish(const std::string& payload);private:/*** @brief Callback function called when the MQTT client is connected to the broker.* @param responseCode The connect response code.*/void onConnect(int responseCode);/*** @brief Callback function called when the MQTT client is disconnected from the broker.* @param responseCode The disconnect response code.*/void onDisconnect(int responseCode);/*** @brief Callback function called when a message is published to the broker.* @param token The publish token.*/void onPublish(mqtt::delivery_token_ptr token);std::string serverURI_;      // URI of the MQTT brokerstd::string clientId_;       // Client ID for connecting to the brokerstd::string topic_;          // MQTT topic to publish messages tomqtt::async_client client_;  // MQTT clientmqtt::connect_options connOpts_;  // Connection options
};#endif // MQTT_CLIENT_H

mqtt_client.cpp

#include "mqtt_client.h"MqttClient::MqttClient(const std::string& serverURI, const std::string& clientId, const std::string& topic): serverURI_(serverURI), clientId_(clientId), topic_(topic), client_(serverURI, clientId)
{connOpts_.set_keep_alive_interval(20);connOpts_.set_clean_session(true);
}MqttClient::~MqttClient()
{disconnect();
}void MqttClient::connect()
{try{mqtt::token_ptr conntok = client_.connect(connOpts_);conntok->wait();ROS_INFO("Connected to MQTT broker");}catch (const mqtt::exception& exc){ROS_ERROR("Failed to connect to MQTT broker: %s", exc.what());}
}void MqttClient::disconnect()
{try{mqtt::token_ptr disconntok = client_.disconnect();disconntok->wait();ROS_INFO("Disconnected from MQTT broker");}catch (const mqtt::exception& exc){ROS_ERROR("Failed to disconnect from MQTT broker: %s", exc.what());}
}void MqttClient::publish(const std::string& payload)
{try{mqtt::message_ptr pubmsg = mqtt::make_message(topic_, payload);pubmsg->set_qos(1);client_.publish(pubmsg)->wait();ROS_INFO("Published message: %s", payload.c_str());}catch (const mqtt::exception& exc){ROS_ERROR("Failed to publish message: %s", exc.what());}
}void MqttClient::onConnect(int responseCode)
{ROS_INFO("Connected to MQTT broker");
}void MqttClient::onDisconnect(int responseCode)
{ROS_INFO("Disconnected from MQTT broker");
}void MqttClient::onPublish(mqtt::delivery_token_ptr token)
{ROS_INFO("Published message");
}

请注意,此示例使用了Paho MQTT C++库,因此您需要在CMakeLists.txt中添加正确的依赖项。

希望这可以帮助您开始使用ROS节点的C++ MQTT客户端。


http://www.ppmy.cn/news/1001413.html

相关文章

VR虚拟仿真技术在道路桥梁中有哪些具体应用?

虚拟现实(VR)是一种新兴的技术&#xff0c;可以为桥梁工程提供许多应用场景。以下是一些可能的应用场景&#xff1a; 1.桥梁设计和模拟 VR元宇宙可以用于桥梁的设计和模拟。工程师可以使用VR技术来创建桥梁的三维模型&#xff0c;并对其进行测试和优化。这可以帮助工程师更好地…

排查管家婆财务试算不平衡

总账的财务期初试算不平衡&#xff0c;就会导致不能成功开账。当分销A\V系列总账版本软件中出现试算不平衡的情况&#xff0c;应该如何排查&#xff1f;请按照下面的排查步骤操作吧。 PART.01 期初建账-账务期初&#xff0c;币种选择【综合本位币】&#xff0c;点下面的【试算…

微信小程序使用editor富文本编辑器 以及回显 全屏弹窗的模式

<!--富文本接收的位置--><view class"white-box"><view class"title"><view class"yellow-fence"></view><view class"v1">教研记录</view></view><view class"add-btn"…

测试工程师与研发工程师之间的差别

目录 为什么要讨论二者的差别? 测试工程师的分类 测试工程师与研发工程师之间的差别

Linux C 获取主机网卡名及 IP 的几种方法

在进行 Linux 网络编程时&#xff0c;经常会需要获取本机 IP 地址&#xff0c;除了常规的读取配置文件外&#xff0c;本文罗列几种个人所知的编程常用方法&#xff0c;仅供参考&#xff0c;如有错误请指出。 方法一&#xff1a;使用 ioctl() 获取本地 IP 地址 Linux 下可以使用…

【Spring Boot】请求参数传json数组,后端采用(pojo)新增案例(103)

请求参数传json数组&#xff0c;后端采用&#xff08;pojo&#xff09;接收的前提条件&#xff1a; 1.pom.xml文件加入坐标依赖&#xff1a;jackson-databind 2.Spring Boot 的启动类加注解&#xff1a;EnableWebMvc 3.Spring Boot 的Controller接受参数采用&#xff1a;Reque…

django使用ztree实现树状结构效果,子节点实现动态加载(l懒加载)

一、实现的效果 由于最近项目中需要实现树状结构的效果,考虑到ztree这个组件大家用的比较多,因此打算在django项目中集成ztree来实现树状的效果。最终实现的示例效果如下: 点击父节点,如果有子节点,则从后台动态请求数据,然后显示出子节点的数据。 二、实现思路 …

JVM面试突击班2

JVM面试突击班2 对象被判定为不可达对象之后就“死”了吗 对象的生命周期 创建阶段 &#xff08;1&#xff09;为对象分配存储空间 &#xff08;2&#xff09;开始构造对象 &#xff08;3&#xff09;从超类到子类对static成员进行初始化 &#xff08;4&#xff09;超类成…