如何在python中使用Mosquitto发布和订阅图像文件?

时间:2016-05-24 17:53:16

标签: python raspberry-pi publish-subscribe file-transfer mqtt

我是一名学习MQTT的学生。

我一直在尝试使用mosquitto在Raspberry Pi中发送图像文件。

这是一个pub.py

    import paho.mqtt.client as mqtt

    def on_public(mosq, userdata, mid):
        mosq.disconnect()

    client = mqtt.Client()
    client.connect("test.mosquitto.org", 1883, 60)
    f=open("1.jpg", "rb")
    fileContent = f.read()
    byteArr = bytes(fileContent)
    client.publish("image",byteArr,0)
    client.loop(5)

这是一个sub.py

    import paho.mqtt.client as mqtt

    def on_public(client, userdata, rc):
        print("Connect with result code " + str(rc))
        client.subscribe(“image”)

    def on_public(client, userdata, msg):
        print("Topic : " , msg.topic + "\n Image : " + byteArr

    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    client.connect("test.mosquitto.org", 1883, 60)
    client.loop(20)

问题是我不知道如何订阅我已经发布的图像。

我认为逻辑是在我脑海中找到的,但它不起作用。

我尝试了很多方法,比如使用write()或类似的方式。

如果它只是一种基本的编码技巧,我很抱歉,但我使用MQTT,R-pi建立了一个系统。

请帮助我,我需要你的手。

1 个答案:

答案 0 :(得分:0)

在正常情况下,只有在订阅客户端已连接并在发布消息之前订阅之前,才会传递消息。 (关于如何获取订户断开时发布的消息,搜索持久订阅)

您的订阅者应用应该类似于:

import paho.mqtt.client as mqtt

def on_connect(client, userdata, rc):
    print("Connect with result code " + str(rc))
    client.subscribe(“image”)

def on_message(client, userdata, msg):
    print("Topic : " , msg.topic + "\n Image : " + msg.payload

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("test.mosquitto.org", 1883, 60)
client.loop_forever()

client.loop_forever()是保持用户运行的重要位,而不是仅仅持续5秒。

这会将原始字节打印到控制台,这不会有用。要将图像写入文件,请尝试使用此类

def on_message(client, userdata, msg)
    f = open('/tmp/output.jpg', 'w')
    f.write(msg.payload)
    f.close()

这会将文件写入/tmp/output.jpg