mqtt-ros模拟发布一个自定义消息类型

mqtt-ros

#!/usr/bin/env python3
#coding = 'utf-8'

import rospy
import datetime
import time
from ros_mqtt_communication.msg import data

def velocity_publisher():
    # ROS节点初始化
    rospy.init_node('data_publisher', anonymous=True)

    # 创建一个Publisher,发布名为/data_info的topic,消息类型为learning_topic::data,队列长度10
    data_info_pub = rospy.Publisher('/data_info', data, queue_size=10)

    #设置循环的频率
    rate = rospy.Rate(1) 

    while not rospy.is_shutdown():
        # 初始化learning_topic::data类型的消息
        data_msg = data()
        data_msg.time= time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
        data_msg.location = 1;
        data_msg.cage  = 1;
        data_msg.broiler_state= 1;
        data_msg.number = 1;


        # 发布消息
        data_info_pub.publish(data_msg)
        rospy.loginfo("Publsh data message[%s]",
                data_msg)

        # 按照循环频率延时
        rate.sleep()

if __name__ == '__main__':
    try:
        velocity_publisher()
    except rospy.ROSInterruptException:
        pass

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用Netty-Mqtt-Client实现Mqtt发布消息和订阅消息的Java代码,附有注释说明: ```java import io.netty.handler.codec.mqtt.*; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; public class MqttClientHandler extends SimpleChannelInboundHandler<MqttMessage> { private Channel channel; @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { super.channelActive(ctx); channel = ctx.channel(); // 发送连接请求 MqttConnectMessage connectMessage = MqttMessageBuilders.connect() .clientId("mqtt-client") .cleanSession(true) .build(); channel.writeAndFlush(connectMessage); } @Override protected void channelRead0(ChannelHandlerContext ctx, MqttMessage msg) throws Exception { // 处理接收到的消息 switch (msg.fixedHeader().messageType()) { case CONNACK: // 连接成功后,订阅主题 MqttSubscribeMessage subscribeMessage = MqttMessageBuilders.subscribe() .addSubscription(MqttQoS.AT_LEAST_ONCE, "test/topic") .build(); channel.writeAndFlush(subscribeMessage); break; case SUBACK: // 订阅主题成功后,发送消息 MqttPublishMessage publishMessage = MqttMessageBuilders.publish() .topicName("test/topic") .qos(MqttQoS.AT_LEAST_ONCE) .payload(Unpooled.copiedBuffer("hello, mqtt".getBytes())) .build(); channel.writeAndFlush(publishMessage); break; case PUBLISH: // 处理接收到的消息 MqttPublishMessage publishMsg = (MqttPublishMessage) msg; System.out.println("Received message: " + publishMsg.payload().toString()); break; default: break; } } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { super.exceptionCaught(ctx, cause); cause.printStackTrace(); ctx.close(); } } ``` 这里的MqttClientHandler继承了Netty的SimpleChannelInboundHandler,用于处理接收到的Mqtt消息。在channelActive方法中,发送连接请求,包括设置客户端ID、清除会话等信息。在channelRead0方法中,根据接收到的消息类型进行处理,包括连接响应(CONNACK)、订阅主题(SUBACK)、接收消息(PUBLISH)等。其中,在连接响应(CONNACK)之后,发送订阅主题请求,订阅主题成功后,再发送消息到指定主题。在接收到消息(PUBLISH)时,打印消息内容。 关于注释,代码中已经加上了较为详细的注释,希望能够帮助您理解代码的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值