news 2026/5/14 21:48:41

告别DHT11!用3.5元的AHT10和STC8单片机,做个更小巧的桌面温湿度计(附完整源码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别DHT11!用3.5元的AHT10和STC8单片机,做个更小巧的桌面温湿度计(附完整源码)

3.5元AHT10温湿度传感器实战:用STC8打造迷你桌面环境监测仪

在智能家居和创客项目中,温湿度传感器一直是基础但关键的组件。传统DHT11虽然价格低廉,但其较大的体积和相对落后的性能指标,越来越难以满足现代小型化设备的需求。今天我们要介绍的AHT10传感器,不仅价格低至3.5元,体积更是缩小了60%,精度却提升了一个数量级。

1. 为什么选择AHT10替代DHT11?

1.1 参数对比:小身材大能量

让我们先看一组关键数据对比:

参数DHT11AHT10提升幅度
温度精度±2℃±0.3℃566%
湿度精度±5%RH±2%RH150%
响应时间2秒8秒-75%
工作电压3-5.5V2.2-5.5V-
尺寸(mm)15.5×12×5.53×3×1.0体积减少85%
接口类型单总线I2C-
典型价格4元3.5元12.5%

从表格可以看出,AHT10在几乎所有关键指标上都碾压DHT11,特别是体积和精度这两个对现代电子设备至关重要的参数。唯一的不足是响应时间稍长,但对于大多数环境监测应用来说,8秒的间隔完全在可接受范围内。

1.2 实际应用场景优势

AHT10的微型化设计带来了几个实际优势:

  • PCB布局更灵活:3mm×3mm的尺寸可以轻松塞入任何角落
  • 低功耗设计:2.2V的最低工作电压更适合电池供电设备
  • 数字接口:I2C总线节省GPIO资源,简化布线
  • 表面贴装:可直接焊接在PCB上,无需额外的连接器

注意:AHT10的I2C地址固定为0x38,无法修改,这意味着在同一I2C总线上不能挂载其他设备。这是选择AHT10时需要特别注意的设计约束。

2. 硬件设计与连接

2.1 元器件清单

制作这个迷你温湿度计需要以下材料:

  • STC8A8K64S4A12单片机(或其他STC8系列)
  • AHT10温湿度传感器模块
  • 0.96寸OLED显示屏(I2C接口)
  • 10kΩ电阻×2(I2C上拉)
  • 100nF电容×2(电源滤波)
  • 微型按键×1(功能切换)
  • 3.7V锂电池(可选)
  • 充电管理模块(可选)

总成本可以控制在20元以内,如果使用开发板而非最小系统,成本会略高但开发更方便。

2.2 电路连接示意图

// 硬件连接示意代码 #define I2C_SCL P1_5 // STC8的I2C时钟线 #define I2C_SDA P1_4 // STC8的I2C数据线 // AHT10连接方式 // VCC -> 3.3V // GND -> GND // SCL -> P1.5 (需接10k上拉电阻) // SDA -> P1.4 (需接10k上拉电阻) // OLED连接方式 // 由于AHT10独占I2C总线,OLED需要连接到另一组I2C接口 // 或者使用软件I2C模拟

对于STC8单片机,如果硬件I2C被AHT10占用,我们可以用任意两个GPIO口模拟I2C驱动OLED。这种方案虽然会占用更多CPU资源,但解决了总线冲突问题。

3. 软件实现与驱动开发

3.1 AHT10驱动移植

AHT10的驱动相对简单,主要需要实现以下几个功能:

  1. 传感器初始化
  2. 触发测量
  3. 读取数据
  4. 数据转换

以下是核心驱动代码片段:

// AHT10初始化 void AHT10_Init() { I2C_Start(); I2C_SendByte(0x38 << 1); // 器件地址+写 I2C_SendByte(0xE1); // 初始化命令 I2C_SendByte(0x08); // 校准使能 I2C_SendByte(0x00); // 保留 I2C_Stop(); Delay_ms(300); // 等待校准完成 } // 读取温湿度数据 void AHT10_Read(float *temp, float *humi) { uint8_t buf[6]; // 触发测量 I2C_Start(); I2C_SendByte(0x38 << 1); I2C_SendByte(0xAC); I2C_SendByte(0x33); I2C_SendByte(0x00); I2C_Stop(); // 等待测量完成 Delay_ms(80); // 读取数据 I2C_Start(); I2C_SendByte((0x38 << 1) | 1); for(int i=0; i<5; i++) buf[i] = I2C_RecvByte(); I2C_Stop(); // 数据转换 uint32_t humi_raw = ((uint32_t)buf[1] << 12) | ((uint32_t)buf[2] << 4) | (buf[3] >> 4); uint32_t temp_raw = (((uint32_t)buf[3] & 0x0F) << 16) | ((uint32_t)buf[4] << 8) | buf[5]; *humi = (float)humi_raw * 100 / 0x100000; *temp = (float)temp_raw * 200 / 0x100000 - 50; }

3.2 数据平滑处理

由于环境温湿度通常不会突变,我们可以对采样数据进行平滑处理,使显示更加稳定:

#define SAMPLE_SIZE 5 float temp_history[SAMPLE_SIZE]; float humi_history[SAMPLE_SIZE]; uint8_t sample_index = 0; void Smooth_Data(float temp, float humi) { temp_history[sample_index] = temp; humi_history[sample_index] = humi; sample_index = (sample_index + 1) % SAMPLE_SIZE; float temp_sum = 0, humi_sum = 0; for(int i=0; i<SAMPLE_SIZE; i++) { temp_sum += temp_history[i]; humi_sum += humi_history[i]; } current_temp = temp_sum / SAMPLE_SIZE; current_humi = humi_sum / SAMPLE_SIZE; }

4. 系统优化与功能扩展

4.1 低功耗设计

如果使用电池供电,我们可以通过以下方式优化功耗:

  1. 调整采样频率:将默认的1秒采样改为30秒或更长
  2. 睡眠模式:在采样间隔让MCU进入空闲或掉电模式
  3. 显示控制:添加光感或运动传感器,无人时关闭显示
  4. 电压监测:检测电池电压,低电量时提醒充电

4.2 外壳设计与安装

考虑到AHT10的超小尺寸,我们可以设计非常迷你的外壳:

  • 3D打印方案:设计一个硬币大小的圆形外壳
  • 现成改造:利用小型药盒或纽扣电池盒
  • 磁吸安装:在外壳背面添加磁铁,方便吸附在金属表面
  • 桌面支架:用曲别针或乐高积木制作简易支架

4.3 数据记录与上传

通过简单的功能扩展,可以实现更多实用功能:

// 伪代码示例:数据记录功能 void Data_Logger() { static uint32_t record_time = 0; if(Get_Tick() - record_time > 3600000) { // 每小时记录一次 Save_To_SD(current_temp, current_humi); record_time = Get_Tick(); } }

如果需要联网功能,可以搭配ESP-01S WiFi模块,将数据上传到物联网平台或私人服务器。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 21:46:25

Spring Boot 事件监听器深度实践:从进程内解耦到生产级事件驱动架构

Spring Boot 事件监听器深度实践:从进程内解耦到生产级事件驱动架构 摘要:很多团队都用过 Spring Boot 的 @EventListener,但多数停留在“发个事件、解个耦”的入门层。真正到了生产环境,问题马上出现:事务边界不清、异步线程池打满、监听器异常丢失、事件重复消费、跨服务…

作者头像 李华
网站建设 2026/5/14 21:46:11

别再到处找模型了!手把手教你为Ngspice配置ADI/TI等厂商的官方SPICE库

别再到处找模型了&#xff01;手把手教你为Ngspice配置ADI/TI等厂商的官方SPICE库 刚接触电路仿真的工程师常陷入一个怪圈&#xff1a;明明选好了仿真工具&#xff0c;却在模型获取上耗费大量时间。当你兴奋地打开Ngspice准备验证设计时&#xff0c;突然发现——器件模型去哪找…

作者头像 李华
网站建设 2026/5/14 21:45:21

EncodingChecker:从编码混乱到项目统一的三步解决方案

EncodingChecker&#xff1a;从编码混乱到项目统一的三步解决方案 【免费下载链接】EncodingChecker A GUI tool that allows you to validate the text encoding of one or more files. Modified from https://encodingchecker.codeplex.com/ 项目地址: https://gitcode.com…

作者头像 李华
网站建设 2026/5/14 21:44:14

JS如何获取元素高度

在前端开发中&#xff0c;获取元素高度是最基础也是最常用的操作之一。本文将详细介绍 原生JavaScript 和 jQuery 中获取元素高度的各种方法&#xff0c;帮你彻底搞懂它们的区别&#xff01; &#x1f4d6; 目录 原生JavaScript获取高度jQuery获取高度各方法对比实际应用场景常…

作者头像 李华
网站建设 2026/5/14 21:44:13

从单镜识别到全域联动:跨镜追踪开启视频孪生管控新纪元

从单镜识别到全域联动&#xff1a;跨镜追踪开启视频孪生管控新纪元视频孪生作为数字孪生核心落地形态&#xff0c;历经技术迭代与场景深耕&#xff0c;已成为城市治理、园区运营、口岸管控、工业安防等大尺度场景智能化管控的核心载体。传统视频孪生体系&#xff0c;长期停留在…

作者头像 李华