多个ESP8266订阅一个RPI 3
Multiple ESP8266 subscribe to one RPI 3
我无法将 2 个(及更多)ESP8266 订阅给一个 RPi3 代理。
我用过:
import paho.mqtt.client as mqtt
import datetime
mqtt_topics = ["esp8266-1", "esp8266-2"]
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
for topic in mqtt_topics:
client.subscribe(topic)
def on_message(client, userdata, msg):
print(datetime.datetime.now())
print(str(msg.topic)+" "+str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.connect('localhost', 1883, 60)
try:
for topic in mqtt_topics:
client.on_message = on_message
client.loop_forever()
except KeyboardInterrupt:
print("CTRL-C: Terminating program.")
它有效,但仅适用于 1 个 esp。
如果我连接 esp8266-1 它会检查它的值,然后我连接 esp8266-2 以获得它的值并且 esp8266-1 不再可用(即使我打开 esp8266-2)。
如何同时订阅esp8266?
我一次只能吃一个。
代码需要做一些改动:
import paho.mqtt.client as mqtt
import datetime
mqtt_topics = [("esp8266-1",0), ("esp8266-2",0)]
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe(mqtt_topics)
def on_message(client, userdata, msg):
print(datetime.datetime.now())
print(str(msg.topic)+" "+str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect('localhost', 1883, 60)
try:
client.loop_forever()
except KeyboardInterrupt:
print("CTRL-C: Terminating program.")
但是,如果一个客户端正常工作,而第二个强制第一个客户端断开连接,那么这听起来就像两个客户端的 clientID 相同。 clientIDs 需要对所有客户端都是唯一的。
我无法将 2 个(及更多)ESP8266 订阅给一个 RPi3 代理。 我用过:
import paho.mqtt.client as mqtt
import datetime
mqtt_topics = ["esp8266-1", "esp8266-2"]
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
for topic in mqtt_topics:
client.subscribe(topic)
def on_message(client, userdata, msg):
print(datetime.datetime.now())
print(str(msg.topic)+" "+str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.connect('localhost', 1883, 60)
try:
for topic in mqtt_topics:
client.on_message = on_message
client.loop_forever()
except KeyboardInterrupt:
print("CTRL-C: Terminating program.")
它有效,但仅适用于 1 个 esp。 如果我连接 esp8266-1 它会检查它的值,然后我连接 esp8266-2 以获得它的值并且 esp8266-1 不再可用(即使我打开 esp8266-2)。
如何同时订阅esp8266? 我一次只能吃一个。
代码需要做一些改动:
import paho.mqtt.client as mqtt
import datetime
mqtt_topics = [("esp8266-1",0), ("esp8266-2",0)]
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe(mqtt_topics)
def on_message(client, userdata, msg):
print(datetime.datetime.now())
print(str(msg.topic)+" "+str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect('localhost', 1883, 60)
try:
client.loop_forever()
except KeyboardInterrupt:
print("CTRL-C: Terminating program.")
但是,如果一个客户端正常工作,而第二个强制第一个客户端断开连接,那么这听起来就像两个客户端的 clientID 相同。 clientIDs 需要对所有客户端都是唯一的。