树莓派的 DHT Tiny Breakout
硬件组件: Atmel ATTiny85×1DHT22 温度传感器×1DHT11 温湿度传感器×1SparkFun Tiny AVR 编程器×1Adafruit 4.7K Ω 电阻器×3Adafruit 10K Ω 电阻器×1Adafruit 100 Ω 电阻器×1Adafruit 漫射蓝色开关dafruit T×0A 按钮1Adafruit Breaway 1×0A ″ 36 针条形公头 1 件@长度 6,1 件@长度 2(共 8 针)×1Generic Jumper (0.1″)×1Arduino UNO &Genuino UNOOptional – 用于调试和测试。×1软件应用和在线服务: Microsoft Visual Studio 2015Microsoft Windows 10 IoT CoreArduino IDE
故事
简介
DHT11 和 DHT22 是流行的温度和湿度传感器,因为它们的精度和成本非常低。但是,它们的一个问题是它们通过需要精确计时的专有单线协议工作。事实证明,这些传感器很难在装有非实时操作系统的板上读取。
不久前,我发表了一篇题为“DHT11 /DHT22 温度传感器的文章 ”演示如何使用来自 C# 的 Microsoft C++ 示例代码来读取这些传感器。该库能够获得读数,但我必须添加重试逻辑以使其更可靠。事实证明,这对大多数人来说是成功的,但有些人在让它持续工作时遇到了问题。
鉴于在运行 Windows 10 IoT Core 的同时在 Raspberry Pi 上使用这些传感器的兴趣程度,我决定创建第二个选项,提供一种非常可靠的方法来读取这些传感器,同时仍然保持低成本。
概览
这里介绍的方法是将 DHT 传感器连接到便宜的 ATtiny85 并将其设置为 I2C 从设备。这是通过使用 TinyWireS 库并创建一组可以读取和写入以与设备交互的寄存器来实现的。
设备支持以下功能:
- 可配置的读取间隔,用于指定读取 DHT 传感器的频率。默认为每 2 秒读取一次。
- 禁用间隔并按需读取读数的手动模式。
- 一个可配置的上下温度阈值,当当前温度读数高于或低于阈值时,将触发中断引脚。
- 配置保存模式,允许在开机或重置后恢复配置的设置。
- 配置重置允许将保存的配置重置为默认值。
- 传感器电源控制,允许启用和禁用传感器的电源以节省电量。
- 可编程 i2c 设备地址。此设备的默认地址为 0x26,但可以通过命令更改。设备会记住地址。如果复位,地址将返回到 0x26。 C# 库还包含用于在 i2c 总线上搜索设备的代码,因此您无需知道要连接的地址。
- 可编程 DHT 模型选择。固件默认为 DHT22,但可以通过向设备发送命令以使用不同型号来更改。模型会被保存,以便在每次重新启动或重新启动后,它会保留要使用的模型类型。
源代码
本项目共有三组代码。电路板的主要固件,一个 Arduino 主草图,用于在连接到 Arduino Uno 时测试和演示电路板,以及演示如何使用来自 Raspberry Pi 的设备的 Window 10 IoT 代码应用程序。所有代码都可以在链接的 GitHub 存储库中找到。
设备/电路
该电路很小,只使用了几个便宜的元件。 ATtiny85 可以从多个供应商处购买。我建议选择其中的一些,因为它们有很多有用的用途。
该电路有一个六针接头,可以将其连接到另一个电路或直接连接到 Raspberry Pi。引脚定义如下:
- 接地 -> 将此连接到电路上的接地或 Raspberry Pi 上的接地引脚。
- RST -> 此引脚用于重置或重新启动设备。在正常操作下,该引脚应连接到 5V。要重置设备,请在此引脚上触发一个瞬时低电平脉冲。
- INT -> 该引脚有两个用途。当阈值启用时,只要超过阈值,该引脚就会为高电平,否则为低电平。使用省电模式时,此引脚用于通过触发瞬时高脉冲来唤醒设备。
- SDA -> I2C SDA 线。
- SCL -> I2C SCL 线。
- 5V -> 5V电源。
还有一个两针接头,可以添加跳线以启用或移除以禁用板载 LED。
在更大的项目中使用它时,DHT Tiny 的电路可以合并或嵌入到项目现有电路中。在这种情况下,接头引脚和 LED 是可选的。
该电路也可以构建在单独的板上,并通过几根电线或连接电缆连接到您的 Raspberry Pi。
编写 ATtiny85
加载名为 DHT_Tiny_Breakout.ino 的草图 使用 AVR 编程器连接到 ATtiny85。如果您没有程序员,您可以使用 Arduino Uno(或类似板)。查看下面列出的一篇或多篇文章以获得帮助。
- 使用 Arduino Uno 对 ATtiny85 进行编程 在 Hackster.io 上
- 虚拟研讨会:使用 Arduino 编写 ATTiny85
- 使用 Arduino 1.6(或 1.0)编写 ATtiny
- 使用 Arduino 0022 对 ATtiny 进行编程
我使用 SparkFun Tiny AVR Programmer 加载我的 ATtiny85。
我正在以 16 MHz 的频率运行我的芯片。请参阅我的文章“ATtiny @ 16MHz ”以获取有关如何执行此操作的说明。
<块引用>使用 ATtiny85 时,从草图需要 TinyWireS 要安装在您的库文件夹中的库。这个库可以从 https://github.com/rambo/TinyWire 下载。
面包板电路
第一步是在面包板上启动并运行 DHT Tiny。按照项目中包含的原理图和面包板图,使用半尺寸面包板构建电路。
以下是一些有助于简化操作的提示:
- 在面包板上构建 DHT Tiny,然后使用另一个面包板连接 DHT Tiny 和 Uno 或 Raspberry Pi。
- 建议使用接头针脚,因为这样可以更轻松地将 DHT Tiny 作为一个单元进行连接和断开连接。
- 如果您打算在面包板上使用标准的分离式公接头,您需要将黑色塑料边缘调整到引脚的中心,使其适合面包板(见下图)。使用尖嘴钳进行调整。
- 如果您有超长分离式 0.1 英寸公接头,请在面包板上使用这些接头。如果您打算将组件焊接到 PCB 上,请坚持使用正常尺寸的接头。不建议将超长用于 PCB。
- 如果您使用面包板上的接头针脚,则需要母-母跳线。如果您没有这些,请省略插头引脚并在两块板之间使用公-公跳线。
- 尽可能使电线远离芯片,以便更轻松地将手指伸入并拉出芯片进行编程。
下面是我的 DHT Tiny 面包板版本的一些图片。
连接Arduino Uno
如果您对快速测试、演示感兴趣,或者无法将其与 Raspberry Pi 配合使用,您可以将 DHT Tiny 连接到 Arduino Uno(或类似设备)。
- 连接GND 引脚到 GND 在 Uno。
- 连接5V 引脚到 5V 在 Uno。
- 连接RST 固定到 D4 在 Uno 上。
- 连接 SDA 固定到 A4 在 Uno 上。
- 连接SCL 固定到 A5 在 Uno 上。
- 连接INT 固定到 D3 并通过跳线启用 LED。
加载并运行名为 DHT_Tiny_Master.ino 的草图 .此草图将在 串行监视器 中显示输出 .
在两块板之间连接 I2C 时,重要的是在 SDA 和 SCL 线上有上拉电阻。在这个电路中,有两个 4.7K Ω 连接在管脚和 5V 之间。
以下是连接到 Arduino Uno 的 DHT Tiny 面包板的一些图片。
连接到树莓派
如果您对快速测试、演示感兴趣,或者无法将其与 Raspberry Pi 配合使用,您可以将 DHT Tiny 连接到 Arduino Uno(或类似设备)。
- 连接GND 引脚到 GND (引脚 9)在 Raspberry Pi 2/3 上。
- 连接5V 引脚到 5V (引脚 2)在 Raspberry Pi 2/3 上。
- 连接RST 固定到 GPIO4 (引脚 7)在 Raspberry Pi 2/3 上。
- 连接 SDA 固定到 SDA (引脚 3)在 Raspberry Pi 2/3 上。
- 连接SCL 固定到 SCL (引脚 5)在 Raspberry Pi 2/3 上。
- 连接INT 引脚到GPIO17 (引脚 11)并启用 LED。
在两块板之间连接 I2C 时,重要的是在 SDA 和 SCL 线上有上拉电阻。在这个电路中,有两个4.7K Ω连接在管脚和3V3之间。
<块引用>非常重要! DHT Tiny 板将由 Raspberry Pi 上的 5V 引脚供电,但上拉电阻必须连接到 Raspberry Pi 上的 3V3 引脚(3V3 位于引脚 1 和 17)。
下面是连接到 Raspberry Pi 3 的 DHT Tiny 面包板的一些图片。
运行 Windows 10 应用程序
从项目底部的 GitHub 存储库链接中获取代码并将其解压缩到您的计算机。在 Visual Studio 2015 中打开通用应用程序源代码,然后将其部署到 Raspberry Pi 并从管理控制台启动,或者在 Visual Studio 中以调试模式运行。
如果这是您第一次为 Windows 10 IoT Core 应用程序从 Visual Studio 运行代码,请查看 Microsoft 的这些文章:
- 使用 Visual Studio 部署应用
- Windows 设备门户
观看下面的视频演示,了解在连接到 DHT Tiny 的情况下在 Raspberry Pi 3 上运行的应用程序。
应用亮点
Windows 10 UWP 应用程序是一个演示应用程序,展示了 DHT Tiny 的所有功能。该代码将显示设备的当前温度、湿度和其他寄存器值。 UI 还提供了一种更改设备配置(包括设备地址)的方法。
DHT 微型图书馆
示例代码使用为与 DHT Tiny 交互而编写的库。该库随时可用,可以直接包含在您的所有应用程序中。
从 NuGet 获取库
如果您不想将项目直接包含在您的应用程序中,只需使用下面显示的命令从 NuGet 下载 DHT Tiny 库。在 Visual Studio 中打开包管理器控制台并键入命令。
PM> Install-Package IoT.DhtTiny
为设备扫描 i2c 总线
DHT Tiny 库包含一个方法,该方法将在 i2c 总线上搜索任何 DHT Tiny 设备并返回地址列表。此列表可用于初始化一个或多个找到的设备。这在您更改了设备地址但不记得您设置的地址时特别有用。注意回调方法是可选的。
// ***// *** 枚举 i2c 总线上的 DHT Tiny 设备。// ***IEnumerable address =await DhtTiny.FindAllDhtTinyAsync(this. FindAllDhtTinyCallback);// ***// *** 回调方法// ***private void FindAllDhtTinyCallback(I2cScanEventArgs e) { int percentComplete =(int)((double)e.CurrentIndex / (double)e.Total * 100.0d); this.Status =string.Format("定位设备 [0x{0:X2}] [{1}%] [Found ={2:##0}]...", e.CurrentAddress, percentComplete, e.Items .Count());}
树莓派 DHT Tiny Breakout 示意图
软件演示
该视频演示了在连接到面包板上 DHT Tiny 的 Raspberry Pi 3 上运行的通用应用程序。
[视频即将推出]
创建最终设备
创建电路板的最简单、最具成本效益的方法是使用 PCB 原型板,例如来自 Adafruit 的 Perma-Proto Quarter-sized Breadboard PCB。下图显示了使用该原型板的突破。注意我用dremel取下电路板的电源导轨部分。
查看更多:树莓派的 DHT 小突破
制造工艺
- Raspberry Pi 上的温度监控
- Raspberry Pi 2 气象站
- Raspberry Pi 上没有模拟输入的模拟传感器
- 树莓派上的 HC-SR04 超声波距离传感器
- Raspberry Pi 的最佳配件
- 使用 MCP3008 的 Raspberry Pi 上的模拟传感器
- SIGHT:For the Blind
- Qwiic HAT for Raspberry Pi 连接指南
- Windows 10 IoT Core for Raspberry Pi 3 Model B+
- 构建 MonkMakes Raspberry Pi 机器人套件
- PiCy – 微型树莓派动力机器人!
- 医疗器械 OEM 面临的 4 大挑战