这个问题似乎已经出现过几次了,但是我试图用DH-22来读ESP-12e(ESP8266)。
接线图如下: Wiring Diagram
代码在这里:
status, temp, humi, temp_dec, humi_dec = dht.read(1)
if status == dht.OK then
-- Integer firmware using this example
print(string.format("DHT Temperature:%d.%03d;Humidity:%d.%03d\r\n",
math.floor(temp),
temp_dec,
math.floor(humi),
humi_dec
))
-- Float firmware using this example
print("DHT Temperature:"..temp..";".."Humidity:"..humi)
elseif status == dht.ERROR_CHECKSUM then
print( "DHT Checksum error." )
elseif status == dht.ERROR_TIMEOUT then
print( "DHT timed out." )
end
我发现文章指出GPIO号码与NodeMCU板上的引脚不匹配,你应该使用板上的引脚,它将内部映射到真正的GPIO密码(https://nodemcu.readthedocs.io/en/dev/en/modules/gpio/)。所以,我已经在板上使用了标记为D1的内容,实际上映射到GPIO5。我已经尝试了两种" 1"和" 5"对于代码中的引脚号,它没有任何区别。我也试过其他别针,但没有用。
当代码尝试运行时,我收到以下错误消息:
> dofile("tempMon")
DHT timed out.
除了传感器可能出现的硬件问题外,还有什么我可能会丢失的吗?
答案 0 :(得分:1)
IMO,它看起来像硬件问题,但是为了确保我在你的ESP8266的Arduino IDE中编写了一个简单的程序,应该给出答案,无论这是软件还是硬件问题。
该程序唯一能做的就是输出连接到引脚1,5或14的DHT22传感器的温度。
#include <DHT.h>
DHT dht1(1, DHT22, 11);
DHT dht5(5, DHT22, 11);
DHT dht14(14, DHT22, 11);
float temp;
void setup() {
Serial.begin(115200);
dht1.begin();
dht5.begin();
dht14.begin();
}
void loop() {
temp = dht1.readTemperature(false);
Serial.print("DHT22 on pin1 - temp: ");
Serial.println(temp);
temp = dht5.readTemperature(false);
Serial.print("DHT22 on pin5 - temp: ");
Serial.println(temp);
temp = dht14.readTemperature(false);
Serial.print("DHT22 on pin14 - temp: ");
Serial.println(temp);
}
我为您编译了二进制文件,因此您无需下载Arduino IDE并再次编译它:dht22test.bin
答案 1 :(得分:1)
我在没有上拉电阻的情况下尝试了相同的示例,并且在两种情况下都收到了相同的错误。
为了确保传感器没有硬件问题,我为arduino构建了代码,并使用相同的传感器一切正常(领事显示温度和湿度)。
答案 2 :(得分:0)
必须是DHT22模块中的硬件问题。要订购另一个模块,然后再试一次。
答案 3 :(得分:0)
我研究了这种情况,发现我遇到了同样的问题(实际上是在遇到一些不同的错误)。 到了4年后,但更多的信息始终对将来的参考很有帮助。
关于您在上面的评论:
我现在猜测这是一个硬件问题。每当我跑步 草图,我将垃圾输出到控制台。经调查, 第一次dht1.begin()是 叫。我还编写了一个遍历所有引脚的lua脚本 寻找DHT讯息,却一无所获。 –迈克尔 惠勒16年9月20日在0:12
注意:垃圾输出通常表示串行初始化和控制台输出中的串行比特率不同。如果仍然有问题,请检查;尝试一下“疑难解答”。
问题排查:
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的微控制器和引脚
每个微控制器(包括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();
}
最好的问候