我遇到了一个问题。我需要检查我的MQTT主题是否等于一个确定的字符串。我需要这样做来做一个if/else结构,在那里我将停止我的mqtt服务或启动它,如果我想要的话。我会从我的移动的电话写主题,它被ESP 32接收得很好。
问题在于检查主题名称是否带有“ESP_control/...”
ESP_LOGI(TAG, "MQTT_EVENT_DATA");
printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);
printf("DATA=%.*s\r\n", event->data_len, event->data);
if(strncmp(event->topic, "ESP_control/run", strlen(event->topic)) == 0) {
if(strncmp(event->data, "STOP", strlen(event->topic)) == 0) {
ret = esp_mqtt_client_publish(client, "ESP_control", "MQTT SERVICE STOPPED", 0, 1, 0);
if(ret == -1) {
printf("ERROR sending 'MQTT SERVICE STOPPED' to topic 'ESP_control'\n");
}
ESP_LOGI(TAG, "MQTT SERVICE STOPPED");
esp_mqtt_client_stop(client);
}
else if (strncmp(event->data, "START", strlen(event->topic)) == 0) {
esp_mqtt_client_start(client);
ret = esp_mqtt_client_publish(client, "ESP_control", "MQTT SERVICE STARTED", 0, 1, 0);
if(ret == -1) {
printf("ERROR sending 'MQTT SERVICE STARTED' to topic 'ESP_control'\n");
}
ESP_LOGI(TAG, "MQTT SERVICE STARTED");
}
}
else if(strncmp(event->topic, "ESP_control/delay", strlen(event->topic)) == 0) {
GLOBAL_DELAY = atoi(event->data); // convert char* to float variable
if(GLOBAL_DELAY > MAX_DELAY) {
GLOBAL_DELAY = MAX_DELAY;
}
else if(GLOBAL_DELAY < MIN_DELAY) {
GLOBAL_DELAY = MIN_DELAY;
}
}
有人能帮帮我吗?
2条答案
按热度按时间gg0vcinb1#
我昨天找到了解决方案,基本上就是使用for循环写一个新的数组,用
client->event_len
作为条件。voj3qocg2#
另一种方法是使用sprintf()代替for()。