Модуль датчика температуры MY18E20 KY-001 состоит из цифрового датчика температуры MY18E20 (аналог DS18B20), светодиода и резистора (4.7 кОм). Модуль совместим с популярными электронными платформами, такими как Arduino, Raspberry и ESP8266/ESP32.
Схема подключения: S (DATA), + (VCC), – (GND).
Пример
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#include <OneWire.h> /* * Описание взаимодействия с цифровым датчиком ds18b20 * Подключение ds18b20 к ардуино через пин 2 */ OneWire ds(2); // Создаем объект OneWire для шины 1-Wire, с помощью которого будет осуществляться работа с датчиком void setup[]{ Serial.begin(9600); } void loop[]{ // Определяем температуру от датчика DS18b20 byte data[2]; // Место для значения температуры ds.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров ds.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устрйоство ds.write(0x44); // Даем датчику DS18b20 команду измерить температуру. Само значение температуры мы еще не получаем - датчик его положит во внутреннюю память delay(1000); // Микросхема измеряет температуру, а мы ждем. ds.reset(); // Теперь готовимся получить значение измеренной температуры ds.write(0xCC); ds.write(0xBE); // Просим передать нам значение регистров со значением температуры // Получаем и считываем ответ data[0] = ds.read(); // Читаем младший байт значения температуры data[1] = ds.read(); // А теперь старший // Формируем итоговое значение: // - сперва "склеиваем" значение, // - затем умножаем его на коэффициент, соответсвующий разрешающей способности (для 12 бит по умолчанию - это 0,0625) float temperature = ((data[1] << 8) | data[0]) * 0.0625; // Выводим полученное значение температуры в монитор порта Serial.println(temperature); } |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
#include <OneWire.h> /* * Определение адреса датчика DS18B20 * Подключение ds18b20 к ардуино через пин 2 */ OneWire ds(2); // Создаем объект OneWire для шины 1-Wire void setup[]{ Serial.begin(9600); Serial.println("Поиск датчиков DS18B20..."); // Ищем датчики на шине findDevices(); } void loop[]{ // Ничего не делаем в цикле, так как адрес нужно определить один раз // Если нужно периодически проверять - можно раскомментировать строку ниже // delay(5000); // findDevices(); } // Функция поиска всех устройств на шине void findDevices() { byte addr[8]; // Массив для хранения 64-битного адреса (8 байт) Serial.println("Поиск устройств..."); // Ищем первое устройство if (!ds.search(addr)) { // Если устройств не найдено Serial.println("Устройства не найдены! Проверьте подключение."); ds.reset_search(); // Сбрасываем поиск для следующего раза return; } // Если нашли хотя бы одно устройство - перебираем все int deviceCount = 0; do { deviceCount++; // Проверяем контрольную сумму адреса if (OneWire::crc8(addr, 7) != addr[7]) { Serial.print("Ошибка CRC для устройства "); Serial.print(deviceCount); Serial.println("! Адрес может быть поврежден."); continue; } // Проверяем семейство устройства (для DS18B20 должно быть 0x28) if (addr[0] != 0x28) { Serial.print("Найдено устройство не DS18B20 (код семейства: 0x"); Serial.print(addr[0], HEX); Serial.println(")"); } // Выводим адрес найденного датчика Serial.print("Датчик #"); Serial.print(deviceCount); Serial.print(" Адрес: "); printAddress(addr); // Показываем, является ли датчик DS18B20 if (addr[0] == 0x28) { Serial.println(" (DS18B20)"); } else { Serial.println(" (другое устройство)"); } } while (ds.search(addr)); // Продолжаем поиск следующих устройств Serial.print("Всего найдено устройств: "); Serial.println(deviceCount); ds.reset_search(); // Сбрасываем поиск } // Функция для красивого вывода 64-битного адреса void printAddress(byte address[]) { for (byte i = 0; i < 8; i++) { // Выводим каждый байт в HEX формате с ведущим нулем if (address[i] < 16) Serial.print("0"); Serial.print(address[i], HEX); // Разделяем байты пробелом, кроме последнего if (i < 7) Serial.print(" "); } } |









