MicroPython,DHT22 и ESP32 измерване на температура и влажност с визуализация на OLED дисплей

MicroPython,DHT22 и ESP32 измерване на температура и влажност с визуализация на OLED дисплей

Въведение

В тази статия ще разгледаме как да използваме сензора за температура и влажност DHT22 с ESP32 C3, като показваме измерените стойности на малък OLED дисплей с драйвер SSD1306. Проектът използва MicroPython и е отличен за бързи и ефективни измервания, подходящи за мониторинг на околната среда.

Какво ви е необходимо:

  • ESP32 (в нашия случай ESP32 C3 Super Mini)
  • DHT22 сензор за температура и влажност
  • OLED дисплей с SSD1306 драйвер
  • pull-up резистор (4.7 kΩ) за стабилност на DHT22
  • Свързващи кабели

Свързване на компонентите

Свържете DHT22 към ESP32 C3, като свържете:

  • VCC на DHT22 към 3.3V на ESP32,
  • GND на DHT22 към GND на ESP32,
  • DATA на DHT22 към цифров пин (например пин 0), като използвате 4.7kΩ pull-up резистор между VCC и DATA.

OLED дисплеят се свързва чрез I2C интерфейс:

  • SCL на OLED към пин 7 на ESP32,
  • SDA на OLED към пин 6 на ESP32.

Запознайте се с различните платформи на ESP32 в нашите ревюта за тях:

DHT22 конфигурация на пинове (pinout)

DHT22-pinout
DHT22-pinout

Библиотеката DHT в MicroPython

MicroPython разполага с вградена библиотека за работа с DHT сензори, която улеснява извличането на температура и влажност. DHT22 се инициализира лесно, след което може да измерва и връща данни за температурата и влажността. Повече информация може да прочетете в статията ни: DHT22 и ESP32 C3 измерване на температура и влажност с MicroPython

Библиотеката за OLED SSD1306 дисплея може да свалите от тук: SSD1306. Също така може да разгледате нашата статия за неговото използване: Свързване на OLED SSD1306 дисплей към ESP32 C3 с MicroPython

Код за MicroPython,DHT22 и ESP32 измерване на температура и влажност с визуализация на OLED дисплей

Кодът включва инициализация на DHT22, I2C и OLED дисплея. След това на дисплея се показват измерените стойности на температурата и влажността.

from machine import Pin, I2C, ADC
import ssd1306
import dht
from time import sleep

dht_inicialize = dht.DHT22(Pin(0))

i2c = I2C(0, scl=Pin(7), sda=Pin(6), freq=400000) # i2c bus=0 , CSL=pin(6) , SDA=pin(5) , BUS_freqency=400khz
print("oled address = " , i2c.scan())             # print I2C devices

oled_width = 128
oled_height = 64

oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)

oled.text('Hello from:', 25, 3)
oled.text('ardudevelop.eu', 7, 20)

oled.fill(0)

while True:
    
    dht_inicialize.measure()
    temp = str(dht_inicialize.temperature())
    hum = str(dht_inicialize.humidity())

    oled.text('ardudevelop.eu', 7, 3)
    oled.text('Temp = ' + temp + "*C", 7, 20)
    oled.text('Hum = ' + temp + "%", 7, 40)
    
    oled.show()
    sleep(1)
    oled.fill(0)

Обяснение на кода

Импортиране на библиотеки

from machine import Pin, I2C, ADC
import ssd1306
import dht
from time import sleep
  • Pin, I2C, и ADC са част от machine модула и се използват за работа с пиновете и интерфейсите на ESP32.
  • ssd1306 е библиотеката за управление на OLED дисплей с драйвер SSD1306.
  • dht се използва за четене на температура и влажност от сензора DHT22.
  • sleep от time модула осигурява забавяне в основния цикъл.

Инициализация на DHT22 сензора

dht_inicialize = dht.DHT22(Pin(0))

Инициализиране на DHT22 сензора, свързан към пин 0 на ESP32. Тук създаваме обект dht_inicialize, чрез който по-късно ще извличаме стойности за температура и влажност.

Настройка на I2C интерфейса и OLED дисплея

i2c = I2C(0, scl=Pin(7), sda=Pin(6), freq=400000)
print("oled address =", i2c.scan())

Тук инициализираме I2C комуникация, като:

  • I2C(0, scl=Pin(7), sda=Pin(6), freq=400000) създава I2C обект със скорост 400 kHz. SDA и SCL линиите са съответно на пинове 6 и 7.
  • i2c.scan() открива всички устройства на I2C шина и отпечатва техния адрес в конзолата.

Настройка на параметрите на OLED дисплея

oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
  • Задаваме ширината и височината на дисплея (128×64 пиксела).
  • Инициализираме обекта oled за работа с дисплея чрез I2C интерфейса и параметрите за размери.

Изчистване на OLED екрана

oled.fill(0)
oled.show()
  • oled.fill(0) задава всички пиксели на екрана да са изключени (черен екран).
  • oled.show() прилага промените на дисплея.

Основен цикъл на програмата. Тук програмата работи в безкраен цикъл:

while True:
    dht_inicialize.measure()
    temp = str(dht_inicialize.temperature())
    hum = str(dht_inicialize.humidity())
    oled.text('ardudevelop.eu', 7, 3)
    oled.text('Temp = ' + temp + "*C", 7, 20)
    oled.text('Hum = ' + hum + "%", 7, 40)
    oled.show()
    sleep(1)
    oled.fill(0)

Измерване на температура и влажност

dht_inicialize.measure()
temp = str(dht_inicialize.temperature())
hum = str(dht_inicialize.humidity())
  • dht_inicialize.measure() стартира измерването с DHT22 сензора.
  • dht_inicialize.temperature() и dht_inicialize.humidity() извличат измерените стойности за температура и влажност. Стойностите се преобразуват в стрингов формат за по-лесно използване в текста на дисплея.

Показване на данните на OLED дисплея

oled.text('ardudevelop.eu', 7, 3)
oled.text('Temp = ' + temp + "*C", 7, 20)
oled.text('Hum = ' + hum + "%", 7, 40)
  • oled.text() добавя текст на различни позиции на екрана. В примера:
  • ardudevelop.eu” се изписва в горната част.
  • Температурата и влажността са показани на редове отдолу.

Обновяване и изчистване на екрана

oled.show()
sleep(1)
oled.fill(0)
  • oled.show() обновява OLED екрана с новите стойности.
  • sleep(1) прави пауза от 1 секунда преди следващото измерване.
  • oled.fill(0) изчиства екрана за нови данни при следващата итерация.

Заключение

Този проект показва как лесно може да се реализира мониторинг на температура и влажност с DHT22 и ESP32, като стойностите се визуализират на OLED SSD1306 дисплей. Този пример е полезен за начинаещи, които искат да усвоят работа с микроконтролери и сензори в MicroPython. Клип с подобен проект може да видите тук.

Translate »