挽衾.159 2024-05-28 21:41 采纳率: 0%
浏览 14

用vscode platform编写esp32连接dht20传感器 数据一直读取失败

程序无异常

img


串口监视如下

img


接线:+接3.3v,gnd-gnd,scl-d22,sda-d21

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-28 21:41
    关注

    引自免费微信小程序:皆我百晓生

    根据您提供的信息,您的ESP32与DHT20传感器连接后,在尝试读取数据时遇到问题,始终返回“Failed to read from DHT sensor”。为了帮您解决这个问题,我们需要检查几个关键点:

    1. 硬件连接:确保传感器的电源、地线以及信号线(SCL和SDA)正确连接到ESP32的对应引脚上。
    2. 软件配置:确认库文件是否正确安装并导入,以及配置的引脚和类型是否匹配。
    3. 代码逻辑:检查读取数据的循环部分是否有误。

    首先,确保您的硬件连接是正确的,参考图3中的接线方式:

    +  -> 3.3V
    GND -> GND
    SCL -> GPIO22
    SDA -> GPIO21
    

    接下来,让我们看看软件部分。在您的代码中,已经包含了必要的库文件,并且定义了正确的引脚和传感器类型。但是,为了更清晰,我们可以稍微调整一下代码结构,使其更容易阅读和调试。这里有一个改进后的代码示例:

    #include <Wire.h>
    #include <DHT.h>
    
    #define DHTPIN 21
    #define DHTTYPE DHT22
    
    DHT dht(DHTPIN, DHTTYPE);
    
    void setup() {
        Serial.begin(9600);
        delay(2000); // 给DHT传感器一些时间稳定
        if (!dht.begin()) {
            Serial.println("初始化DHT传感器失败");
            while (1);
        }
    }
    
    void loop() {
        float temperature = dht.readTemperature();
        float humidity = dht.readHumidity();
    
        if (isnan(temperature) || isnan(humidity)) {
            Serial.println("Failed to read from DHT sensor");
        } else {
            Serial.print("温度: ");
            Serial.print(temperature);
            Serial.print(" °C\t湿度: ");
            Serial.print(humidity);
            Serial.println("%");
        }
    
        delay(2000); // 每隔2秒读取一次数据
    }
    

    这个版本的代码在setup()函数中添加了一个延迟,以便给DHT传感器更多的时间稳定。同时,将读取数据的部分移到了loop()函数中,这样会每两秒读取一次数据。

    现在,按照上述建议检查硬件连接和代码,然后重新编译并上传到ESP32。如果仍然存在问题,可能需要进一步排查其他潜在问题,例如供电稳定性、干扰等。如果问题依然存在,请提供详细的错误消息或串口监视器的输出,以便更好地协助您解决问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月28日