![MicroPython,DHT22 и ESP32 измерване на температура и влажност с визуализация на OLED дисплей](http://ardudevelop.eu/wp-content/uploads/2024/10/Screenshot-2024-10-28-232748.png)
Въведение
В тази статия ще разгледаме как да използваме сензора за температура и влажност 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](http://ardudevelop.eu/wp-content/uploads/2024/10/DHT22-pinout.png)
Библиотеката 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. Клип с подобен проект може да видите тук.