EC200U MQTTX esp32

HI,

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include “driver/uart.h”
#include “esp_log.h”
#include “freertos/FreeRTOS.h”
#include “freertos/task.h”

#define TXD_PIN (4) // EC200U TX pin connected to ESP32 GPIO 4
#define RXD_PIN (5) // EC200U RX pin connected to ESP32 GPIO 5
#define UART_NUM UART_NUM_1

static const char *TAG = “EC200U”;

void uart_init(void) {
const uart_config_t uart_config = {
.baud_rate = 115200,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
};
uart_param_config(UART_NUM, &uart_config);
uart_set_pin(UART_NUM, TXD_PIN, RXD_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
uart_driver_install(UART_NUM, 1024 * 2, 0, 0, NULL, 0);
}

void uart_send_command(const char *cmd) {
uart_write_bytes(UART_NUM, cmd, strlen(cmd));
uart_write_bytes(UART_NUM, “\r\n”, 2);
ESP_LOGI(TAG, “Sent: %s”, cmd);
vTaskDelay(pdMS_TO_TICKS(1000));
}

void uart_read_response(char *response, int max_len, int timeout_ms) {
int len = 0, total_len = 0;
while (timeout_ms > 0) {
len = uart_read_bytes(UART_NUM, (uint8_t *)response + total_len, max_len - total_len, 20 / portTICK_PERIOD_MS);
if (len > 0) {
total_len += len;
}
timeout_ms -= 20;
if (total_len >= max_len - 1) {
break;
}
}
response[total_len] = ‘\0’;
ESP_LOGI(TAG, “Response: %s”, response);
}

bool wait_for_ok(int timeout_ms) {
char response[512];
while (timeout_ms > 0) {
uart_read_response(response, sizeof(response), 100);
if (strstr(response, “OK”) != NULL) {
return true;
}
timeout_ms -= 100;
}
return false;
}

bool wait_for_mqtt_response(const char *expected, int timeout_ms) {
char response[512];
while (timeout_ms > 0) {
uart_read_response(response, sizeof(response), 100);
if (strstr(response, expected) != NULL) {
return true;
}
timeout_ms -= 100;
}
return false;
}

void send_to_mqtt(float temperature, float humidity) {
char command[256], payload[128];

uart_send_command("AT");
if (!wait_for_ok(2000)) return;

uart_send_command("AT+CFUN=1");
if (!wait_for_ok(2000)) return;

uart_send_command("AT+CSQ");
if (!wait_for_ok(2000)) return;

uart_send_command("AT+CREG?");
if (!wait_for_ok(2000)) return;

uart_send_command("AT+QIDEACT=1");
if (!wait_for_ok(2000)) return;

uart_send_command("AT+CGATT=1");
if (!wait_for_ok(2000)) return;

uart_send_command("AT+QICSGP=1,1,\"jionet\",\"\",\"\",1");
if (!wait_for_ok(2000)) return;

uart_send_command("AT+QIACT=1");
if (!wait_for_ok(2000)) return;

uart_send_command("AT+QMTCFG=\"send/mode\",0,0");
if (!wait_for_ok(2000)) return;

uart_send_command("AT+QMTCFG=\"version\",0,4");
if (!wait_for_ok(2000)) return;

uart_send_command("AT+QMTCFG=\"pdpcid\",0,1");
if (!wait_for_ok(2000)) return;

uart_send_command("AT+QMTCFG=\"keepalive\",0,120");
if (!wait_for_ok(2000)) return;

uart_send_command("AT+QMTOPEN=0,\"broker.emqx.io\",1883");
if (!wait_for_mqtt_response("+QMTOPEN: 0,0", 10000)) {
    ESP_LOGE(TAG, "MQTT open failed, retrying...");
    vTaskDelay(pdMS_TO_TICKS(5000));
    return;
}

uart_send_command("AT+QMTCONN=0,\"mqttx_5ed4df46\"");
if (!wait_for_mqtt_response("+QMTCONN: 0,0", 5000)) {
    ESP_LOGE(TAG, "MQTT connection failed, retrying...");
    vTaskDelay(pdMS_TO_TICKS(5000));
    return;
}

uart_send_command("AT+QMTSUB=0,1,\"Sample\",0");
if (!wait_for_mqtt_response("+QMTSUB: 0,1,0,0", 5000)) {
    ESP_LOGE(TAG, "MQTT subscription failed!");
    return;
}

ESP_LOGI(TAG, "Successfully subscribed to topic: Sample");

snprintf(payload, sizeof(payload), "%.1f,%.1f", temperature, humidity);

snprintf(command, sizeof(command), "AT+QMTPUBEX=0,0,0,0,\"auto\",%d", (int)strlen(payload));
uart_send_command(command);

char response[512];
uart_read_response(response, sizeof(response), 2000);
if (strstr(response, ">") == NULL) {
    ESP_LOGE(TAG, "No `>` prompt received, retrying...");
    vTaskDelay(pdMS_TO_TICKS(5000));
    return;
}

uart_send_command(payload);
if (!wait_for_mqtt_response("+QMTPUBEX: 0,0,0", 5000)) {
    ESP_LOGE(TAG, "MQTT publish failed, retrying...");
    vTaskDelay(pdMS_TO_TICKS(5000));
    return;
}

uart_send_command("AT+QMTDISC=0");
if (!wait_for_mqtt_response("+QMTDISC: 0,0", 5000)) {
    ESP_LOGE(TAG, "MQTT disconnection failed!");
    return;
}

ESP_LOGI(TAG, "MQTT client disconnected successfully.");

}
This is my code for this I am getting output yesterday I updated log which you have seen
is the AT commands in my code is proper or need some changes can you please guide me.

thanks,
saravanan

void app_main(void) {
uart_init();
while (true) {
float temperature = 30.0;
float humidity = 66.0;
ESP_LOGI(TAG, “Sending data: Temperature=%.1f, Humidity=%.1f”, temperature, humidity);
send_to_mqtt(temperature, humidity);
vTaskDelay(pdMS_TO_TICKS(15000));
}
}