Добрый день.
У Вас прекрасно комментированный код приятно смотреть.
Проблема зависания может быть в бесконечном цикле подключения к брокеру MQTT.
Или в самом Брокере.
Могу Вам на время тестирования предоставит бесплатно мой сервис MQTT Брокер
https://www.mqtt.su сообщите под каким ником Вы зарегистрировались по почте
[email protected] и для вас будет доступно 100 topiс без каких либо искусственных ограничений.
Есть вариант что виснет сам МК тогда можно попробовать
Watchdog (англ. сторожевой пёс) – отдельный таймер на микроконтроллере, который имеет собственный источник тактирования и ни от кого не зависит. По данному таймеру можно ловить прерывания и использовать их в своих целях, а также он может перезагрузить микроконтроллер в случае зависания.
https://alexgyver.ru/gyverwdt/