ESP32 не может считывать данные с датчиков DHT11, MH-Z19C
Я получил MH-Z19C (CO2 ppm) (техническое описание ) и датчики DHT11 (температуры) с Ebay и следовали онлайн-инструкциям, чтобы установить его с моей платой ESP32 (ESP32). ).
Я использую макетную плату и источник питания 5 В/3,3 В для питания датчиков, а ESP32 подключается к компьютеру через USB.
Я изо всех сил пытаюсь понять, почему я не могу получить показания своих датчиков. Я перепробовал множество руководств в Интернете и перепроверил все несколько раз.
Я также пытался напрямую подключить DHT11 к 3,3 В моей платы, но это ничего не изменило.
Как вы "отлаживаете" аппаратное обеспечение? Нет ли способа узнать, что вы делаете неправильно? Вы должны сделать все правильно, иначе ничего не получится?
Журналы серийного монитора:
0 ppm
Failed to read from DHT sensor
Соединения MH-Z19C:
- VIN/Земля <-> Блок питания 5В +/- соответственно
- TX <-> ESP32 RX2
- Прием <-> ESP32 TX2
Соединения DHT11:
- Контакт 1 <-> Питание 3,3 В
- Контакт 2 <-> Подтяжка 10 кОм <-> ESP32 D2
- Контакт 4 <-> Земля
Ссылка:
- https://randomnerdtutorials.com/esp32-dht11-dht22-temperature- датчик влажности-arduino-ide/
- https://www.electroniclinic.com/mh-z19b- ndir-co2-sensor-with-arduino-mhz19b/
- Распиновка ESP32
Установлены библиотеки:
- библиотека датчиков DHT от Adafruit
- MH-Z19 Джонатана Демпси
// Пример тестового скетча для различных датчиков влажности/температуры DHT
// Автор: ladyada, общественное достояние
// ТРЕБУЕТСЯ следующие библиотеки Arduino:
// - Библиотека датчиков DHT: https://github.com/adafruit/DHT-sensor-library
// - Унифицированная библиотека датчиков Adafruit: https://github.com/adafruit/Adafruit_Sensor
#include "DHT.h"
#include <SoftwareSerial.h>
#include <MHZ19.h>
#include <Wire.h>
// пин для чтения uart
#define RX_PIN 16 // вывод Rx, к которому подключен вывод MHZ19 Tx.
#define TX_PIN 17 // вывод Tx, к которому подключен вывод MHZ19 Rx.
#define DHTPIN 2 // Цифровой контакт, подключенный к датчику DHT
// Feather HUZZAH ESP8266 примечание: используйте контакты 3, 4, 5, 12, 13 или 14 --
// Контакт 15 может работать, но DHT должен быть отключен во время загрузки программы.
#define DHTTYPE DHT11 // DHT 11
// Инициализировать датчик DHT.
// Обратите внимание, что более ранние версии этой библиотеки принимали необязательный третий параметр для
// настроить тайминги для более быстрых процессоров. Этот параметр больше не нужен
// поскольку текущий алгоритм чтения DHT настраивается для работы с более быстрыми процессами.
DHT dht(DHTPIN, DHTTYPE);
MHZ19 myMHZ19;
SoftwareSerial mySerial(RX_PIN, TX_PIN);
void setup() {
Serial.begin(9600);
// Запуск датчика СО2
mySerial.begin(9600); // (пример Uno) устройство для серийного запуска MH-Z19
myMHZ19.begin(mySerial); // *Ссылка на Serial(Stream) должна быть передана в библиотеку begin().
myMHZ19.autoCalibration(); // Включаем автокалибровку (OFF autoCalibration(false))
}
void read_dht() {
/////// ДАТЧИК DHT \\\\\\
// Чтение температуры или влажности занимает около 250 миллисекунд!
// Показания датчика также могут быть «старыми» до 2 секунд (это очень медленный датчик)
float h = dht.readHumidity();
// Чтение температуры в градусах Цельсия (по умолчанию)
float t = dht.readTemperature();
// Чтение температуры в градусах Фаренгейта (isFahrenheit = true)
float f = dht.readTemperature(true);
// Проверяем, не завершились ли какие-либо операции чтения, и выходим досрочно (чтобы повторить попытку).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// Расчет теплового индекса в Фаренгейтах (по умолчанию)
float hif = dht.computeHeatIndex(f, h);
// Расчет теплового индекса в градусах Цельсия (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.print(F("C "));
Serial.print(f);
Serial.print(F("F Heat index: "));
Serial.print(hic);
Serial.print(F("C "));
Serial.print(hif);
Serial.println(F("F"));
}
void loop() {
// Подождите несколько секунд между измерениями.
delay(5000);
int CO2;
// Запрос CO2 (в ppm)
CO2 = myMHZ19.getCO2();
Serial.println(String(CO2) + " ppm");
read_dht();
}
@Adam Cherti, 👍1
Обсуждение1 ответ
Вы хорошо дали ссылки. Вы могли бы улучшить свой вопрос, показав, а не просто рассказав нам, как вы подключили датчики.
Как выполнить "отладку" аппаратное обеспечение? Нет ли способа узнать, что вы делаете не так? Вы должны сделать все правильно, иначе ничего не получится?
Нет, это слишком сложно. Мне нравится разделяй и властвуй и последовательно тестировать.
Как уже упоминалось, тестируйте один датчик за раз.
Чтобы проиллюстрировать это, я разобрал старые ESP32 и DHT22 и приступил к их подключению в соответствии с вашим примером.
Вот соединения:
Затем я загружаю библиотеку, о которой вы упомянули, и загружаю их простейший пример, DHTtester. Если я сильно полагаюсь на библиотеки Arduino, я полагаюсь на чужой код, поэтому мне нужно просмотреть его, чтобы убедиться, что я использую его правильно.
Просматривая код, я убеждаюсь, что в нем указано:
#define DHTPIN 2 // Цифровой контакт, подключенный к датчику DHT.
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
и дважды проверяю правильность подключения. Как видите, у меня есть подтягивающий резистор на линии передачи данных.... +3,3 В с одной стороны резистора, а другая сторона идет к выводу данных DHT и к выводу ESP GPIO2 (см. картинки?) .
Я дважды проверяю, а затем запускаю код, и последовательный монитор показывает...
Humidity: 32.40% Temperature: 23.40°C 74.12°F Heat index: 22.64°C 72.75°F
Humidity: 32.70% Temperature: 23.30°C 73.94°F Heat index: 22.54°C 72.57°F
Humidity: 33.30% Temperature: 23.30°C 73.94°F Heat index: 22.55°C 72.60°F
Humidity: 34.10% Temperature: 23.30°C 73.94°F Heat index: 22.58°C 72.64°F
Humidity: 34.30% Temperature: 23.30°C 73.94°F Heat index: 22.58°C 72.65°F
...и если я дышу на датчик, правая влажность подскакивает....выглядит хорошо.
Если бы это не сработало И я был уверен, что все правильно подключил, я бы начал возвращаться назад....Могу ли я заставить любую программу работать на ESP, например, простое мерцание, есть много настроек опций, и их легко испортить.
Если я могу заставить что-то работать, тогда я должен начать подозревать DHT - у меня есть что-то еще для тестирования?... и так далее и тому подобное.
Затем я повторил бы тот же процесс с датчиком CO2.
Тогда я бы попытался использовать их оба одновременно.
Надеюсь, это поможет.
Таким образом, я в основном воспроизвел вашу настройку точно так же, как с DHT и резистором, соединяющим PIN-код с 3,3 В, так же, как и вы. Я все еще получаю температуру 0,00°C и влажность 0,00%, так что он получает показания, не сбоит, но показание всегда равно 0, очень странно. Я это знаю, потому что если я отсоединяю провода, то получаю "ошибка при считывании температуры", "ошибка при считывании влажности". также следовал этому [примеру](https://github.com/adafruit/DHT-sensor-library/blob/master/examples/DHT_Unified_Sensor/DHT_Unified_Sensor.ino), чтобы получить информацию о датчиках, и он печатает версию драйвера и диапазон в порядке., @Adam Cherti
Завтра выложу фото с проводами., @Adam Cherti
Ок добавил фото., @Adam Cherti
Интересно, ваш dht11 был поврежден раньше? Если бы у вас был известный хороший, это было бы очень полезно., @DrG
Насколько мне известно, нет. Я никогда не использовал его раньше. Если честно, меня больше интересует датчик MH-Z19C. Я выполнил некоторые действия по устранению неполадок, следуя этому [примеру "кодов ошибок"](https://github.com/WifWaf/MH-Z19/tree/master/examples/ErrorCodes) из библиотеки, и мне кажется, что код ошибки 3
, что означает «Полученные данные не соответствуют ожидаемому обычному синтаксису»., @Adam Cherti
- bh1750 lightsesor не будет работать
- Монитор напряжения батареи сразу после глубокого сна
- Существует ли точная процедура подключения между esp32 и ультразвуковым датчиком(HC-SR04)?
- Два датчика с использованием I2C
- Программа работает при использовании Delay(), но та же программа не работает с millis()
- Совместима ли Sparkfun ESP32 с универсальными модулями, такими как датчик DHT11?
- ESP32 в Arduino-IDE с FS.h и SPIFFS
- Программаторы для этой платы отсутствуют - Программирование ESP32 Cam с помощью Ardunio IDE
тестируйте только один датчик за раз... используйте пример кода в библиотеке, @jsotola
Пробовал по одному датчику. Я посмотрю пример библиотеки., @Adam Cherti
Вам не нужно использовать SoftwareSerial для MH-Z19. Вы можете использовать второй встроенный аппаратный последовательный порт Serial2., @StarCat
В вашем
setup()
нетdht.begin()
, поэтому ваш DHT11 никогда не инициализируется должным образом. Посмотрите на пример кода, например здесь: [https://github.com/adafruit/DHT-sensor-library/blob/master/examples/DHTtester/DHTtester.ino](https://github.com/adafruit/DHT -sensor-library/blob/master/examples/DHTtester/DHTtester.ino)., @StarCatНа самом деле я сейчас использую
dht.begin()
, но при копировании/редактировании кода в SO он потерялся. К сожалению, я также безуспешно пытался использоватьHardwareSerial
., @Adam Cherti