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


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 挽衾.159 2024-05-28 21:41 采纳率: 0% 浏览 4 首页/ 编程语言 / 用vscode platform编写esp32连接dht20传感器 数据一直读取失败 c++单片机有问必答 程序无异常串口监视如下 接线:+接3.3v,gnd-gnd,scl-d22,sda-d21 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    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 
      #include 
      
      #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。如果仍然存在问题,可能需要进一步排查其他潜在问题,例如供电稳定性、干扰等。如果问题依然存在,请提供详细的错误消息或串口监视器的输出,以便更好地协助您解决问题。

      展开全部

      评论 编辑记录
      挽衾.159 2024-05-28 22:14

      还是一直读取失败,是不是传感器的问题呀,我还没有多余的传感器

      回复
    • 阿里嘎多学长 2024-05-28 21:41
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      程序代码分析

      首先,让我们分析你提供的程序代码。代码中有几个问题需要解决:

      1. DHT库和初始化:

        #include "DHT.h"
        #define DHTTYPE DHT22
        #define DHTPIN 21
        DHT dht(DHTPIN, DHTTYPE);
        

        这部分看起来是正确的,你已经包含了DHT库,定义了传感器类型为DHT22,并将数据引脚设置为GPIO 21。

      2. setup函数:

        void setup() {
          Serial.begin(9600);
          dht.begin();
        }
        

        这里也正确,你初始化了串口通信,并开始DHT传感器。

      3. loop函数:

        void loop() {
          delay(2000);
          float temp = dht.readTemperature();
          float humi = dht.readHumidity();
          if(isnan(humi) || isnan(temp)) {
            Serial.print("Failed to read from DHT sensor!");
            return;
          }
          Serial.print("temp:");
          Serial.print(temp);
          Serial.print("%lt");
          Serial.print("humi");
          Serial.print(humi);
          Serial.print("%C");
        }
        

        这里有几个错误需要修正:

        • float temp = dht.readTemperature(); 应该是 float temp = dht.readTemperature();
        • Serial.print("%lt"); 应该是 Serial.print("%"); 打印温度时不需要 lt
        • Serial.print("%C"); 应该是 Serial.println("C"); 打印湿度的单位,并且使用 println 来换行。

      串口监视器分析

      从你提供的串口监视器截图来看,显示的是十六进制的数据,而不是可读的文本。这可能是因为你的串口监视器设置不正确。确保你的串口监视器设置为文本模式,而不是十六进制。

      接线分析

      你提供的接线信息是:

      • VCC 接 3.3V
      • GND 接 GND
      • SCL 接 D22
      • SDA 接 D21

      这个接线是正确的,因为DHT22传感器使用的是I2C通信协议,而你已经将SCL和SDA分别连接到了ESP32的GPIO 22和21。

      代码实现

      修正后的代码如下:

      #include "DHT.h"
      #define DHTTYPE DHT22
      #define DHTPIN 21
      
      DHT dht(DHTPIN, DHTTYPE);
      
      void setup() {
        Serial.begin(9600);
        dht.begin();
      }
      
      void loop() {
        delay(2000);
        float temp = dht.readTemperature();
        float humi = dht.readHumidity();
        if(isnan(humi) || isnan(temp)) {
          Serial.print("Failed to read from DHT sensor!");
          return;
        }
        Serial.print("temp:");
        Serial.print(temp);
        Serial.print("%");
        Serial.print("humi:");
        Serial.print(humi);
        Serial.println("%");
      }
      

      参考资料

      1. DHT22传感器官方文档
      2. ESP32 I2C通信教程

      请注意,以上链接仅供参考,可能需要根据你的具体情况进行调整。如果你仍然遇到问题,请提供更多的信息,例如错误消息或串口监视器的文本输出。

      展开全部

      评论 编辑记录
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    华为OD机试 - 玩牌高手 - 动态规划(Java 2023 B卷 100分)
    leetcode每天5题-Day53-贪心2
    生产制造企业数字化转型:流程制造ERP
    更灵活定位内存地址的方法
    Nature子刊|Binning宏基因组+单菌验证
    用Unity实现景深效果
    go语言基础操作---七
    从0到1构建界面设计系统思维
    Promise 解决 Vue 中父子组件的加载问题!
    劳动节福利~ 我给大家写了个博客园快速发文工具
  • 原文地址:https://ask.csdn.net/questions/8110779