Датчик температуры DS18B20 с Arduino, ESP32 и Pico
Подключение DS18B20 к Arduino: 1-Wire, подтяжка 4,7 kΩ, водонепроницаемый зонд, несколько датчиков на одном пине, код с OneWire и DallasTemperature, примеры для ESP32 и Pico.
DS18B20 — цифровой датчик температуры и один из самых точных и гибких способов измерять температуру с Arduino. Он работает в диапазоне от −55 °C до +125 °C, даёт точность ±0,5 °C в пределах от −10 °C до +85 °C и передаёт результат цифровым числом, а не аналоговым напряжением, поэтому показания не портятся даже на длинных проводах. Его главный козырь — интерфейс 1-Wire: к одному пину данных можно подключить десятки DS18B20 и читать каждый по отдельности по его уникальному адресу.
В этой статье разберём, как работает DS18B20, как устроена шина 1-Wire, почему ей всегда нужен подтягивающий резистор 4,7 kΩ, а также водонепроницаемую версию в виде зонда и цвета её проводов. Затем шаг за шагом пройдём код для одного и нескольких датчиков с библиотеками OneWire и DallasTemperature, неблокирующее чтение на ESP32 и работу с MicroPython на Raspberry Pi Pico. В конце — причины и решения частых ошибок −127 °C и 85 °C.

Что такое DS18B20 и как он работает?
Внутри DS18B20 есть чувствительный к температуре элемент, аналого-цифровой преобразователь, небольшая память (scratchpad) и записанный на заводе уникальный 64-битный серийный номер. Когда микроконтроллер отправляет команду преобразования, датчик измеряет температуру, записывает результат в память двухбайтовым числом и ждёт, пока его прочитают. Раз измерение делает сам датчик, нет ошибок из-за аналогового входа Arduino, его опорного напряжения или сопротивления провода. В отличие от NTC-термистора, не нужны ни калибровочная таблица, ни формула: прочитанное значение сразу выражено в градусах Цельсия.
| Параметр | Значение |
|---|---|
| Диапазон измерения | −55 °C … +125 °C |
| Точность | ±0,5 °C (от −10 °C до +85 °C) |
| Разрешение | Выбирается от 9 до 12 бит (0,5 °C … 0,0625 °C) |
| Напряжение питания | 3,0–5,5 V (работает с Arduino, ESP32 и Pico) |
| Ток | Около 1 mA во время преобразования, меньше 1 µA в режиме ожидания |
| Интерфейс | 1-Wire (одна линия данных + GND) |
| Адрес | 64-битный ROM-код; код семейства 0x28 |
| Корпус | TO-92 (3 ножки) или водонепроницаемый зонд из нержавеющей стали |
Разрешение датчика выбирается программно. Чем выше разрешение, тем мельче шаг, но дольше преобразование. По умолчанию стоит 12 бит — правильный выбор для большинства проектов; если нужны очень быстрые измерения, можно опуститься до 9 или 10 бит.
| Разрешение | Шаг | Максимальное время преобразования |
|---|---|---|
| 9 бит | 0,5 °C | 93,75 мс |
| 10 бит | 0,25 °C | 187,5 мс |
| 11 бит | 0,125 °C | 375 мс |
| 12 бит (по умолчанию) | 0,0625 °C | 750 мс |
Что такое 1-Wire? Связь по одному проводу
Как видно из названия, 1-Wire — протокол, который передаёт данные по одной линии при общей земле (GND). На шине есть один ведущий (Arduino) и одно или несколько ведомых устройств (DS18B20). В свободном состоянии подтягивающий резистор держит линию в HIGH. Тот, кто хочет передать данные, на короткое время прижимает линию к LOW; биты кодируются длительностью этих LOW-импульсов, которая измеряется в микросекундах. Каждый обмен начинается с импульса сброса, а датчики отвечают импульсом присутствия: «я здесь».
Поскольку ни одно устройство не выставляет на линии HIGH принудительно (схема с открытым стоком), на одну шину можно повесить сколько угодно датчиков без конфликтов. Ведущий сначала командой поиска находит все 64-битные адреса на шине, затем выбирает нужный датчик по адресу и обращается к нему. Так для измерения температуры в пяти разных точках хватает одного пина вместо пяти.
DS18B20, DHT11, DHT22 и NTC: сравнение
| Параметр | DS18B20 | DHT11 | DHT22 | NTC-термистор |
|---|---|---|---|---|
| Диапазон температур | −55 … +125 °C | 0 … 50 °C | −40 … +80 °C | Примерно −40 … +125 °C (зависит от модели) |
| Точность | ±0,5 °C | ±2 °C | ±0,5 °C | Зависит от калибровки |
| Выход | Цифровой (1-Wire) | Цифровой (одна линия) | Цифровой (одна линия) | Аналоговый (меняется сопротивление) |
| Влажность | Нет | Да | Да | Нет |
| Водонепроницаемая версия | Да (зонд из нержавейки) | Нет | Нет | Да (зонд) |
| Несколько датчиков на одном пине | Да | Нет | Нет | Нет |
Коротко: если нужна ещё и влажность, правильный выбор — DHT11 или DHT22. Если же нужно мерить температуру воды, почвы, трубы или морозилки, следить за несколькими точками через один пин или работать с минусовыми температурами, DS18B20 вне конкуренции.
Распиновка DS18B20 и цвета проводов
| Пин | TO-92 (плоской стороной к себе) | Провод водонепроницаемого зонда | Назначение |
|---|---|---|---|
| GND | 1 (левый) | Чёрный | Земля |
| DQ | 2 (средний) | Жёлтый (у некоторых зондов белый) | Линия данных 1-Wire |
| VDD | 3 (правый) | Красный | Питание 3,0–5,5 V |
Подключение DS18B20: Arduino Uno, ESP32 и Pico
| DS18B20 | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| VDD (красный) | 5V | 3V3 | 3V3(OUT), пин 36 |
| GND (чёрный) | GND | GND | GND, пин 38 |
| DQ (жёлтый) | D2 | GPIO 4 | GP22, пин 29 |
| Подтяжка 4,7 kΩ | Между DQ и 5V | Между DQ и 3V3 | Между DQ и 3V3 |
Подтягивающий резистор в этой схеме обязателен. Устройства на шине 1-Wire умеют только прижимать линию к LOW, а возвращает её в HIGH именно этот резистор. Без него линия «висит в воздухе», датчик не находится, и библиотека возвращает −127 °C. Номинал 4,7 kΩ подтягивает линию достаточно быстро и при этом держит ток малым: когда линия в LOW, по закону Ома I = 5 V / 4700 Ω ≈ 1,06 mA. Четырёхполосный резистор 4,7 kΩ маркируется жёлтым, фиолетовым, красным и золотым; для уверенности воспользуйся утилитой цветового кода. На некоторых модулях DS18B20 (датчик на маленькой плате с резистором и светодиодом) этот резистор уже распаян, и тогда добавлять его не нужно.
Установка библиотек
- В Arduino IDE открой «Инструменты › Управлять библиотеками» (Tools › Manage Libraries).
- Введи в поиске DallasTemperature и установи библиотеку от Miles Burton.
- Когда IDE спросит о зависимостях, выбери «Установить все» (Install all), чтобы заодно установилась библиотека OneWire от Paul Stoffregen. Если вопроса не было, найди OneWire и установи её отдельно.
- При желании открой «Файл › Примеры › DallasTemperature › Simple», поменяй номер пина под свою схему и попробуй.
Первый скетч: чтение одного DS18B20
1#include <OneWire.h>
2#include <DallasTemperature.h>
3
4#define ONE_WIRE_BUS 2 // DS18B20 veri pini (DQ) / data pin (DQ)
5
6OneWire oneWire(ONE_WIRE_BUS); // 1-Wire hattı / 1-Wire bus
7DallasTemperature sensors(&oneWire); // sensör kütüphanesi / sensor library
8
9void setup() {
10 Serial.begin(9600);
11 sensors.begin(); // hattaki sensörleri bul / find sensors on the bus
12 Serial.print(F("Sensor sayisi / Sensor count: "));
13 Serial.println(sensors.getDeviceCount());
14}
15
16void loop() {
17 sensors.requestTemperatures(); // ölçümü başlat, bitmesini bekle / start conversion and wait
18 float tempC = sensors.getTempCByIndex(0); // ilk sensörün sıcaklığı / first sensor's temperature
19
20 if (tempC == DEVICE_DISCONNECTED_C) { // -127: sensör yanıt vermedi / sensor did not respond
21 Serial.println(F("Hata: sensor yok / Error: no sensor"));
22 } else {
23 Serial.print(F("Sicaklik / Temperature: "));
24 Serial.print(tempC, 2);
25 Serial.println(F(" C"));
26 }
27 delay(1000);
28}| Функция | Что делает |
|---|---|
| sensors.begin() | Сканирует шину 1-Wire и регистрирует найденные датчики |
| sensors.getDeviceCount() | Возвращает количество датчиков на шине |
| sensors.requestTemperatures() | Отправляет команду преобразования всем датчикам на шине и по умолчанию ждёт её завершения |
| sensors.getTempCByIndex(0) | Возвращает температуру первого датчика в списке в градусах Цельсия |
| sensors.getTempFByIndex(0) | Возвращает то же значение в градусах Фаренгейта |
| sensors.setResolution(12) | Задаёт разрешение от 9 до 12 бит |
| DEVICE_DISCONNECTED_C | Значение, которое возвращается, когда датчик не отвечает: −127 |
В мониторе порта на скорости 9600 бод каждую секунду будет появляться строка вроде «Sicaklik / Temperature: 23.44 C». Заметно, что последние цифры меняются с шагом 0,0625 — это шаг 12-битного разрешения. Зажми датчик между пальцами, и через несколько секунд температура должна вырасти. Если монитор порта показывает −127, датчик вообще не находится; если 85, датчик найден, но прочитан раньше, чем закончилось преобразование. Решение обеих проблем — в таблице в конце статьи.
Несколько DS18B20 на одном пине
Чтобы подключить несколько датчиков, просто соедини параллельно все их пины VDD, GND и DQ; на всю шину нужен один подтягивающий резистор 4,7 kΩ. Читать через getTempCByIndex() легко, но порядок задают адреса датчиков, а не порядок подключения. Заменишь один датчик — порядок может измениться. Поэтому в постоянных проектах каждый датчик лучше читать по его собственному адресу. Скетч ниже находит все датчики на шине, выводит их адреса и читает температуру каждого по адресу:
1#include <OneWire.h>
2#include <DallasTemperature.h>
3
4#define ONE_WIRE_BUS 2 // tüm sensörler aynı pinde / all sensors on the same pin
5
6OneWire oneWire(ONE_WIRE_BUS);
7DallasTemperature sensors(&oneWire);
8DeviceAddress addr; // 8 baytlık sensör adresi / 8-byte sensor address
9int count = 0;
10
11void printAddress(const DeviceAddress a) {
12 for (uint8_t i = 0; i < 8; i++) {
13 Serial.print(F("0x"));
14 if (a[i] < 0x10) Serial.print('0'); // tek haneyi sıfırla tamamla / pad single digit
15 Serial.print(a[i], HEX);
16 if (i < 7) Serial.print(F(", "));
17 }
18}
19
20void setup() {
21 Serial.begin(9600);
22 sensors.begin();
23 count = sensors.getDeviceCount(); // hatta kaç sensör var? / how many sensors on the bus?
24 Serial.print(F("Sensor sayisi / Sensor count: "));
25 Serial.println(count);
26 sensors.setResolution(12); // hepsi 12 bit (0,0625 C) / all 12-bit (0.0625 C)
27}
28
29void loop() {
30 sensors.requestTemperatures(); // tüm sensörler aynı anda ölçer / all sensors convert at once
31 for (int i = 0; i < count; i++) {
32 if (!sensors.getAddress(addr, i)) continue; // adresi al / get the address
33 Serial.print(F("Sensor "));
34 Serial.print(i);
35 Serial.print(F(" { "));
36 printAddress(addr);
37 Serial.print(F(" }: "));
38 Serial.print(sensors.getTempC(addr), 2); // adrese göre oku / read by address
39 Serial.println(F(" C"));
40 }
41 Serial.println();
42 delay(2000);
43}Запусти скетч один раз и по очереди нагрей каждый датчик (например, зажав в руке), чтобы понять, какой адрес к какой точке относится. Затем впиши в код адрес, который показал монитор порта: добавь строку вроде DeviceAddress waterSensor = {0x28, 0xFF, 0x64, 0x1E, 0x0F, 0x16, 0x03, 0x90}; и читай датчик через sensors.getTempC(waterSensor). У DS18B20 первый байт адреса всегда 0x28, а последний — CRC, по которому проверяется, что адрес корректен. Так значения «вода», «улица» или «котёл» всегда будут браться из нужного места, в каком бы порядке ни стояли датчики.
DS18B20 с ESP32: неблокирующее чтение
На ESP32 DS18B20 работает с теми же библиотеками OneWire и DallasTemperature. Для линии данных хорошо подходит GPIO 4. Не используй GPIO 34–39: эти пины работают только на вход и не могут прижать линию 1-Wire к LOW; также избегай GPIO 0, 2, 12 и 15, уровень которых важен при старте. Датчик и подтягивающий резистор всегда подключай к 3V3: если подтянуть линию к 5 V, на пин ESP32 попадёт 5 V.
По умолчанию requestTemperatures() при 12 битах ждёт 750 мс. Всё это время плата больше ничего не делает: веб-сервер, кнопки или дисплей замирают. Решение — отключить ожидание через setWaitForConversion(false) и прочитать результат через 750 мс с помощью millis(). В скетче для ESP32 ниже светодиод продолжает ровно мигать, даже пока идёт измерение температуры:
1#include <OneWire.h>
2#include <DallasTemperature.h>
3
4const int ONE_WIRE_PIN = 4; // ESP32 GPIO 4 (DQ)
5const int LED_PIN = 2; // dahili LED (çoğu kartta) / onboard LED (most boards)
6
7OneWire oneWire(ONE_WIRE_PIN);
8DallasTemperature sensors(&oneWire);
9
10unsigned long requestTime = 0;
11unsigned long lastBlink = 0;
12bool converting = false;
13
14void setup() {
15 Serial.begin(115200);
16 pinMode(LED_PIN, OUTPUT);
17 sensors.begin();
18 sensors.setResolution(12);
19 sensors.setWaitForConversion(false); // requestTemperatures() beklemesin / do not block
20}
21
22void loop() {
23 unsigned long now = millis();
24
25 if (!converting) {
26 sensors.requestTemperatures(); // ölçümü başlat, hemen dön / start and return at once
27 requestTime = now;
28 converting = true;
29 }
30
31 if (converting && now - requestTime >= 750) { // 12 bit için 750 ms / 750 ms for 12-bit
32 float t = sensors.getTempCByIndex(0);
33 if (t == DEVICE_DISCONNECTED_C) {
34 Serial.println("Sensor yok / No sensor");
35 } else {
36 Serial.printf("Sicaklik / Temperature: %.2f C\n", t);
37 }
38 converting = false; // bir sonraki ölçüme geç / move to the next reading
39 }
40
41 if (now - lastBlink >= 250) { // bu arada LED yanıp söner / meanwhile the LED blinks
42 lastBlink = now;
43 digitalWrite(LED_PIN, !digitalRead(LED_PIN));
44 }
45}Этот приём особенно важен в проектах с Wi-Fi: ESP32 может мерить температуру, одновременно отдавая веб-страницу, отправляя данные в интернет или обновляя дисплей. Если ESP32 для тебя в новинку, про выбор пинов и настройку читай в статье Что такое ESP32?; карту пинов своей платы можно найти в утилите распиновки.
DS18B20 с Raspberry Pi Pico и MicroPython
Модули onewire и ds18x20 уже встроены в MicroPython на Raspberry Pi Pico, так что загружать дополнительные файлы не нужно. Подключи датчик к 3V3(OUT) и GND, линию данных к GP22 и не забудь подтяжку 4,7 kΩ между DQ и 3V3. Встроенные подтягивающие резисторы Pico для 1-Wire слишком слабые.
1from machine import Pin
2import onewire, ds18x20, time, binascii
3
4ds_pin = Pin(22) # DQ -> GP22 (fiziksel pin 29 / physical pin 29)
5sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
6
7roms = sensor.scan() # hattaki sensör adresleri / sensor addresses on the bus
8print("Sensor sayisi / Sensor count:", len(roms))
9
10while True:
11 sensor.convert_temp() # hepsi aynı anda ölçer / all sensors convert at once
12 time.sleep_ms(750) # 12 bit dönüşüm süresi / 12-bit conversion time
13 for rom in roms:
14 t = sensor.read_temp(rom) # adrese göre oku / read by address
15 print(binascii.hexlify(rom).decode(), "{:.2f} C".format(t))
16 time.sleep(2)scan() возвращает список 8-байтовых адресов всех датчиков на шине. convert_temp() отправляет команду преобразования сразу всем датчикам, поэтому после неё нужно подождать 750 мс. read_temp(rom) читает температуру датчика с этим адресом в градусах Цельсия. Если список пустой, сначала проверь подтягивающий резистор и номер пина. Если Pico для тебя в новинку, про установку MicroPython читай в статье Что такое Raspberry Pi Pico?.
Водонепроницаемый зонд DS18B20
Самая популярная форма DS18B20 — водонепроницаемый зонд: чип помещён в трубку из нержавеющей стали и залит смолой. Обычно это наконечник диаметром 6 мм и длиной 50 мм и трёхжильный кабель длиной 1 метр (бывают версии на 2, 3 и 5 метров). Он идеально подходит для аквариумов, баков с водой, бойлеров, почвы, холодильников и морозилок. Стальной наконечник можно ненадолго опустить в кипяток, но кабель обычно из ПВХ, поэтому не держи кабель и место соединения долго выше 85–100 °C. Корпус зонда замедляет передачу тепла к датчику, так что после резкой смены температуры показание может устанавливаться от нескольких секунд до нескольких десятков секунд.
На рынке много клонов DS18B20. Некоторые не дотягивают до заявленной точности или не работают в режиме паразитного питания. Опусти два датчика в один стакан воды и сравни показания — это простой способ понять, можно ли доверять твоим. Если разница больше 0,5 °C, в коде можно ввести небольшую поправку (offset).
Идеи проектов с DS18B20
- Термостат для аквариума: включай и выключай нагреватель с помощью водонепроницаемого зонда и модуля реле; с гистерезисом вода будет держаться между 25 и 26 °C.
- Контроль температуры в нескольких точках: подключи пять датчиков к одному пину и следи одновременно за комнатой, улицей, холодильником, подачей и обраткой котла.
- Термометр на OLED: выводи температуру крупными цифрами на OLED-дисплей вместе с минимумом и максимумом за день.
- Температура на LCD: выводи показания двух датчиков на две строки I2C LCD-дисплея.
- Страница температуры по Wi-Fi: смотри температуру, измеренную ESP32, вживую на веб-странице, открытой с телефона.
- Управление теплицей: мерь температуру почвы с DS18B20, а влажность почвы — датчиком влажности почвы, чтобы решать, когда поливать.
Частые проблемы и их решения
| Признак | Вероятная причина | Решение |
|---|---|---|
| Температура −127 °C | Датчик не найден: нет подтяжки, обрыв провода, не тот пин или перепутаны VDD и GND | Проверь резистор 4,7 kΩ и подключение; посмотри, не возвращает ли getDeviceCount() 0 |
| Температура всегда 85 °C | Чтение до конца преобразования или нехватка питания (85 °C — значение при включении) | После requestTemperatures() выжди время преобразования; питай VDD напрямую |
| Найдено 0 датчиков | Нет подтяжки на DQ или в коде неверный номер пина | Проверь номер пина и резистор, сделай провода короче |
| Датчик сильно греется | Перепутаны VDD и GND | Сразу отключи питание и исправь порядок пинов |
| Показание иногда падает до −127 | Длинный кабель, слабая подтяжка или помехи | Уменьши подтяжку до 2,2–3,3 kΩ, возьми витую пару, пропускай ошибочные показания в коде |
| Порядок датчиков изменился | Порядок по индексу зависит от адресов, а не от того, как датчики установлены | Читай каждый датчик по адресу: getTempC(address) |
| Программа подвисает, кнопки реагируют с задержкой | requestTemperatures() блокирует выполнение на 750 мс при каждом чтении | Используй setWaitForConversion(false) и millis() |
Благодаря надёжности, водонепроницаемому зонду и возможности повесить много датчиков на один пин DS18B20 — один из самых полезных датчиков температуры в любительской электронике. Температуру можно вывести на дисплей, через реле управлять нагревателем или вентилятором, а с ESP32 — отправить в интернет. В приложении BlueGrays есть проекты с температурой на DHT11 и NTC, I2C LCD-дисплеи, регистратор температуры на ESP32 и умный полив для Arduino и ESP32 — с пошаговыми схемами подключения и кодом.
Частые вопросы
Какой резистор нужен DS18B20?
Между линией данных DS18B20 (DQ) и питанием (VDD) ставится подтягивающий резистор 4,7 kΩ. Одного резистора достаточно, сколько бы датчиков ни было на шине. Если кабель длиннее примерно 10 метров, уменьшение номинала до 2,2–3,3 kΩ делает связь надёжнее.
Почему DS18B20 показывает −127 градусов?
−127 — значение ошибки, которое библиотека DallasTemperature возвращает, когда датчик не отвечает. Самые частые причины: нет подтягивающего резистора, неверный номер пина, оборванный или плохо закреплённый провод и перепутанные VDD и GND. Сначала проверь через getDeviceCount(), находится ли датчик вообще.
Почему DS18B20 показывает 85 градусов?
85 °C — значение, которое лежит в памяти DS18B20 по умолчанию после включения. Оно появляется, если температуру прочитали до окончания преобразования или если датчику во время преобразования не хватило питания. Помогает ожидание времени преобразования после команды и питание датчика напрямую через пин VDD.
Сколько датчиков DS18B20 можно подключить к одному пину Arduino?
У каждого DS18B20 есть уникальный 64-битный адрес, поэтому теоретически один пин могут делить очень много датчиков. На практике без проблем работают до 10–20 датчиков; дальше нужно тщательно подбирать длину кабеля, номинал подтяжки и питание. Все датчики сидят на одной линии данных с одним подтягивающим резистором.
DS18B20 водонепроницаемый?
Сам DS18B20 в корпусе TO-92 не защищён от воды. А вот версию-зонд в трубке из нержавеющей стали можно погружать в воду и другие жидкости или закапывать в почву. Кабель зонда обычно из ПВХ, поэтому следи, чтобы кабель и место соединения подолгу не находились при высокой температуре.
Что лучше: DS18B20 или DHT22?
Оба дают точность ±0,5 °C, но созданы для разных задач. DHT22 кроме температуры измеряет влажность и идеально подходит для условий в помещении. DS18B20 влажность не мерит, зато работает до −55 °C, бывает в виде водонепроницаемого зонда и позволяет подключить несколько датчиков к одному пину.
Что собрать после прочтения
Все проекты
Температура и влажность с DHT11
Насколько тепло в твоей комнате и влажный ли воздух или сухой? Датчик DHT11 измеряет температуру и влажность, а Arduino выводит значения на двухстрочный LCD-экран и обновляет их каждые пару секунд. Ес

Измерение температуры с NTC и LCD-дисплеем 2x16
Измерь температуру вокруг с помощью датчика, похожего на крошечную бусинку. Эта деталь, NTC, при нагреве легче пропускает электричество; Arduino читает это изменение, по формуле переводит его в градус

Температура и влажность с DHT22 на ESP32 (с LCD-дисплеем)
Этот проект измеряет температуру и влажность воздуха датчиком DHT22 и в реальном времени показывает данные на I2C LCD 16x2. Данные читаются с датчика по однопроводному протоколу через библиотеку Adafruit DHT. Проект служит основой для IoT-метеостанций, умного дома или систем мониторинга среды в теплицах. Связь с DHT22 идёт через пин GPIO 4 у ESP32.

Регистратор температуры на ESP32 (DHT22 + DS1307 RTC + microSD + OLED)
Собери на ESP32 регистратор температуры с отметками времени! Каждую минуту читай температуру и влажность с DHT22, бери реальное время из DS1307 RTC и записывай всё на карту microSD в формате CSV. OLED показывает текущую температуру (крупным шрифтом), влажность в процентах, время и счётчик записей. Файл /temp_log.csv на SD-карте открывается в Excel, Google Sheets или Python pandas — идеально для теплиц, комнат, лабораторий и хранения продуктов.

LCD-экран с I2C
Дай своему Arduino собственный экран и заставь его написать первое сообщение. Двухстрочный LCD-экран подключается всего несколькими проводами; в верхней строке появляется приветствие, затем второе соо

I2C LCD-дисплей (16x2) на ESP32
В этом проекте символьный LCD-экран 16x2 подключается к ESP32 по протоколу I2C и выводит текст. Благодаря I2C экраном можно управлять всего двумя пинами данных (SDA и SCL), не тратя 6+ пинов, как при классическом параллельном подключении. Код печатает постоянное сообщение в первой строке и счётчик, растущий каждую секунду, во второй. Кроме того, при запуске работает сканер I2C, который выводит адрес дисплея в монитор порта.

Часы, календарь и метеостанция на матрице (MAX7219, DS1307)
Табло с бегущей строкой для стола или стены, которое по очереди показывает время, дату и погоду в комнате. На светодиодном дисплее 8x32 сначала видна температура в градусах Цельсия и Фаренгейта, затем
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

