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
<PackageReference Include="nanoFramework.Iot.Device.Dhtxx.Esp32" Version="1.2.613" />
paket add nanoFramework.Iot.Device.Dhtxx.Esp32 --version 1.2.613
#r "nuget: nanoFramework.Iot.Device.Dhtxx.Esp32, 1.2.613"
// 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 | |
---|---|---|---|---|---|
图片 | |||||
温度范围 | -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 |
- DHT10 数据表(目前只有中文)
- DHT11 数据表
- DHT12 数据表
- DHT21 数据表
- DHT22 数据表
使用方法
单总线协议
// 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操作系统无法快速切换引脚方向。有人建议使用两个引脚;一个用于输入,另一个用于输出。这里尚未实现此方案,但以下是一些有帮助的链接,可以帮助设置:
- https://github.com/ms-iot/samples/tree/develop/GpioOneWire
- 在Hackster.io上: https://www.hackster.io/porrey/go-native-c-with-the-dht22-a8e8eb
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。
一些传感器已配备10K电阻进行销售。将GPIO12和GPIO14连接到数据引脚,其位置取决于积分器。
I2C协议电路
- 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号引脚,则调整pinEcho
和pinTrigger
变量。这样就会创建一个连接在26号引脚上的DHT22传感器并开始测量。
请注意,前几次测量可能不会正确,这是完全正常的,与传感器需要一段时间以获得数据的事实有关。这些传感器非常敏感,过长的线缆、许多干扰以及代码编译时打开调试将增加错误读数的数量。
结果
注意:读取此传感器很敏感,如果您什么也读不到,请确保已正确接线。还要注意,以发布
模式运行时将获得更好的结果。
-
- nanoFramework.CoreLibrary (>= 1.15.5)
- nanoFramework.Hardware.Esp32.Rmt (>= 2.0.13)
- nanoFramework.Runtime.Events (>= 1.11.18)
- nanoFramework.Runtime.Native (>= 1.6.12)
- nanoFramework.System.Device.Gpio (>= 1.1.41)
- nanoFramework.System.Device.I2c (>= 1.1.16)
- nanoFramework.System.Device.Model (>= 1.2.586)
- nanoFramework.System.Diagnostics.Stopwatch (>= 1.2.586)
- nanoFramework.System.Math (>= 1.5.43)
- UnitsNet.nanoFramework.RelativeHumidity (>= 5.56.0)
- UnitsNet.nanoFramework.Temperature (>= 5.56.0)
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 |