如何在 python 中使用 Mosquitto 发布和订阅图像文件?
How can I publish and subscribe a image file using Mosquitto in python?
我是一名学生,一直在研究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 制作了一个系统。
请帮助我,我需要你的帮助。
在正常情况下,只有订阅客户端已连接并在消息发布前订阅,消息才会被传递。 (有关如何获取订阅者断开连接时发布的消息,请搜索永久订阅)
您的订阅者应用应该类似于:
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
我是一名学生,一直在研究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 制作了一个系统。
请帮助我,我需要你的帮助。
在正常情况下,只有订阅客户端已连接并在消息发布前订阅,消息才会被传递。 (有关如何获取订阅者断开连接时发布的消息,请搜索永久订阅)
您的订阅者应用应该类似于:
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