nanoFramework.Iot.Device.Dhtxx.Esp32 1.2.613

前缀已保留
dotnet add package nanoFramework.Iot.Device.Dhtxx.Esp32 --version 1.2.613                
NuGet\Install-Package nanoFramework.Iot.Device.Dhtxx.Esp32 -Version 1.2.613                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="nanoFramework.Iot.Device.Dhtxx.Esp32" Version="1.2.613" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用包。
paket add nanoFramework.Iot.Device.Dhtxx.Esp32 --version 1.2.613                
#r "nuget: nanoFramework.Iot.Device.Dhtxx.Esp32, 1.2.613"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将此复制到交互工具或脚本源代码中,以引用包。
// Install nanoFramework.Iot.Device.Dhtxx.Esp32 as a Cake Addin
#addin nuget:?package=nanoFramework.Iot.Device.Dhtxx.Esp32&version=1.2.613

// Install nanoFramework.Iot.Device.Dhtxx.Esp32 as a Cake Tool
#tool nuget:?package=nanoFramework.Iot.Device.Dhtxx.Esp32&version=1.2.613                

用于 Esp32 的 DHT10/DHT11/DHT12/DHT21/DHT22 基于 RMT 的数字输出相对湿度 & 温度传感器模块

重要 此实现仅适用于 ESP32。不要使用此实现于其他 MCU。此实现需要 2 个引脚。一个用于写入传感器,另一个用于使用 RMT 读取数据。

DHT 温度和湿度传感器非常普及。此项目支持 DHT10、DHT11、DHT12、DHT21(AM2301)、DHT22(AM2302)。

文档

DHT10 DHT11 DHT12 DHT21 DHT22
图片 dht10 dht11 dht12 dht21 dht22
温度范围 -40 ~ 80 ℃ 0 ~ 60 ℃ -20 ~ 60 ℃ -40 ~ 80 ℃ -40 ~ 80 ℃
湿度范围 0 ~ 99.9 % 2 ~ 95 % 20 ~ 95 % 0 ~ 99.9 % 0 ~ 99.9 %
温度精度 ±0.5 ℃ ±2 ℃ ±0.5 ℃ ±0.5 ℃ ±0.5 ℃
湿度精度 ±3 % ±5 % ±4 % ±3 % ±2 %
协议 I2C 1-Wire I2C, 1-Wire 1-Wire 1-Wire

使用方法

单总线协议

// GPIO Pin
using (Dht11 dht = new Dht11(12, 24))
{
    var temperature = dht.Temperature;
    var humidity = dht.Humidity;
    // You can only display temperature and humidity if the read is successful otherwise, this will raise an exception as
    // both temperature and humidity are NAN
    if (dht.IsLastReadSuccessful)
    {
        Debug.WriteLine($"Temperature: {temperature.DegreesCelsius} \u00B0C, Humidity: {humidity.Percent} %");

        // WeatherHelper supports more calculations, such as saturated vapor pressure, actual vapor pressure and absolute humidity.
        Debug.WriteLine(
            $"Heat index: {WeatherHelper.CalculateHeatIndex(temperature, humidity).Celsius:0.#}\u00B0C");
        Debug.WriteLine(
            $"Dew point: {WeatherHelper.CalculateDewPoint(temperature, humidity).Celsius:0.#}\u00B0C");
    }
    else
    {
        Debug.WriteLine("Error reading DHT sensor");
    }
}

注意: 在使用DHT传感器时,RPi上的单总线协议在Raspbian下可以使用,但在Windows 10 IoT Core下不可用。设备需要在输入和输出引脚之间切换。似乎Windows IoT Core操作系统无法快速切换引脚方向。有人建议使用两个引脚;一个用于输入,另一个用于输出。这里尚未实现此方案,但以下是一些有帮助的链接,可以帮助设置:

I2C协议

重要:在创建I2cDevice之前,请确保正确设置了I2C引脚,特别是针对ESP32。请确保安装了nanoFramework.Hardware.ESP32 nuget

//////////////////////////////////////////////////////////////////////
// when connecting to an ESP32 device, need to configure the I2C GPIOs
// used for the bus
Configuration.SetPinFunction(21, DeviceFunction.I2C1_DATA);
Configuration.SetPinFunction(22, DeviceFunction.I2C1_CLOCK);

对于STM32等其它设备,请确保您使用的是您要使用的I2C总线的预设引脚。

只有DHT12可以使用I2C协议。

I2cConnectionSettings settings = new I2cConnectionSettings(1, DhtSensor.DefaultI2cAddressDht12);
I2cDevice device = I2cDevice.Create(settings);

using (Dht12 dht = new Dht12(device))
{
    var tempValue = dht.Temperature;
    var humValue = dht.Humidity;
    if (dht.IsLastReadSuccessful)
    {
        Debug.WriteLine($"Temperature: {tempValue.Celsius:0.#}\u00B0C");
        Debug.WriteLine($"Relative humidity: {humValue:0.#}%");

        // WeatherHelper supports more calculations, such as saturated vapor pressure, actual vapor pressure and absolute humidity.
        Debug.WriteLine(
            $"Heat index: {WeatherHelper.CalculateHeatIndex(tempValue, humValue).Celsius:0.#}\u00B0C");
        Debug.WriteLine(
            $"Dew point: {WeatherHelper.CalculateDewPoint(tempValue, humValue).Celsius:0.#}\u00B0C");
    }
    else
    {
        Debug.WriteLine("Error reading DHT sensor");
    }
}

读取频率和品质测量

在I2C或GPIO的情况下,任何类型的DHT在两次读取之间都需要一点时间。DHT22文档指出感应周期为2秒,收集周期高于1.7秒。更高频率的测量不会给出更准确的数值。从规格可以看出,精度取决于传感器类型,DHT11为±2℃,其他传感器为±0.5℃。即使奇偶校验能够通过,我们也建议检查数据是否在正常范围内。例如,如果湿度高于100%,那么意味着测量是错误的。这一检查在绑定本身中没有完成,因此您可以考虑在其应用程序侧添加检查。

DHT传感器非常敏感,请避免过长的电缆、电磁干扰,并将代码编译为发布版而不是调试版以增加测量质量。

常见问题解答

我总是得到错误的测量结果,发生了什么情况?

请检查传感器是否正确连接,确保您使用的是正确的引脚。

请检查您是否使用的是正确的传感器。只有DHT10和DHT12支持I2C。所有其他设备仅支持1线协议的GPIO。DHT12两者都支持。

我测量的数据不正确,湿度看起来正常,但温度总是很奇怪,问题出在哪里?

请检查您是否使用了正确的传感器。请参考本页面的顶部检查您拥有哪种传感器。使用DHT11代替DHT22将给出错误的温度。

我试图每秒5次获取温度和湿度,但主要得到错误的测量结果,为什么?

这是绝对正常的,您应该在约每2秒检查一次测量结果。不要试图每2秒内获取多次测量。

当读取温度和湿度并尝试在控制台写入数据时,我遇到异常,为什么?

您首先需要检查测量是否成功。如果没有成功,则默认值将是NaN,因此您将无法转换温度或湿度,并且您将遇到异常。这是首先读取传感器,然后检查读取结果是否正确,最后使用温度和湿度数据的正确方式。

var tempValue = dht.Temperature;
var humValue = dht.Humidity;
if (dht.IsLastReadSuccessful)
{
    Debug.WriteLine($"Temperature: {tempValue.Celsius:0.#}\u00B0C");
    Debug.WriteLine($"Relative humidity: {humValue:0.#}%");
}

DHTxx的示例

所需硬件

  • DHT10/DHT11/DHT12/DHT21/DHT22
  • 公/母跳线

电路

单总线协议电路

将您的DHTxx数据引脚简单地连接到GPIO12和GPIO14,将地线连接到地线,将VCC连接到+3.3V。

schema

一些传感器已配备10K电阻进行销售。将GPIO12和GPIO14连接到数据引脚,其位置取决于积分器。

I2C协议电路

schematics

  • SCL - SCL
  • SDA - SDA
  • VCC - 5V
  • GND - GND

代码

// GPIO Pin
using (Dht11 dht = new Dht11(26))
{
    var temperature = dht.Temperature;
    var humidity = dht.Humidity;
    // You can only display temperature and humidity if the read is successful otherwise, this will raise an exception as
    // both temperature and humidity are NAN
    if (dht.IsLastReadSuccessful)
    {
        Debug.WriteLine($"Temperature: {temperature.DegreesCelsius} \u00B0C, Humidity: {humidity.Percent} %");

        // WeatherHelper supports more calculations, such as saturated vapor pressure, actual vapor pressure and absolute humidity.
        Debug.WriteLine(
            $"Heat index: {WeatherHelper.CalculateHeatIndex(temperature, humidity).Celsius:0.#}\u00B0C");
        Debug.WriteLine(
            $"Dew point: {WeatherHelper.CalculateDewPoint(temperature, humidity).Celsius:0.#}\u00B0C");
    }
    else
    {
        Debug.WriteLine("Error reading DHT sensor");
    }
}

示例应用程序导航

此示例应用程序允许您通过I2C选择DHT10,或者通过GPIO选择任何其他支持DHT的传感器。

Select the DHT sensor you want to use:
 1. DHT10 on I2C
 2. DHT11 on GPIO
 3. DHT12 on GPIO
 4. DHT21 on GPIO
 5. DHT22 on GPIO

只需调整device变量。例如,如果您想测试DHT22,则将其调整为5。

// Set these values to test according to the list below:
var pinEcho = 12;
var pinTrigger = 14;
var device = 5;

此示例使用12号和14号引脚。如果想要使用26号和10号引脚,则调整pinEchopinTrigger变量。这样就会创建一个连接在26号引脚上的DHT22传感器并开始测量。

请注意,前几次测量可能不会正确,这是完全正常的,与传感器需要一段时间以获得数据的事实有关。这些传感器非常敏感,过长的线缆、许多干扰以及代码编译时打开调试将增加错误读数的数量。

结果

dht22 output

注意:读取此传感器很敏感,如果您什么也读不到,请确保已正确接线。还要注意,以发布模式运行时将获得更好的结果。

产品 兼容和额外的目标框架版本。
.NET框架 net是兼容的。
兼容的目标框架
包含的目标框架(在包中)
了解有关目标框架.NET标准的更多信息。

NuGet包

此包不由任何NuGet包使用。

GitHub存储库

此包不由任何流行的GitHub存储库使用。

版本 下载 上次更新
1.2.613 53 8/9/2024
1.2.611 55 8/6/2024
1.2.601 58 7/26/2024
1.2.595 51 7/24/2024
1.2.590 68 7/17/2024
1.2.573 92 6/19/2024
1.2.570 68 6/14/2024
1.2.560 82 5/29/2024
1.2.548 79 5/15/2024
1.2.536 113 4/15/2024
1.2.514 111 3/22/2024
1.2.494 111 2/28/2024
1.2.474 137 1/24/2024
1.2.462 148 1/5/2024
1.2.458 134 12/20/2023
1.2.436 181 11/10/2023
1.2.416 127 11/8/2023
1.2.403 157 10/6/2023
1.2.396 137 9/27/2023
1.2.384 187 9/6/2023
1.2.378 172 8/16/2023
1.2.369 192 8/2/2023
1.2.363 156 7/28/2023
1.2.357 166 7/19/2023
1.2.354 163 7/14/2023
1.2.345 171 6/21/2023
1.2.341 162 6/14/2023
1.2.337 183 6/7/2023
1.2.335 172 6/2/2023
1.2.329 176 5/26/2023
1.2.316 183 5/16/2023
1.2.313 178 5/12/2023
1.2.302 174 5/10/2023
1.2.297 184 5/3/2023
1.2.273 315 3/17/2023
1.2.267 254 3/10/2023
1.2.263 262 3/8/2023
1.2.259 274 2/27/2023
1.2.256 288 2/24/2023
1.2.253 276 2/22/2023
1.2.235 296 2/13/2023
1.2.222 337 1/9/2023
1.2.217 331 1/6/2023
1.2.208 334 1/3/2023
1.2.203 320 12/28/2022
1.2.159 419 11/14/2022
1.2.153 388 11/5/2022
1.2.141 434 10/25/2022
1.2.128 426 10/22/2022
1.2.122 464 10/12/2022
1.2.114 452 10/8/2022
1.2.95 470 9/22/2022
1.2.87 503 9/15/2022
1.2.73 430 9/8/2022
1.2.63 466 9/3/2022
1.2.47 491 8/15/2022
1.2.40 457 8/6/2022
1.2.38 458 8/5/2022
1.2.28 460 8/1/2022
1.2.13 449 7/24/2022
1.2.10 454 7/23/2022
1.1.142.3202 486 7/7/2022
1.1.133.52556 474 6/30/2022
1.1.121.35854 484 6/26/2022
1.1.116.8772 445 6/24/2022
1.1.113.2032 457 6/23/2022
1.1.102.51394 438 6/15/2022
1.1.99.36719 449 6/14/2022
1.1.72.29765 473 5/31/2022
1.1.64.21380 475 5/26/2022
1.1.58.10097 469 5/23/2022
1.1.54.28879 465 5/23/2022
1.1.51.31918 478 5/20/2022
1.1.40 509 5/5/2022
1.1.3 486 4/15/2022
1.1.1 466 4/14/2022
1.0.300 475 3/31/2022
1.0.28-preview.114 123 3/25/2022
1.0.28-preview.113 111 3/25/2022
1.0.28-preview.103 106 3/21/2022
1.0.28-preview.100 107 3/19/2022
1.0.28-preview.99 119 3/18/2022
1.0.28-preview.98 103 3/18/2022
1.0.28-preview.94 122 3/15/2022
1.0.28-preview.93 110 3/15/2022
1.0.28-preview.86 124 3/8/2022
1.0.28-preview.77 121 2/27/2022
1.0.28-preview.75 109 2/26/2022
1.0.28-preview.65 120 2/18/2022
1.0.28-preview.63 109 2/16/2022
1.0.28-preview.61 117 2/12/2022
1.0.28-preview.58 112 2/10/2022
1.0.28-preview.53 110 2/9/2022
1.0.28-preview.48 135 2/4/2022
1.0.28-preview.42 129 1/31/2022
1.0.28-preview.41 125 1/31/2022
1.0.28-preview.29 122 1/28/2022
1.0.28-preview.22 121 1/27/2022
1.0.28-preview.20 126 1/27/2022
1.0.28-preview.19 124 1/27/2022
1.0.28-preview.18 126 1/27/2022
1.0.28-preview.5 127 1/24/2022
1.0.28-preview.3 122 1/21/2022
1.0.28-preview.1 121 1/21/2022
1.0.12 168 1/10/2022
1.0.2 342 12/23/2021
1.0.1 151 12/22/2021