Въведение
В тази статия ще разгледаме как да използваме сензора за температура и влажност 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)

Библиотеката 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 sleepPin,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. Клип с подобен проект може да видите тук.
