nanoFramework.Iot.Device.Dhtxx 1.2.613

前缀已保留
dotnet add package nanoFramework.Iot.Device.Dhtxx --version 1.2.613                
NuGet\Install-Package nanoFramework.Iot.Device.Dhtxx -Version 1.2.613                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="nanoFramework.Iot.Device.Dhtxx" Version="1.2.613" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以便引用包。
paket add nanoFramework.Iot.Device.Dhtxx --version 1.2.613                
#r "nuget: nanoFramework.Iot.Device.Dhtxx, 1.2.613"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将此复制到交互工具或脚本的源代码中以引用包。
// Install nanoFramework.Iot.Device.Dhtxx as a Cake Addin
#addin nuget:?package=nanoFramework.Iot.Device.Dhtxx&version=1.2.613

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

DHT10/DHT11/DHT12/DHT21/DHT22 - 数字输出湿度 & 温度传感器模块

重要 此传感器对时间敏感。该实现仅在少数几款版上工作。请不要与 ESP32 一起使用。如果您正在使用 ESP32,并想要使用 1 线协议的任何 DHT,请使用 Dhtxx.Esp32 版本。

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

使用

1-Wire 协议

// 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");
    }
}

注意: 在带有任何DHT传感器的RPi上,1-Wire使用Raspian时工作正常,但使用Windows 10 IoT Core时则不行。设备需要在输入和输出之间切换1-Wire引脚。似乎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-Wire协议的GPIO。DHT12两者都支持。

我测量的数据是不正确的,湿度似乎正常,但温度总是奇怪,问题在哪里?

请检查您使用的是否是正确的传感器。参看页面顶部,检查您拥有的传感器类型。使用DHT11而不是DHT22将导致错误的温度。

我尝试每秒5次获取温度和湿度,但主要得到错误的数据,为什么?

这是绝对正常的,您应该在约每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.#}%");
}

我有Raspberry Pi 4,在创建DHT传感器时遇到异常。

请参阅此 问题 1145。我们正在积极尝试自动修复它。您必须强制使用 Raspberry Pi 3 驱动程序或 LibGpiodDriver。就是这样,您可以强制使用特定的驱动程序,在本例中是 Raspberry Pi 3,它将工作

GpioDriver driver = new RaspberryPi3Driver();
var controller = new GpioController(PinNumberingScheme.Logical, driver);
// This uses pin 4 in the logical schema so pin 7 in the physical schema
var dht = new Dht11(4, gpioController: controller);

我的使用单线协议的 DHT 传感器在装有 Windows 10 IoT Core 的 Raspberry Pi 上无法正常工作,我该怎么做?

在带有任意 DHT 传感器的 RPi 上,1-Wire 在 Raspian 上工作,但在 Windows 10 IoT Core 上不行。设备必须在不同时切换 1-wire 引脚的输入和输出状态。Windows IoT Core 操作系统似乎无法足够快速地切换引脚方向。有人建议使用两个引脚;一个用于输入,一个用于输出。这个解决方案尚未在这里实施,但以下是一些可能帮助设置这些链接的方便链接:

如果你的传感器是 I2C 传感器,它应该在 Windows 10 IoT Core 上完美工作。

DHTxx 示例

所需硬件

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

电路

单线协议电路

只需将您的 DHTxx 数据引脚连接到 GPIO26(物理引脚 37),地将地(物理引脚 6)连接到 +5V(物理引脚 2)。

schema

一些传感器已经配备了 10K 电阻。将 GPIO26 连接到 数据 引脚,其位置可能取决于集 InitializeComponent 。

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

请选择您希望测试和使用的传感器,输入编号。例如,如果您想测试 DHT22,则输入 5。

然后,系统会提示您输入逻辑电路中的引脚编号

Which pin do you want to use in the logical pin schema?

如果您想使用引脚 26,则键入 26 并按回车键。这将在 26 号引脚上创建一个连接到 DHT22 的传感器并开始测量。

请注意,前三四次测量可能不准确,这是完全正常的,这与传感器需要一些时间来预热并返回数据的事实有关。这些传感器非常灵敏,过长的电线、许多干扰和代码编译为调试会增加错误读数的数量。

结果

dht22 output

注意:读取此传感器是敏感的,如果您无法读取任何内容,请确保已正确连接电缆。另外,注意您将在 释放 模式下获得更好的结果。

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

NuGet 包

此包没有被任何 NuGet 包使用。

GitHub 仓库

此包没有被任何流行的 GitHub 仓库使用。

版本 下载 上次更新
1.2.613 56 8/9/2024
1.2.601 56 7/26/2024
1.2.590 71 7/17/2024
1.2.573 88 6/19/2024
1.2.570 82 6/14/2024
1.2.560 94 5/29/2024
1.2.548 102 5/15/2024
1.2.536 94 4/15/2024
1.2.514 104 3/22/2024
1.2.494 109 2/28/2024
1.2.474 124 1/24/2024
1.2.462 136 1/5/2024
1.2.458 124 12/20/2023
1.2.436 156 11/10/2023
1.2.416 86 11/8/2023
1.2.403 125 10/6/2023
1.2.396 107 9/27/2023
1.2.384 127 9/6/2023
1.2.378 126 8/16/2023
1.2.369 148 8/2/2023
1.2.363 129 7/28/2023
1.2.357 133 7/19/2023
1.2.354 132 7/14/2023
1.2.345 134 6/21/2023
1.2.341 119 6/14/2023
1.2.337 133 6/7/2023
1.2.335 138 6/2/2023
1.2.329 126 5/26/2023
1.2.316 133 5/16/2023
1.2.313 129 5/12/2023
1.2.302 126 5/10/2023
1.2.297 128 5/3/2023
1.2.273 266 3/17/2023
1.2.267 219 3/10/2023
1.2.263 240 3/8/2023
1.2.259 236 2/27/2023
1.2.256 221 2/24/2023
1.2.253 246 2/22/2023
1.2.222 317 1/9/2023
1.2.217 309 1/6/2023
1.2.208 303 1/3/2023
1.2.203 298 12/28/2022
1.2.159 366 11/14/2022
1.2.153 359 11/5/2022
1.2.141 398 10/25/2022
1.2.128 384 10/22/2022
1.2.122 427 10/12/2022
1.2.114 414 10/8/2022
1.2.95 445 9/22/2022
1.2.87 514 9/15/2022
1.2.73 419 9/8/2022
1.2.63 413 9/3/2022
1.2.47 447 8/15/2022
1.2.40 445 8/6/2022
1.2.38 423 8/5/2022
1.2.28 423 8/1/2022
1.2.13 446 7/24/2022
1.2.10 443 7/23/2022
1.1.142.3202 465 7/7/2022
1.1.133.52556 434 6/30/2022
1.1.121.35854 430 6/26/2022
1.1.116.8772 444 6/24/2022
1.1.113.2032 427 6/23/2022
1.1.102.51394 441 6/15/2022
1.1.99.36719 429 6/14/2022
1.1.72.29765 425 5/31/2022
1.1.64.21380 423 5/26/2022
1.1.58.10097 433 5/23/2022
1.1.54.28879 444 5/23/2022
1.1.40 487 5/5/2022
1.1.3 472 4/15/2022
1.1.1 437 4/14/2022
1.0.300 445 3/31/2022
1.0.288-preview.114 123 3/25/2022
1.0.288-preview.113 109 3/25/2022
1.0.288-preview.103 98 3/21/2022
1.0.288-preview.100 112 3/19/2022
1.0.288-preview.99 114 3/18/2022
1.0.288-preview.98 108 3/18/2022
1.0.288-preview.94 114 3/15/2022
1.0.288-preview.93 109 3/15/2022
1.0.288-preview.87 115 3/10/2022
1.0.288-preview.86 111 3/8/2022
1.0.288-preview.77 115 2/27/2022
1.0.288-preview.75 108 2/26/2022
1.0.288-preview.65 113 2/18/2022
1.0.288-preview.63 112 2/16/2022
1.0.288-preview.61 116 2/12/2022
1.0.288-preview.58 109 2/10/2022
1.0.288-preview.53 101 2/9/2022
1.0.288-preview.48 130 2/4/2022
1.0.288-preview.41 123 1/31/2022
1.0.288-preview.29 121 1/28/2022
1.0.288-preview.20 136 1/27/2022
1.0.288-preview.19 134 1/27/2022
1.0.288-preview.18 125 1/27/2022
1.0.288-preview.5 129 1/24/2022
1.0.288-preview.3 116 1/21/2022
1.0.288-preview.1 123 1/21/2022
1.0.272 167 1/10/2022
1.0.261 307 12/22/2021
1.0.259 319 12/9/2021
1.0.258 304 12/7/2021
1.0.155 359 8/31/2021
1.0.143 235 7/21/2021
1.0.91 181 5/27/2021