主题名称的 MacAddress - Arduino IDE MQTT

MacAddress for topic name - Arduino IDE MQTT

我想使用我系统的 mac 地址作为主题名称。

我想要这样的东西:project/00:1B:44:11:3A:B7/temperature/status

我这样试过:

#define TEMP_STATUS_TOPIC "project/" + WiFi.macAddress() + "temperature/status"   
#define TEMP_CONTROL_TOPIC "project/temperature/control"

但是我得到这个错误:

no matching function for call to 'MQTTClient::publish(StringSumHelper&, char [128], size_t&)'

如有任何提示,我们将不胜感激!

编辑:

我正在使用 mqtt.fx 客户端。

这里是我调用发布的地方:

sensors.requestTemperatures(); 
  float t = sensors.getTempCByIndex(0);
  bool static led_temp_status = HIGH;
  
  const int capacity = JSON_OBJECT_SIZE(3);
  StaticJsonDocument<capacity> poolsystem;
  
  if (t < destemp) {
    led_temp_status = LOW;
    digitalWrite(LED_EXTERNAL_TEMP, led_temp_status);
    const int capacity = JSON_OBJECT_SIZE(3);
StaticJsonDocument<capacity> poolsystem;

    poolsystem["temp"] = t;
    poolsystem["heatstatus"] = "on";
    char buffer[128];
    size_t n = serializeJson(poolsystem, buffer);
    Serial.print(F("JSON message: "));
    Serial.println(buffer);
    mqttClient.publish(TEMP_STATUS_TOPIC, buffer, n);   
  } else {
    led_temp_status = HIGH;
    digitalWrite(LED_EXTERNAL_TEMP, led_temp_status);

    poolsystem["temp"] = t;
    poolsystem["heatstatus"] = "off";
    char buffer[128];
    size_t n = serializeJson(poolsystem, buffer);
    Serial.print(F("JSON message: "));
    Serial.println(buffer);
    mqttClient.publish(TEMP_STATUS_TOPIC, buffer, n); 
  }

您正在使用 #define,但试图像它的变量一样进行字符串添加。请记住,#define 原语只是将您放在其后的代码替换为代码。该错误告诉您 publish() 没有具有 StringSumHelper& 参数的函数调用,这正是 #define 所放下的。

使用变量找出 MQTT 主题,然后在您的 publish() 调用中使用该变量。

首先,您不应该像另一个答案中指出的那样使用 #define

您可以将 TEMP_STATUS_TOPIC 声明为 const String:

const String TEMP_STATUS_TOPIC = "project/" + WiFi.macAddress() + "temperature/status";

MQTTClient::publish() 的问题是第一个参数需要一个 C 字符串 const char* 作为主题名称。将这些行替换为:

mqttClient.publish(TEMP_STATUS_TOPIC.c_str(), buffer, n);