Я нашел проблему. Ну, это не проблема, а другая реализация.
EPS32 использует другую реализацию библиотеки Wire. У него есть другие возвращаемые значения, которых нет в пакете с программным обеспечением Arduino.
typedef enum {
I2C_ERROR_OK=0,
I2C_ERROR_DEV, // 1
I2C_ERROR_ACK, // 2
I2C_ERROR_TIMEOUT, // 3
I2C_ERROR_BUS, // 4
I2C_ERROR_BUSY, // 5
I2C_ERROR_MEMORY, // 6
I2C_ERROR_CONTINUE,// 7
I2C_ERROR_NO_BEGIN // 8
} i2c_err_t;
Код ошибки 7 означает, что запросы находятся в очереди. Они не были отправлены. Каждый раз, когда вызов Wire :: EndTransmission вызывается с ложным в этой реализации вместо того, чтобы фактически отправлять запрос, запросы просто помещаются в очередь. Когда endTransmission вызывается с true в качестве аргумента (или без qrgument), все запросы отправляются одновременно.
Другим следствием этого различия в реализации является код, который обрабатывает ненулевые значения, поскольку ошибки не обязательно будут работать должным образом, поскольку не все ненулевые значения действительно являются кодами ошибок.
Для моего случая я могу просто использовать Wire :: endTransmission (true). Для других, сталкивающихся с этой проблемой, ваше решение может потребовать дополнительных соображений и возможных изменений в логике.