
GY-90615 · инфракрасный термометр MLX90615
Melexis (MLX90615); изготовитель PCB не указан · GY-90615, 4 контакта; референс diymore SKU 010861
Измеряет температуру предметов без касания.
Автор: SLDV LAB
Опубликовано · Обновлено
О МОДУЛЕ
Что делает GY-90615, 4 контакта; референс diymore SKU 010861
GY-90615 — компактная плата с бесконтактным ИК-термометром MLX90615. Сенсор оценивает температуру видимой поверхности по тепловому излучению и отдельно сообщает температуру своего корпуса. Это один измерительный канал, а не тепловизор: он не строит изображение и не определяет расстояние.
Референс этой карточки — фиолетовая четырёхконтактная плата из каталога diymore, SKU 010861. Фото и распиновка относятся к ней. Производитель PCB, её ревизия, маркировка стабилизатора и полный суффикс сенсора в источнике не раскрыты. Поэтому конкретный угол обзора, медицинская точность и устройство цепи питания не приписываются всей серии GY-90615.
GY-90615 с прямым SMBus не заменяет GY-906 на MLX90614 программно: отличаются адрес и команды. Платы GY-MCU90615 с TX/RX и дополнительным контроллером также требуют отдельного протокола. Перед сборкой сверьте название сенсора, маркировку контактов и исполнение платы с фотографией.
Практические задачи — сравнение нагрева матовых поверхностей, наблюдение за остыванием предмета и знакомство с SMBus. Цель должна занимать поле зрения; блестящий металл, отражения, загрязнение окна, сквозняк и нагрев платы от ESP32 искажают результат. Обычное стекло или прозрачная пластиковая крышка перед сенсором не гарантируют прохождение его рабочего ИК-диапазона. Расстояние и пригодность защитного окна нужно проверять в конкретной конструкции.
Параметр emissivity описывает излучательную способность объекта. Пример читает его, но не меняет EEPROM, адрес, калибровку или режим PWM. Настройка emissivity не исправляет недостаточное заполнение поля зрения или температурный градиент. Не записывайте заводские калибровочные ячейки и не переписывайте EEPROM при каждом запуске.
Это учебный модуль, не медицинский прибор. Измерение поверхности кожи не равно внутренней температуре тела; сборка не предназначена для диагностики, лечения или допуска людей по температуре. Она также не заменяет независимую защиту от перегрева.
Фотография: diymore, SKU 010861. При подготовке изображения сохранены реальная плата, контакты, маркировка и водяной знак; использованы только вырезание фона и пропорциональное размещение. Условия повторного использования исходного снимка отдельно не установлены.
Характеристики
- Сенсор
- Melexis MLX90615, полный суффикс референса не указан
- Интерфейс показанной платы
- SMBus Read Word через SDA/SCL; не UART
- Заводской 7-битный адрес MLX90615
- 0x5B
- Шаг цифрового результата MLX90615
- 0.02 °C
- Диапазон TO микросхемы, Rev 005
- −40…+115 °C; не аттестация готовой платы
- Рабочая температура MLX90615, Rev 005
- −20…+85 °C; не путать с температурой цели
- Паспортная точность MLX90615 в опорной зоне
- ±0,5 °C при TA и TO от 0 до +50 °C, номинальном питании и установившихся изотермических условиях; точность сборки отдельно не подтверждена
- Размеры референса по diymore
- 10,5 × 13 × 9,6 мм
- Ожидание готовности после включения
- 0.5 с
- Питание модуля
- Референс diymore SKU 010861: продавец указывает VIN 3–5 В; в примере VIN и подтяжки шины питаются от 3,3 В. Схема, модель стабилизатора и ревизия PCB не опубликованы: 5-вольтовая совместимость логики не подтверждена. Питание самой MLX90615 по datasheet Rev 005 — 2,6–3,4 В, типовое 3 В; это не диапазон VIN готовой платы.
ПРАКТИКА
Подключение

| Контакт модуля | Контакт платы | Назначение |
|---|---|---|
| VIN | 3V3 | ESP32-DevKitC V4 с ESP32-WROOM-32; питание референса diymore от 3,3 В. До подключения GPIO проверить VDD сенсора и отсутствие подтяжек к 5 В. Не повышать VIN, пытаясь исправить отсутствие ответа. |
| GND | GND | Общая земля. Соединять при выключенном питании. |
| SCL | GPIO22 | ESP32-DevKitC V4, тактирование 100 кГц. Нужны подтяжки к совместимому 3,3-вольтовому уровню, не к 5 В. |
| SDA | GPIO21 | ESP32-DevKitC V4, данные SMBus. Расположение показано для фотографии референса; у других плат сверяйте маркировку. Для C3/S3/C6 GPIO выбираются отдельно. |
Подходит для ESP32, Arduino. Выберите контакты по документации своей платы.
ВАШ ПРОЕКТ · ВАШ ДАТЧИК
Интегрируйте модуль с ChatGPT
Скопируйте запрос в ChatGPT. Укажите свою плату и среду разработки — получите подключение и код для своего проекта.
Помоги подключить GY-90615 на MLX90615. Сначала уточни фотографию обеих сторон и точное исполнение платы, маркировку MLX90615, контроллер, среду и задачу. Не смешивай четырёхконтактный SMBus-модуль с MLX90614 или UART-платой GY-MCU90615. Референс карточки: diymore SKU 010861, VIN/GND/SCL/SDA; питание 3–5 В заявлено продавцом, но схема и модель LDO не опубликованы. Для примера используй ESP32-DevKitC V4 ESP32-WROOM-32, VIN 3,3 В, SDA GPIO21, SCL GPIO22, Arduino-ESP32 3.3.2, Wire, 100 кГц, 7-битный адрес 0x5B. Проверь питание сенсора и уровень подтяжек до подключения GPIO; не обещай 5-вольтовую совместимость неизвестного клона. Дай полный пример SMBus Read Word с repeated START, чтением low/high/PEC, CRC-8 polynomial 0x07, проверкой бита ошибки и обработкой NACK/короткого ответа. Команды TA/TO — 0x26/0x27, преобразование raw*0.02-273.15, ожидание после включения не менее 500 мс. EEPROM, emissivity и адрес автоматически не менять. Объясни зависимость результата от поверхности, поля зрения и теплового режима. Предложи проверку на матовом объекте при комнатной температуре, не выдавая её за калибровку или медицинское измерение. Отдельно назови, что подтверждено документацией, а что требует проверки на экземпляре.
Библиотеки
Установите библиотеку для своей среды и откройте пример из её документации.
Что именно прописать
- Плата / среда
ESP32-DevKitC V4 ESP32-WROOM-32; Arduino IDE; esp32 3.3.2В меню платы можно выбрать ESP32 Dev Module; GPIO21/22 не универсальны для ESP32-C3/S3/C6.
- Зависимость / заголовки
Wire (в составе ядра); #include <Arduino.h>; #include <Wire.h>Отдельная библиотека MLX90614 не используется; дополнительные библиотеки для этого скетча не нужны.
- Питание в примере
VIN = 3.3 V; GND общий3,3 В находится внутри диапазона 3–5 В, заявленного diymore для этого модуля. Номинал LDO и схема не подтверждены; до GPIO измерьте VDD сенсора и уровень покоя SDA/SCL. Для Rev 005 VDD сенсора 2,6–3,4 В. Подтяжки не должны поднимать GPIO ESP32 к 5 В.
- Адрес SMBus
0x5BСемибитный заводской адрес. Wire получает 0x5B, а не адресный байт 0xB6. При ранее изменённом адресе нужен фактический адрес; общий 0x00 в примере не применяется.
- Инициализация шины
Wire.begin(21, 22, 100000); Wire.setTimeOut(25)SDA21/SCL22, 100 кГц, тайм-аут вызова в миллисекундах. Короткие провода; при отсутствии подтяжек подобрать их по ёмкости шины, обычно 4,7 кОм к 3,3 В для короткого макета, не добавлять параллельно вслепую.
- Команды чтения
TA 0x26; TO 0x27; emissivity 0x13Команды включают код пространства RAM/EEPROM. 0x06/0x07 — адреса RAM, а не готовые команды MLX90615. 0x13 в примере только читается.
- Контроль и пересчёт
PEC CRC-8 0x07; error bit 15; T = raw * 0.02 - 273.15PEC проверяется по байтам SA_W, command, SA_R, low, high. Некорректный результат не печатается как температура.
- Период опроса
500 ms после включения; 1000 ms между цикламиЭто настройки примера, не заявленная частота измерения или время теплового установления.
ESP32-DevKitC V4 · полный скетч SMBus с PEC, без записи EEPROM
cpp#include <Arduino.h>
#include <Wire.h>
constexpr uint8_t MLX_ADDRESS = 0x5B; // Seven-bit address, not 0xB6.
constexpr uint8_t CMD_AMBIENT = 0x26;
constexpr uint8_t CMD_OBJECT = 0x27;
constexpr uint8_t CMD_EMISSIVITY = 0x13; // Read only.
constexpr int SDA_PIN = 21; // ESP32-DevKitC V4, ESP32-WROOM-32.
constexpr int SCL_PIN = 22;
bool busReady = false;
uint8_t crc8(const uint8_t *data, size_t length) {
uint8_t crc = 0;
for (size_t i = 0; i < length; ++i) {
crc ^= data[i];
for (uint8_t bit = 0; bit < 8; ++bit) {
crc = (crc & 0x80) ? uint8_t((crc << 1) ^ 0x07)
: uint8_t(crc << 1);
}
}
return crc;
}
bool readWord(uint8_t command, uint16_t &word, const char *&error) {
Wire.beginTransmission(MLX_ADDRESS);
Wire.write(command); // Select a register; this does not write EEPROM.
if (Wire.endTransmission(false) != 0) {
error = "bus/NACK";
return false;
}
const size_t count = Wire.requestFrom(MLX_ADDRESS, size_t(3), true);
if (count != 3 || Wire.available() != 3) {
while (Wire.available()) Wire.read();
error = "short read/bus timeout";
return false;
}
const uint8_t low = uint8_t(Wire.read());
const uint8_t high = uint8_t(Wire.read());
const uint8_t receivedPec = uint8_t(Wire.read());
const uint8_t frame[] = {
uint8_t(MLX_ADDRESS << 1), command,
uint8_t((MLX_ADDRESS << 1) | 1), low, high
};
if (crc8(frame, sizeof(frame)) != receivedPec) {
error = "PEC/CRC mismatch";
return false;
}
word = uint16_t(low) | (uint16_t(high) << 8);
error = nullptr;
return true;
}
bool readTemperature(uint8_t command, float &celsius, const char *&error) {
uint16_t raw = 0;
if (!readWord(command, raw, error)) return false;
if (raw & 0x8000) {
error = "sensor error flag";
return false;
}
celsius = float(raw) * 0.02f - 273.15f;
return true;
}
void setup() {
Serial.begin(115200);
busReady = Wire.begin(SDA_PIN, SCL_PIN, 100000);
if (!busReady) {
Serial.println("I2C init failed; check board/GPIO and restart.");
return;
}
Wire.setTimeOut(25);
delay(500); // Wait for sensor power-on checks before reading.
uint16_t emissivity = 0;
const char *error = nullptr;
if (readWord(CMD_EMISSIVITY, emissivity, error)) {
if (emissivity < 0x0666 || emissivity > 0x4000) { // Supported correction: 0.1..1.0.
Serial.println("Unexpected emissivity; investigate without rewriting EEPROM.");
} else {
Serial.print("Stored emissivity = ");
Serial.println(float(emissivity) / 16384.0f, 4);
}
} else {
Serial.print("Emissivity read failed: ");
Serial.println(error);
}
}
void loop() {
if (!busReady) {
delay(1000);
return;
}
float ambient = 0, object = 0;
const char *error = nullptr;
if (!readTemperature(CMD_AMBIENT, ambient, error)) {
Serial.print("TA unavailable: ");
Serial.println(error);
} else if (!readTemperature(CMD_OBJECT, object, error)) {
Serial.print("TO unavailable: ");
Serial.println(error);
} else {
Serial.print("TA (sensor package) = ");
Serial.print(ambient, 2);
Serial.print(" C; TO (surface) = ");
Serial.print(object, 2);
Serial.println(" C");
if (ambient < 0 || ambient > 50 || object < 0 || object > 50) {
Serial.println("Outside 0..50 C reference accuracy zone; consult the datasheet.");
}
}
delay(1000); // Polling interval, not a claim about sensor sample rate.
}
API сверено с Wire.h Arduino-ESP32 3.3.2; протокол — с Melexis Rev 005. Пример читает температуру корпуса TA, поверхности TO и сохранённую emissivity. Полная сборка в Arduino IDE и испытание на физической плате не проводились. Наличие двух знаков после запятой не означает такую точность. Если ответа нет, сначала проверить питание, землю, уровни и адрес; не подменять результат нулём и не переходить на 5 В без проверки исполнения. При временной ошибке следующий цикл повторяет чтение через секунду. После аппаратного сбоя или неверной начальной конфигурации исправить причину и перезапустить.
Проекты с этим компонентом
Все проектыСвязанные проекты пока не опубликованы.


