Датчик TMP117 поддерживает интерфейс I2C и работает от напряжения 3.3 В, что совместимо с ESP32.

TMP117 ESP32 Примечание
VCC (3.3V) 3.3V Питание 3.3 В
GND GND Общий земляной провод
SDA GPIO21 (по умолчанию) Линия данных I2C
SCL GPIO22 (по умолчанию) Линия тактирования I2C
ALERT (опционально) Любой GPIO Прерывание при выходе за диапазон

Код для чтения температуры с TMP117 на ESP32 (Arduino IDE) 

#include <Wire.h>

#define TMP117_ADDR 0x48  // Адрес по умолчанию (может быть 0x49, 0x4A, 0x4B в зависимости от настроек ADR0/ADR1)

void setup() {
  Serial.begin(115200);
  Wire.begin();  // Инициализация I2C (SDA=21, SCL=22 по умолчанию)
  
  // Проверка наличия датчика
  Wire.beginTransmission(TMP117_ADDR);
  if (Wire.endTransmission() == 0) {
    Serial.println("TMP117 найден!");
  } else {
    Serial.println("TMP117 не отвечает!");
    while(1);
  }
}

void loop() {
  float temperature = readTMP117Temperature();
  Serial.print("Температура: ");
  Serial.print(temperature);
  Serial.println(" °C");
  delay(1000);
}

float readTMP117Temperature() {
  uint8_t data[2];
  
  // Указываем регистр температуры (0x00)
  Wire.beginTransmission(TMP117_ADDR);
  Wire.write(0x00);
  Wire.endTransmission();
  
  // Читаем 2 байта
  Wire.requestFrom(TMP117_ADDR, 2);
  if (Wire.available() == 2) {
    data[0] = Wire.read();
    data[1] = Wire.read();
  }
  
  // Преобразуем в температуру (1 LSB = 0.0078125 °C)
  int16_t rawTemp = (data[0] << 8) | data[1];
  return rawTemp * 0.0078125;
}

Примечания

  1. Адрес I2C:

    • По умолчанию 0x48, но может быть изменен перемычками (ADR0/ADR1).

    • Возможные адреса: 0x480x490x4A0x4B.

  2. Подтяжка резисторов:

    • На шине I2C должны быть подтягивающие резисторы (~4.7 кОм) на линии SDA и SCL к 3.3 В.

  3. Проверка подключения:

    • Если датчик не определяется, проверьте адрес с помощью I2C сканера.

Если вы имели в виду другой датчик (например, TMP102 или LM75), схема будет похожей, но адрес и регистры могут отличаться. Уточните модель, если нужно скорректировать ответ.

Если подтягивающие резисторы на линиях SDA и SCL будут 3.3 кОм (вместо классических 4.7 кОм), это тоже допустимо и даже может улучшить работу шины I2C на высоких скоростях.

Особенности использования резисторов 3.3 кОм

  1. Более сильная подтяжка → быстрее нарастание фронта сигнала.

    • Подходит для более высоких скоростей I2C (например, 400 кГц и выше).

    • Уменьшает влияние паразитных емкостей на длинных проводах.

  2. Больший ток потребления (но не критично):

    • При 3.3 В ток через резистор:

      I=VR=3.3 В3300 Ом≈1 мАI=RV=3300Ом3.3В1мА
    • Для ESP32 и TMP117 это безопасно.

  3. ESP32 чувствителен к перегрузке линий → но 3.3 кОм не вызовет проблем.

Схема подключения (с резисторами 3.3 кОм)

plaintext
 
ESP32 (3.3V) ────┬───────── VCC (TMP117)  
                 │  
               3.3kΩ  ← Подтяжка к 3.3 В  
                 │  
ESP32 (GPIO21) ──┴───────── SDA (TMP117)  

ESP32 (3.3V) ────┬───────── (доп. питание, если нужно)  
                 │  
               3.3kΩ  ← Подтяжка к 3.3 В  
                 │  
ESP32 (GPIO22) ──┴───────── SCL (TMP117)  

GND (ESP32) ────────────── GND (TMP117)

Проверка работы

  1. Осциллографом:

    • Убедитесь, что нет "лесенки" на сигнале (слишком большая емкость).

    • Проверьте, что фронты сигналов четкие.

  2. Логическим анализатором:

    • Если есть ошибки (NACK, зависания), попробуйте:

      • Уменьшить скорость I2C (например, до 100 кГц).

      • Увеличить резисторы до 4.7 кОм.

Вывод

Резисторы 3.3 кОм — отличный выбор для I2C с ESP32 и TMP117, особенно если:

  • Используются короткие провода (до 20–30 см).

  • Нужна высокая скорость (400 кГц и более).

Если же связь нестабильна, попробуйте:

  • Уменьшить скорость I2C (Wire.setClock(100000)).

  • Добавить экранирование проводов.

  • Вернуться к 4.7 кОм.