ESP32 MQTT两次发布相同的消息,而不是两条不同的消息到不同主题
我正在尝试通过MQTT从ESP32发送数据到我的计算机。我有两组不同的数据集,该数据是两个主题,即温度和重力。由于某种原因,它只会发布一条消息,但将其发送给经纪人两次,并首先发布任何消息。我不确定我会做些什么。
Arduino代码:
int parseTilt(String DevData) {
String DevUUID, DevColour, DevTempData, DevGravityData;
int colourInt;
float DevTemp, DevGravity;
// Determine the Colour
colourInt = DevData.substring(6, 7).toInt();
switch (colourInt) {
case 1:
DevColour = "Red";
break;
case 2:
DevColour = "Green";
break;
case 3:
DevColour = "Black";
break;
case 4:
DevColour = "Purple";
break;
case 5:
DevColour = "Orange";
break;
case 6:
DevColour = "Blue";
break;
case 7:
DevColour = "Yellow";
break;
case 8:
DevColour = "Pink";
break;
}
if (repeatColour != 0 && repeatColour != colourInt) {
Serial.print(DevColour);
Serial.println(" Tilt is being ignored.");
return 0;
}
//Generate the UUID
DevUUID += DevData.substring(0, 8);
DevUUID += "-";
DevUUID += DevData.substring(8, 12);
DevUUID += "-";
DevUUID += DevData.substring(12, 16);
DevUUID += "-";
DevUUID += DevData.substring(16, 20);
DevUUID += "-";
DevUUID += DevData.substring(20, 32);
// Get the temperature
DevTempData = DevData.substring(32, 36);
DevTemp = strtol(DevTempData.c_str(), NULL, 16); // Temp in Freedumb units
// Get the gravity
DevGravityData = DevData.substring(36, 40);
DevGravity = strtol(DevGravityData.c_str() , NULL, 16);
Serial.println("--------------------------------");
Serial.print("Colour: ");
Serial.println(DevColour);
Serial.print("Temp: ");
if (Celsius) {
Serial.print((DevTemp-32.0) * (5.0/9.0));
Serial.println(" C");
}
else {
Serial.print(DevTemp);
Serial.println(" F");
}
Serial.print("Gravity: ");
float DevGravityFormatted = (DevGravity / 1000);
Serial.println(DevGravityFormatted);
Serial.println(DevGravityFormatted, 3);
Serial.println(DevGravityFormatted);
Serial.println(DevData);
Serial.println(DevData.substring(0,32));
Serial.println(DevUUID);
Serial.println("--------------------------------");
client.loop();
Serial.println(DevGravity, 16);
char tempGravity[16];
dtostrf(DevGravity, 16, 3, tempGravity);
char tempTemp[5];
dtostrf(DevTemp, 5, 2, tempTemp);
Serial.println("tempGravity");
Serial.println(tempGravity);
Serial.println("tempTemp");
Serial.println(tempTemp);
client.publish("fermentation/temperature", tempTemp);
client.loop();
delay(500);
client.publish("fermentation/gravity",tempGravity);
client.loop();
Serial.println("published");
return 2;
}
以及我的计算机上的Python代码:
MQTT_SERVER = "192.168.1.69"
MQTT_PATH_1 = ('fermentation/gravity')
MQTT_PATH_2 = ('fermentation/temperature')
def on_connect(client, userdata, flags, rc):
print('conncected, result: ' + str(rc))
client.subscribe(MQTT_PATH_1)
print('subscribed gravity')
client.subscribe(MQTT_PATH_2)
print('subscribed temperature')
def on_message(client, userdata, msg):
temp = str(msg.payload).split("'")
if msg.topic == MQTT_PATH_1:
print('mqtt 1')
print(msg.topic + ' ' + str(msg.payload))
if msg.topic == MQTT_PATH_2:
print('mqtt 2')
print(msg.topic + ' ' + str(msg.payload))
else:
print('else')
print(msg.topic + ' ' + str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(MQTT_SERVER, 1883, 60)
client.loop_forever()
输出出现: MQTT 2 发酵/温度B'75.00' MQTT 2 发酵/温度B'75.00'
不确定我在做什么错。请原谅Arduino代码,我是菜鸟。它是根据此代码进行的:
感谢您的帮助!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论