0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用MQTT进行数据传输

麦辣鸡腿堡 来源:古月居 作者:叶夏 2023-11-09 15:37 次阅读

ros里面,是有专门的工具帮忙做这一步的,但是ros2里面还没有,不过我看论坛上大家更加推荐使用代码的形式做数据传输。

我使用的是python的paho这个包,首先需要安装

pip install paho

我这里贴两个代码,分别是publisher和subscriber,也就是发布者和订阅者。

1. publisher

import time
import paho.mqtt.client as mqtt




class Publisher:
    def __init__(self, host="127.0.0.1", port=1883, topic="test_channel"):
        self.host = host
        self.port = port
        self.topic = topic
        self.client = mqtt.Client()


        self.client.on_connect = self.on_connect
        self.client.on_publish = self.on_publish


    def on_connect(self, client, userdata, flags, rc):
       print("Connected with result code "+str(rc))


    def on_publish(self, client, userdata, mid):
        print("Message Published ...")


    def start(self, msg="Hello MQTT", times=10, delay=1):
        self.client.connect(self.host, self.port, 60)
        self.client.loop_start()


        for i in range(times):
            time.sleep(delay)
            self.client.publish(self.topic, f"{msg} {i}")




if __name__ == "__main__":
    publisher = Publisher()
    publisher.start()

2. subscriber

import paho.mqtt.client as mqtt




class Subscriber:
    def __init__(self, host="127.0.0.1", port=1883, topic="test_channel"):
        self.host = host
        self.port = port
        self.topic = topic
        self.msg_count = 0
        self.client = mqtt.Client()


        self.client.on_connect = self.on_connect
        self.client.on_message = self.on_message


    def on_connect(self, client, userdata, flags, rc):
        print("Connected with result code "+str(rc))
        self.client.subscribe(self.topic)


    def on_message(self, client, userdata, msg):
        self.msg_count += 1
        print(f"Message {self.msg_count}: {msg.topic} {str(msg.payload)}")


    def start(self):
        self.client.connect(self.host, self.port, 60)
        self.client.loop_forever()




if __name__ == "__main__":
    subscriber = Subscriber()
    subscriber.start()

可以在跟mosquitto所在的同一台机器上运行上面两个脚本,否则就要修改代码中的host为mosquitto实际的IP地址,还要确保网络没有限制。

测试的时候,要先运行subscriber,然后再运行publisher,否则subscriber很可能接受不到数据。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据传输
    +关注

    关注

    9

    文章

    1884

    浏览量

    64578
  • python
    +关注

    关注

    56

    文章

    4795

    浏览量

    84663
  • MQTT
    +关注

    关注

    5

    文章

    650

    浏览量

    22500
收藏 人收藏

    评论

    相关推荐

    使用slavefifosync2bit与FPGA进行数据传输时,服务间隔是多少?

    您好,请问使用slavefifosync2bit与FPGA进行数据传输时,服务间隔是多少?
    发表于 07-03 06:21

    ADS1299与STM32f407通过SPI进行数据传输的时候,可以直接使用HAL库中的HAL_SPI_Receive函数进行数据传输吗?

    在与STM32f407通过SPI进行数据传输的时候,可以在使能SPI之后,直接使用HAL库中的HAL_SPI_Receive函数进行数据传输吗?还是需要判断DRDY,在DRDY置低之后再使用HAL_SPI_Receive函数?
    发表于 11-13 08:29

    怎么用LABVIEW和FPGA控制W5300进行数据传输

    用FPGA 控制W5300(采用的是TCP/IP协议)进行数据传输,上位机软件用LABVIEW做!怎么才能进行数据传输。W5300怎么与LABVIEW进行数据传输!!各位大仙能不能给指明方向!谢谢
    发表于 12-30 19:29

    求助各位大神,51单片机如何通过蓝牙与fpga进行数据传输

    求助各位大神,51单片机如何通过蓝牙与fpga进行数据传输
    发表于 03-27 15:29

    关于EDMA PingPong传输和并行传输,请问对于PingPong模式的数据传输,是否只是用一个channel进行数据传输

    的channel可看做是一个传输事件,用于触发一个EDMA通道进行数据传输。记得Andy在一个帖子中曾说过,“IPR寄存器是用来记录产生中断的EDMA channel源,从低到高每一个bit依次对应相应
    发表于 06-20 06:05

    用E90-DTU进行数据传输,怎么将数据传到后台转化

    用E90-DTU进行数据传输,怎么将数据传到后台转化
    发表于 04-02 16:28

    如何通过单一数据线进行数据传输

    如何通过单一数据线进行数据传输
    发表于 12-02 07:14

    如何通过SPI与单片机进行数据传输

    如何通过SPI与单片机进行数据传输
    发表于 02-17 06:32

    如何去实现串口开启DMA进行数据传输

    STM32CubeMX笔记-串口开启DMA进行数据传输
    发表于 02-21 07:25

    DMA进行数据传输和CPU进行数据传输的疑问

    求大佬解答,本人正在学习STM32单片机中DMA直接数据存储部分的内容 看了DMA简介后,也上手过实例代码,但是没有实际的项目经验,所以有以下疑问: DMA外设在进行数据传输的操作,是否也是需要经过
    发表于 05-25 17:18

    HT56R678使用I2C进行数据传输的方法

    HT56R678使用I2C进行数据传输的方法 HT56R678 内建有SIM 功能,其中包括了SPI 和I2C 两种通信接口,本文以HT56R678 为母体,介绍使用I2C 进行数据传输的方法和注意
    发表于 03-27 09:25 16次下载

    HT56R678使用I2C进行数据传输的方法

    HT56R678使用I2C进行数据传输的方法HT56R678 内建有SIM 功能,其中包括了SPI 和I2C 两种通信接口,本文以HT56R678 为母体,介绍使用I2C 进行数据传输的方法和注意事项。
    发表于 03-28 22:39 7次下载

    嵌入式GPRS数据传输终端设计

    利用嵌入式平台的硬件、软件威廉希尔官方网站 、开发了基于GPRS网络进行数据传输的嵌入式数据传输终端设备。通过设计一种应用层通信协议,很好地解决了在不可靠的无线传输链路上进行数据传输
    发表于 09-13 11:02 62次下载
    嵌入式GPRS<b class='flag-5'>数据传输</b>终端设计

    STM32CubeMX-串口开启DMA进行数据传输

    STM32CubeMX笔记-串口开启DMA进行数据传输
    发表于 12-27 18:40 7次下载
    STM32CubeMX-串口开启DMA<b class='flag-5'>进行数据传输</b>

    如何实现MQTT协议数据传输

    如何实现MQTT协议数据传输? 随着物联网威廉希尔官方网站 的不断发展,越来越多的设备和应用需要实现互联互通。而MQTT作为一种轻量级的发布/订阅消息传输协议,在物联网领域应用广泛,成为了许多设备之
    的头像 发表于 11-15 17:23 1131次阅读