Начнем с алгоритма работы нашей программы!

1. Подключим в схеме датчик температуры ds18b20 к ESP32.

2. Настроим ножку D18 на вход сигнала от датчика.

3. Считываем температуру используя функцию read_temp ().

4. Подключим oled дисплей к ESP32.

5. Настроим I2C, на ножках D21, D22.

6. Зададим разрешение дисплея.

7. В бесконечном цикле выводим температуру и текст на экран.

 

 

 

И так схема у нас есть, на ней обозначены микроконтроллер, ножки gnd и питания 3,3В, датчик температуры ds18b20 и резистор R1 номиналом 4,7кОм - подключен к порту D18, пин D21, D22 - к которым подключен oled (ssd1306) дисплей.

Распиновку нарисовал на структурной схеме справа, ниже немного информации и основные характеристики датчика температуры ds18b20.

  • Каждое устройство имеет уникальный 64-битный серийный код, который хранится во встроенном ПЗУ
  • Напряжение питания: 3–5,5 В
  • Измеряет температуру от -55°C до +125°C
    (от -67°F до +257°F)
  • Точность: ±0,5 °C (в пределах −10…+85 °C)
  • Разрешение выбирается пользователем
    от 9 до 12 бит
  • Время получения данных 750ms (Max) при 12-битном разрешении

Более подробные характеристики можно посмотреть в datasheet.

 

Практически к каждому материалу есть видеоролик на  YouTube  и  RUTUBE каналах, теорию можно прочитать в статье, а как работает устройство в железе, посмотреть в видеоролике!

Вернемся к программе.

Датчик температуры ds18b20  у нас подключен к порту D18, резистор R1 номиналом 4,7 кОм выполняет функцию ”подтягивания” уровня логической единицы, настроим в программе ножки порта D18 на измерение температуры, допишем в программе signal = Pin(18) - переменная signal равна значению полученному на ножке D18. Дисплей у нас подключен к портам D21(sda), D22(scl) и ножкам питания 3.3В, gnd, настроим в программе ножки портов D21(sda), D22(scl) как шину I2C - i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=10000) и укажем частоту freq=10000, далее создаем переменные ширины (display_width = 128) и высоты (display_height = 64) дисплея, затем опишем разрешение экрана строкой display = ssd1306.SSD1306_I2C(display_width, display_height, i2c).С настройкой портов закончили, далее чтобы наша программа работала добавим в нее модуль import machine, который содержит необходимые функции, для работы платы, строкой from machine import Pin, I2C, укажем чтобы нам постоянно не повторять machine в коде, аналогично опишем модули time, onewire, ds18x20, from time import sleep_ms, from onewire import OneWire, from ds18x20 import DS18X20, а также подключим библиотеку для работы с oled дисплеями import ssd1306, библиотеку можно скачать по ссылке которая закреплена под видео на канале.

Далее строчкой кода "sensor = DS18X20(OneWire(signal))", создаем переменную sensor в которой будут храниться данные считанные с ножки D18 микроконтроллера ESP32, так как у нас один датчик подключен на шине, указываем это в коде sensor_d18 = sensor.scan()[0].

В бесконечном цикле while True, считываем, конвертируем данные sensor.convert_temp(), ждем 750ms для преобразования температуры, после этого считываем температуру с датчика temp = sensor.read_temp(sensor_d18), округляем полученный результат, до 1 символа после точки gradus = (round(temp, 1)), командой  display.fill(0) заполняем весь экран цветом, затем выводим измеренную температуру на дисплей display.text( str (gradus),  40, 30), рисуем знак градуса display.ellipse(77, 30, 1, 2, 1) и текстовую строку "С" с заданными координатами размещения на дисплее display.text('C', 80, 30), записываем содержимое FrameBuffer display.show() с задержкой в одну секунду, выводим без округления данные температуры  в терминал print(temp) с задержкой в 1000ms

Исходный код программы Скачать архив

 

Понравился проект? Не забудь поделиться им с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube и RUTUBE !

  • СПАСИБО ЗА ПРОСМОТР.
  • С уважением.
  • Электроника и Робототехника!