Посоветуйте способ найти проблему с памятью при работе с датчиками по i2c

именно. А вот while(0) абсолютно бессмысленная конструкция, на мой взгляд.

Что касается основной проблемы - Садман молодец, глазастый.
Но меня смущает то, что вы писали вначале:

Код был с этой же строчкой формата или нет?

С уровнем оптимизации Os это в конечном коде не отразится

Да. Это готовый пример, который взят копи-пастом.
И программа для меня проваливается очень странно. После порчи памяти проходит много подпрограмм, происходит переход в другую библиотеку и только там при вызове очередной функции происходит или мусор или зависание или перезагрузка в зависимости от случайностей.

для порчи памяти это как раз нормально.
Ошибка возникает не тогда, когда вы портите “чужую” память, а когда вы потом пытаетесь этой испорченной памятью воспользоваться.
Так что, в принципе, в маленькой программе это может и вовсе не проявится.

В этом смысле в том, что небольшой пример работал, а в большой программе стал виснуть - ничего удивительного нет. И возможно Садман нашел главную причину ваших проблем.
Однако я призываю не расслабляться. Ошибка может быть и не одна.

sprintf - оружие самурая.
Лично я предпочитаю snprintf, чтобы потом не красноглазить.

И это оказалось правильным - перенес код обратно на ESP8266 - датчики не читаются :frowning:
i2c тест проходит, осциллограф красивый, данные не корректные. :frowning:
Где задавать вопросы по ESP8266? :slight_smile:

Эти датчики с ESP раньше работали?
Судя по тому, что они не сгорели от AVR, модули с 5V TTL. Питания мож не хватает при работе с 8266

Да. ~год, пока я не перекомпилировал программу на новом Arduino IDE. А дальше начал переподключать и искать почему…