Микроконтроллер ESP32 со встроенными функциями беспроводной связи сегодня широко используется во многих радиолюбительских проектах благодаря своей универсальности и низкой цене.

Во многих проектах домашней автоматизации необходимо измерять температуру и влажность. Для этого хорошо подходят датчики вроде DHT11 и DHT22. Поэтому в данном примере мы рассмотрим, как подключить к ESP32 датчик DHT11 и запрограммировать микроконтроллер на работу с ним.
Нам понадобятся две библиотеки. Сначала установите их (если у вас их нет):
- https://github.com/adafruit/Adafruit_Sensor
- https://github.com/adafruit/DHT-sensor-library
Датчик DHT22 более современный, чувствительный к измеряемым параметрам, но более дорогой. DHT11 – это широко используемый недорогой модуль. Если вы недавно приобрели какой-либо датчик температуры и влажности DHT11, вам будет казаться, что у него много контактов, поскольку он покрыт внушительным корпусом. Если вы откроете его (не нужно для работы, но для дополнительного образования), вы найдете внутри печатную плату с датчиком влажности резистивного типа, термистором с отрицательным температурным коэффициентом для измерения температуры и 8-разрядным микроконтроллером. Слева направо контакты датчика:
- VCC – для соединения с 5 В микроконтроллера
- Data – соединить с цифровым входом микроконтроллера
- NC – не нужно ничего делать
- GND – соединить с GND микроконтроллера
По сути, у нас есть один вывод данных для нашей реальной потребности, очевидно, что вывод питания пойдет к линии 3V (датчик сможет работать с 3В), а другой – к GND. Второй вывод, который является выходом данных, нуждается в некотором рабочем напряжении. Добавление резистора 220 Ом к 3 В ESP32 и добавление его к выводу данных обеспечит нормальную работу. Схема подключения ESP32 и DHT11 показана далее. На ней мы подключили вывод данных к контакту 15 платы ESP32.

Далее приведен код программы взаимодействия ESP32 и датчика DHT11 в среде Arduino IDE.
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 15 // Контакт, который подключен к датчику DHT
// введите модель используемого датчика, мы используем DHT11, если вы используете DHT21 или DHT22, измените его
#define DHTTYPE DHT11
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;
void setup() {
Serial.begin(9600);
dht.begin();
Serial.println("Modified Temperature, Humidity Serial Monitor Example");
sensor_t sensor;
dht.temperature().getSensor(&sensor);
Serial.println("------------------------------------");
Serial.println("Temperature");
Serial.print ("Sensor: "); Serial.println(sensor.name);
Serial.print ("Driver Ver: "); Serial.println(sensor.version);
Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id);
Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println(" *C");
Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println(" *C");
Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println(" *C");
Serial.println("------------------------------------");
dht.humidity().getSensor(&sensor);
Serial.println("------------------------------------");
Serial.println("Humidity");
Serial.print ("Sensor: "); Serial.println(sensor.name);
Serial.print ("Driver Ver: "); Serial.println(sensor.version);
Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id);
Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println("%");
Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println("%");
Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println("%");
Serial.println("------------------------------------");
delayMS = sensor.min_delay / 1000;
}
void loop() {
delay(delayMS);
sensors_event_t event;
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println("Error reading temperature!");
}
else {
Serial.print("Temperature: ");
Serial.print(event.temperature);
Serial.println(" *C");
}
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
Serial.println("Error reading humidity!");
}
else {
Serial.print("Humidity: ");
Serial.print(event.relative_humidity);
Serial.println("%");
}
}
© digitrode.ru