我是一名学习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建立了一个系统。
请帮助我,我需要你的手。
答案 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