Hi
1) Following your suggestion, I've added Heap info before and after ChipChop.updateStatus(). Values are exactly the same:
Memory AFTER updateStatus Free Heap Size=18712
Memory BEFORE updateStatus Free Heap Size=18712
8.00
Memory AFTER updateStatus Free Heap Size=18712
Memory BEFORE updateStatus Free Heap Size=18712
9.00
Memory AFTER updateStatus Free Heap Size=18712
Memory BEFORE updateStatus Free Heap Size=18712
10.00
Memory AFTER updateStatus Free Heap Size=18712
Memory BEFORE updateStatus Free Heap Size=18712
11.00
Memory AFTER updateStatus Free Heap Size=18712
Memory BEFORE updateStatus Free Heap Size=18712
It means that memory has been allocated but has not been freed.
ticker.attach_scheduled(10,[](){
Serial.println("Memory BEFORE updateStatus Free Heap Size="+String(ESP.getFreeHeap()));
ChipChop.updateStatus("test_numeric",test);
ChipChop.updateStatus("uptime",String(100+test));
Serial.println(test);
test++;
Serial.println("Memory AFTER updateStatus Free Heap Size="+String(ESP.getFreeHeap()));
});
2) I've tried to modify connection string to ws instead of wss: String server_uri = "ws://api1.chipchop.io/wsdev/". Yes, in this case it doesn't devour memory.
Initial MEMORY Free Heap Size=48152
WiFi Connecting...
Memory BEFORE ChipChop.start Free Heap Size=46936
Memory AFTER ChipChop.start Free Heap Size=46576
Memory BEFORE updateStatus Free Heap Size=45928
0.00
Memory AFTER updateStatus Free Heap Size=45904
Memory BEFORE updateStatus Free Heap Size=46000
1.00
Memory AFTER updateStatus Free Heap Size=46000
Memory BEFORE updateStatus Free Heap Size=46000
2.00
Memory AFTER updateStatus Free Heap Size=46000
3) I've modified your library a bit to ensure that strings are stored in PROGMEM using F macro, like F("ChipChop onEventsCallback opening connection"), however, the improvement was negligible (so i examples above, I used an original one).
Questions:
1) Why does encryption of a such short message use so much memory?
2) Why this memory is not freed after sending a message?
3) The ugliest workaround would be: switch off / suspend ChipChop for a moment in a way that it releases allocated memory THEN perform some operations that require more heap memory and THEN resume / switch ChipChop on. Can you suggest what commands shall be used with ChipChop?