树莓派紧凑型 DHT 温湿度扩展板:ATtiny85 + DHT22/DHT11
硬件组件: Atmel ATTiny85 × 1、DHT22 温度传感器 × 1、DHT11 温湿度传感器 × 1、SparkFun Tiny AVR 编程器 × 1、Adafruit 4.7K Ω 电阻 × 3、Adafruit 10K Ω 电阻 × 1、Adafruit 100 Ω 电阻 × 1、Adafruit 散射蓝 3mm LED × 1、Adafruit 轻触按键开关 × 1、Adafruit 可拆 0.1″ 36-pin 排针 1 件 @ 长度 6、1 件 @ 长度 2 (共 8 pin) × 1、通用跳线 (0.1″) × 1、Arduino UNO & Genuino UNO 可选 – 用于调试测试 × 1
软件应用与在线服务: Microsoft Visual Studio 2015、Microsoft Windows 10 IoT Core、Arduino IDE
项目背景
简介
DHT11 与 DHT22 因低成本高精度广受欢迎。但它们采用专有单总线协议,要求极严格的时序。在非实时操作系统的板子上读取这些传感器一直很困难。
早前我发文《DHT11/DHT22 温度传感器》演示如何用 Microsoft C++ 样例代码从 C# 读取。该库能读数但需加重试逻辑提升可靠性。对大多数人有效,但仍有人难以稳定工作。
鉴于在运行 Windows 10 IoT Core 的树莓派上使用这类传感器的高关注度,我决定提供第二种方案:极低成本前提下极大提升读取可靠性。
方案概述
本方案将 DHT 传感器接到廉价 ATtiny85,配置为 I2C 从设备。利用 TinyWireS 库创建一组寄存器,通过读写寄存器与设备交互。
设备支持功能:
- 可配置读取间隔,指定读取 DHT 频率。默认每 2 秒读取一次。
- 手动模式:禁用间隔,按需触发单次读取。
- 可配置温度上下阈值,读数超限时触发中断引脚。
- 配置保存模式:上电或复位后自动恢复设置。
- 配置复位:恢复默认值。
- 传感器供电控制:可启停供电以省电。
- 可编程 I2C 设备地址,默认 0x26,可通过命令修改并掉电保持。复位后回归 0x26。C# 库含 I2C 总线扫描代码,无需知晓地址即可连接。
- 可编程 DHT 型号选择。固件默认 DHT22,可通过命令切换型号,掉电保持。
源代码组成
项目包含三套代码:主控板固件、Arduino 主机测试草图、Windows 10 IoT Core 树莓派演示应用。所有代码在关联 GitHub 仓库获取。
电路设计
电路紧凑,仅用少量廉价元件。ATtiny85 多渠道可买,建议多备几片以备他用。
电路提供六针排针,可接其他电路或直连树莓派。引脚定义:
- GND → 接电路地或树莓派地引脚。
- RST → 复位/重启引脚。正常工作接 5V。需复位时给予瞬时低电平脉冲。
- INT → 双用途。阈值启用时,超阈值输出高电平,否则低电平。省电模式下,给予瞬时高电平脉冲唤醒设备。
- SDA → I2C SDA 线。
- SCL → I2C SCL 线。
- 5V → 5V 电源输入。
另有一两针排针,接跳线帽启用板载 LED,移除则禁用。
集成到大型项目时,DHT Tiny 电路可合并嵌入现有电路,此时排针与 LED 可选。
也可做成独立小板,用几根导线或连接线连树莓派。
ATtiny85 烧录
用 AVR 编程器烧录 DHT_Tiny_Breakout.ino。无编程器可用 Arduino Uno 等替代。参考下列文章:
- Programming ATtiny85 with Arduino Uno on Hackster.io
- Virtual Workshop: Program an ATTiny85 with Arduino
- Programming an ATtiny w/ Arduino 1.6 (or 1.0)
- Programming an ATtiny w/ Arduino 0022
我用 SparkFun Tiny AVR Programmer 烧录。
我将芯片跑在 16 MHz。见拙作 “ATtiny @ 16MHz” 设置方法。
使用 ATtiny85 时,从机草图需安装 TinyWireS 库到 libraries 目录。可从 https://github.com/rambo/TinyWire 下载。
面包板搭建
第一步在面包板上跑通 DHT Tiny。用半尺寸面包板按原理图与面包板图接线。
小贴士:
- DHT Tiny 单独用一块面包板,另一块板连接 DHT Tiny 与 Uno 或树莓派。
- 建议用排针,方便将 DHT Tiny 作为整体拔插。
- 用标准可拆公排针时,需用尖嘴钳将黑色塑料边调至针脚中间以适配面包板孔距。
- 若有加长 0.1″ 公排针,面包板用加长款;PCB 焊接请用标准长度,加长不推荐上板。
- 面包板用排针需公对母跳线;无排针可直接公对公跳线连两板。
- 导线尽量远离芯片,方便拔芯片烧录。
下图为面包板版 DHT Tiny 实物图。
连接 Arduino Uno 测试
若想快速测试、演示或树莓派调试不通,可将 DHT Tiny 接 Arduino Uno:
- GND → Uno GND
- 5V → Uno 5V
- RST → Uno D4
- SDA → Uno A4
- SCL → Uno A5
- INT → Uno D3 并接上跳线帽启用 LED
烧录并运行 DHT_Tiny_Master.ino,串口监视器将显示输出。
I2C 连接两板间必须有上拉电阻。本电路在 SDA、SCL 与 5V 间各接 4.7K Ω。
下图为 DHT Tiny 面包板接 Arduino Uno 实物。
连接树莓派
树莓派 2/3 接线:
- GND → 树莓派 GND (引脚 9)
- 5V → 树莓派 5V (引脚 2)
- RST → GPIO4 (引脚 7)
- SDA → SDA (引脚 3)
- SCL → SCL (引脚 5)
- INT → GPIO17 (引脚 11) 并启用 LED
I2C 总线 SDA/SCL 需上拉电阻至 3V3。本电路在引脚与 3V3 间各接 4.7K Ω。
极其重要! DHT Tiny 板由树莓派 5V 引脚供电,但上拉电阻必须接树莓派 3V3 引脚(3V3 在引脚 1 和 17)。
下图为 DHT Tiny 面包板接树莓派 3 实物。
运行 Windows 10 应用
从 GitHub 仓库链接获取代码解压。用 Visual Studio 2015 打开通用应用源码,部署到树莓派从管理员控制台启动,或在 VS 中调试运行。
首次用 VS 跑 Windows 10 IoT Core 应用,参考微软文档:
- Deploying an App with Visual Studio
- Windows Device Portal
观看下方视频演示树莓派 3 运行应用连接 DHT Tiny。
应用亮点
Windows 10 UWP 演示应用展示 DHT Tiny 所有功能:显示当前温度、湿度及其他寄存器值;UI 提供修改设备地址等配置项。
DHT Tiny 库
示例代码使用封装库与 DHT Tiny 交互,可直接引入你的所有应用。
从 NuGet 获取库
不想引入项目可直接 NuGet 安装:
PM> Install-Package IoT.DhtTiny
扫描 I2C 总线查找设备
DHT Tiny 库含扫描方法,搜索总线上所有 DHT Tiny 设备并返回地址列表,便于初始化。若修改过地址但忘记设值,此功能尤为有用。回调方法可选。
// ***
// *** 枚举 I2C 总线上所有 DHT Tiny 设备
// ***
IEnumerable<byte> 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("Locating devices [0x{0:X2}] [{1}%] [Found = {2:##0}]...", e.CurrentAddress, percentComplete, e.Items.Count());
}
DHT Tiny 树莓派扩展板原理图
软件演示
视频演示树莓派 3 运行通用应用连接面包板上 DHT Tiny。
[视频即将推出]
制作成品设备
最简易、最具性价比的做法是用 Adafruit Perma-Proto Quarter-sized Breadboard PCB 等原型板。下图展示该原型板制作的扩展板,我用角磨机去掉了电源轨区域。
更多详情:DHT Tiny Breakout for the Raspberry Pi
制造工艺
- 树莓派专业温度监测:基于 DS18B20 传感器的完整指南
- 树莓派 2 搭建户外气象站:接入 ADS‑WS1 串口气象站
- 树莓派无原生 ADC 读取模拟传感器:阶跃响应法实战
- 树莓派连接 HC-SR04 超声波传感器实战指南
- 解锁树莓派全部潜力的必备配件推荐
- 树莓派用 MCP3008 ADC 读取模拟传感器:LDR 与 TMP36 实例
- SIGHT:助盲智能眼镜 — 树莓派 + TensorFlow + Android Things
- SparkFun Qwiic HAT 树莓派完整接线指南
- 树莓派 3 Model B+ 安装 Windows 10 IoT Core 完整步骤指南
- MonkMakes RRB2套件构建树莓派机器人:详细指南
- PiCy:打造您的微型树莓派机器人
- 医疗器械OEM数字化转型面临的四大核心挑战