As you see below I removed Strings and made a simple program to test as you suggested but I still get same result, heap memory drops down...
#include <Arduino.h>
#include <WiFi.h>
#include <ESP.h>
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
const char* ssid = "RajaNet";
const char* password = "rxt123456";
const char* broker = "broker.hivemq.com";
const char* muser = "";
const char* mpass = "";
const char* mid = "esp32user2";
const int port =1883;
uint32_t heartbeat=0;
uint32_t heartbeat2=0;
unsigned long MqttreconnectTime,WifiPreviousMillis,MqttLoopTime;
bool reconnectMqtt() {
Serial.println("Attempting MQTT connection...");
Serial.print(muser);
Serial.print(" ");
Serial.print(mpass);
Serial.print(" ");
Serial.println(port);
if (client.connect(mid)) {
Serial.println("Connected to the Mqtt Broker");
// Subscribe
client.subscribe("esp32/command");
} else {
Serial.print("failed, rc=");
Serial.println(client.state());
return false;
}
return client.connected();
}
void initWifi() {
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
digitalWrite(Wifi_Out, HIGH);
}
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
}
void setup() {
Serial.begin(115200);
while (!Serial);
initWifi();
client.setServer(broker,1883);
client.setKeepAlive(60);
client.setCallback(callback);
reconnectMqtt();
delay(2000);
}
void check_heap_mem(){
value=ESP.getMinFreeHeap();
Serial.printf("Lowest level of free heap since boot: %d\n",value);
}
void loop() {
unsigned long currentMillis = millis();
// if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds
if ((WiFi.status() != WL_CONNECTED) && (currentMillis - WifiPreviousMillis >=10000)) {
Serial.print(millis());
Serial.println("Reconnecting to WiFi...");
WiFi.disconnect();
WiFi.reconnect();
WifiPreviousMillis = currentMillis;
}
unsigned long nowb=millis();
if(nowb - heartbeat>2000)
{
heartbeat = millis();
check_heap_mem();
// if (client.connected())
//{
// snprintf (msg, MSG_BUFFER_SIZE, "Minimum Heap Memory:%ld", value);
//Serial.print("Publish message: ");
//Serial.println(msg);
//client.publish("esp32/output", msg);
//}
}
if (!client.connected()) {
long now = millis();
if (now - MqttreconnectTime > 10000) {
MqttreconnectTime = now;
// Attempt to reconnect
reconnectMqtt();
}
}
else {
client.loop();
}
}