Я углубился в эту ситуацию и обнаружил, что у меня такая же проблема (и на самом деле наступил на несколько разных ошибок). Пришло 4 года спустя, но дополнительная информация всегда полезна для использования в будущем.
Относительно вашего комментария выше:
Я собираюсь предположить, что на данный момент это проблема с оборудованием. Каждый раз, когда я запускаю скетч, на консоль выводится мусор. После расследования он начинает выбрасывать мусор после первого вызова dht1.begin (). Я также написал lua-скрипт, который перебирал все контакты в поисках сообщения DHT, но тоже ничего не получил. - Майкл Уиллер, 20 сен.
Примечание. Вывод мусора обычно означает, что скорость последовательной передачи данных различается при последовательной инициализации и выводе на консоль. Проверьте это, если у вас все еще есть проблемы; попробуйте средство устранения неполадок, указанное ниже.
Устранение неполадок:
1. Вывод мусора: непрерывное получение вывода мусора
- Set Bit Rate to 115200.
- Check Serial Bit Rates (Code and Serial Monitor).
- Delay DHT Initialization for: 2 Seconds (2000ms).
- Check Wiring.
2. Выходной сигнал датчика - nan или 0
- Check Wiring.
- Test with Different Micro-Controller.
- See: 2.1 Bellow
2.1 Тестирование с использованием другого микроконтроллера
- If the Test Fails with a Different Controller Consider:
a) Possibly using the Wrong Library.
b) Possible Defective Module.
**Note:** For ESP32 and ESP8266 you need use a different library.
Include "DHTesp.h" instead of "DHT.h".
See code example bellow.
- If it Succeeds with different Controller:
a) DHT22 is not Compatible with Esp8266.
**Note:** I couldn't find a viable Pin that actually worked on my
ESP8266 (NodeMCU).
I'm relying on my own experience; and considering some people
have managed to make it work; consider that perhaps a
different DHT22 sensor model or ESP8266 could work.
3. Нет вывода
- Usually Error in Code.
- Possible Short Circuit in Module and/or Controller.
enter code here
Примечания: микроконтроллеры и контакты для DHT
- Uno: контакт D02
- Нано: контакт D02
- ESP32: RX2 (контакт 17)
- ESP8266: ничего не работает (попробуйте: 1,2,4,5,7)
Код для каждого микроконтроллера (включая ESP8266)
Arduino Uno / Nano
#include "DHT.h"
/* Sensor Type */
#define dhtType DHT22
/* Define DHT22 Pin on Arduino */
#define dhtPin 0 // ESP8266 D1 (GPIO 5)
/* Configure DHT Pin and Model */
DHT dht(dhtPin, dhtType);
/* Initialize DHT22 Sensor */
void Init_DHT22()
{
dht.begin();
// Wait a little for the Sensor to Start and Calibrate.
delay(1000);
}
/* Read and Retrieve Temperature from DHT Pin. */
float GetTemperature() { return dht.readTemperature(); }
/* Read and Retrieve Humidity from DHT Pin. */
float GetHumidity() { return dht.readHumidity(); }
ESP32
#include "DHTesp.h"
#ifndef ESP32
#pragma message(THIS EXAMPLE IS FOR ESP32 ONLY!)
#error Select ESP32 board.
#endif
DHTesp dht;
/** Pin Number for DHT Data Pin */
#define dhtPin 17
void DHT22_Init()
{
// Initialize temperature sensor
dht.setup(dhtPin, DHTesp::DHT22);
}
float Temperature() { return dht.getTemperature(); }
float Humidity() { return dht.getHumidity(); }
ESP8266
/*
* Common Pins used for on ESP8266 are: D1, D2; D4 (None Worked for Me).
*/
#include "DHTesp.h"
#ifdef ESP32
#pragma message(THIS EXAMPLE IS FOR ESP8266 ONLY!)
#error Select ESP8266 board.
#endif
#define dhtPin 4
#define dhtType DHT22
DHTesp dht;
void DHT22_Init()
{
dht.setup(dhtPin, DHTesp::dhtType);
}
float Temperature()
{
delay(dht.getMinimumSamplingPeriod());
return dht.getTemperature();
}
float Humidity()
{
delay(dht.getMinimumSamplingPeriod());
return dht.getHumidity();
}
С уважением
person
John Connor
schedule
08.11.2020