主题名称的 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);
我想使用我系统的 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);