基于ColorEasyDuino与DHT11的单总线温湿度监测系统实现

发布时间:2026/6/9 20:29:11

基于ColorEasyDuino与DHT11的单总线温湿度监测系统实现 基于ColorEasyDuino与DHT11的单总线温湿度监测系统实现最近有不少刚开始玩单片机的朋友问我想做个简单的环境监测小项目比如看看房间的温湿度该从哪入手我第一个想到的就是DHT11传感器因为它便宜、稳定而且接线简单特别适合新手。今天我就手把手带大家用ColorEasyDuino这块开发板把DHT11用起来实现一个完整的温湿度监测系统。咱们这个教程的目标很明确你不需要任何单片机基础只要跟着我的步骤走就能让开发板成功读取到温度和湿度数据并在电脑上显示出来。整个过程会涵盖硬件连接、软件库安装、代码编写和结果验证让你彻底搞懂这个“单总线”传感器是怎么工作的。1. 认识我们的“主角”DHT11温湿度传感器在动手接线之前咱们先花几分钟了解一下DHT11这个小模块。知道它在干什么后面的代码理解起来就容易多了。DHT11是一个数字温湿度复合传感器。简单说它内部集成了一个测量湿度的元件和一个测量温度的元件通常是一个热敏电阻还自带了一个小小的芯片负责把测量到的模拟信号转换成数字信号。所以我们单片机拿到手的就是直接可以用的数字省去了我们自己设计放大电路和做模数转换的麻烦。它最大的特点就是采用“单总线”协议通信。什么叫单总线顾名思义就是只用一根数据线来完成数据的发送和接收。这根线既要负责单片机给传感器发启动信号又要负责传感器把温湿度数据传回给单片机。这种方式极大地节省了单片机宝贵的IO引脚资源在引脚紧张的项目里特别有用。根据资料DHT11有几个关键参数需要记住工作电压3.3V到5.5V都可以。我们的ColorEasyDuino开发板上有5V和3.3V输出接哪个都行通常接5V信号更稳定。工作电流最大1mA非常省电。测量分辨率湿度是整数百分比温度是整数摄氏度。对于日常环境监测完全够用。引脚只有3个。VCC电源正极、GND电源负极、DATA数据线。注意市面上卖的DHT11模块通常有两种。一种是“裸”传感器需要你自己在数据线DATA和电源VCC之间加一个4.7K或10K的上拉电阻。另一种是“模块”厂家已经帮你把上拉电阻焊好了。购买时最好问清楚或者拿到手看看模块上除了传感器还有没有别的电阻芯片。我们今天教程默认使用的是带电阻的模块这样最省事。2. 硬件连接把传感器“插”到开发板上硬件连接是嵌入式开发的第一步也是最重要的一步接错了后面全白搭。ColorEasyDuino开发板兼容Arduino Uno的引脚布局这对我们来说非常友好。我们需要准备以下材料ColorEasyDuino开发板 一块DHT11传感器模块 一个公对母杜邦线 三根连接步骤非常简单记住“电源-地-信号”这个顺序连接电源VCC找到DHT11模块上标有“VCC”的引脚用一根杜邦线连接到ColorEasyDuino开发板上标有“5V”的引脚。这给传感器供电。连接地线GND将DHT11模块的“GND”引脚用另一根杜邦线连接到开发板上的任何一个“GND”引脚。这为电路提供共同的参考零电位。连接数据线DATA将DHT11模块的“DATA”或“OUT”或“S”引脚不同模块标识可能不同连接到开发板的一个数字IO引脚上。在示例代码里我们用的是数字引脚2。你可以先用这个如果想换其他数字引脚比如3,4,5...后续在代码里改一下定义就行。连接好之后你的硬件部分就搭建完毕了是不是很简单整个系统就靠这三根线通信。你可以参考下面的表格来核对你的连接DHT11模块引脚ColorEasyDuino开发板引脚线色建议便于区分VCC5V红色GNDGND黑色或蓝色DATADigital Pin 2黄色或绿色提示连接时最好断开开发板的USB供电。虽然对于这种低压小电流模块热插拔通常问题不大但养成断电操作的好习惯能有效避免意外短路损坏设备。3. 软件准备安装驱动库与编写代码硬件通了接下来就是让软件“认识”这个传感器。我们需要用到Arduino IDE和一个专门的库来帮我们处理复杂的单总线通信时序。3.1 安装DHT传感器库Arduino生态的强大之处就在于有丰富的开源库。对于DHT11我们使用由Adafruit维护的DHT sensor library它非常好用且稳定。打开你的Arduino IDE。点击菜单栏的工具 - 管理库...。这会打开库管理器。在搜索框中输入“DHT sensor”。在搜索结果中找到“DHT sensor library by Adafruit”。注意看作者认准Adafruit。点击右侧的“安装”按钮。等待安装完成即可。这个库不仅支持DHT11还支持DHT22、AM2302等同类传感器以后你想升级传感器也不用换库了。3.2 编写并上传代码库安装好后我们就可以开始写代码了。下面的代码我已经加上了详细的注释你完全可以一行行照着敲或者复制粘贴后理解每一部分是干什么的。// 引入DHT传感器库的头文件 // 有了这行我们才能使用库里面提供的函数 #include DHT.h // 宏定义定义DHT11的数据引脚连接到哪里 // 这里我们接在开发板的数字引脚2上如果你接在了3号脚就把2改成3 #define DHTPIN 2 // 宏定义告诉库我们使用的是DHT11型号 // 如果是DHT22就改成 DHT22 #define DHTTYPE DHT11 // 创建一个DHT类的对象命名为‘dht’ // 我们需要告诉这个对象引脚是DHTPIN类型是DHTTYPE DHT dht(DHTPIN, DHTTYPE); void setup() { // 初始化串口通信设置波特率为9600 // 这样我们才能在电脑的“串口监视器”上看到数据 Serial.begin(9600); Serial.println(ColorEasyDuino DHT11 温湿度测试启动...); // 调用dht对象的begin()方法初始化传感器 // 这个函数会设置好引脚模式为读取数据做准备 dht.begin(); } void loop() { // 每次读取之间等待2秒。DHT11传感器两次读取之间需要至少1秒的间隔 // 间隔太短会导致读取失败这里留了2秒的余量很稳定 delay(2000); // 读取湿度值结果是一个浮点数虽然DHT11只返回整数 float humidity dht.readHumidity(); // 读取温度值摄氏度结果是一个浮点数 float temperature dht.readTemperature(); // 非常重要的检查步骤判断读取是否成功 // isnan()函数用来判断一个值是否是“非数字”Not a Number // 如果读取失败库会返回NaN我们需要捕获这个错误而不是显示错误的数据 if (isnan(humidity) || isnan(temperature)) { Serial.println(读取DHT11传感器失败请检查连接。); // 读取失败就直接返回跳过下面的打印语句等待下一次loop循环 return; } // 如果读取成功就把数据打印到串口监视器 Serial.print(当前湿度: ); Serial.print(humidity); // 打印湿度数值 Serial.print( %\t); // 打印百分号和制表符\t用于对齐 Serial.print(当前温度: ); Serial.print(temperature); // 打印温度数值 Serial.println( °C); // 打印摄氏度单位并换行 }代码写好之后按照以下步骤上传到开发板在Arduino IDE顶部菜单栏选择工具 - 开发板 - Arduino Uno。因为ColorEasyDuino兼容Uno所以选这个。选择正确的端口工具 - 端口选择你的ColorEasyDuino对应的COM口Windows或/dev/ttyUSB*Linux/Mac。点击左上角的“上传”按钮向右的箭头。等待编译和上传完成看到“上传成功”的提示即可。4. 验证结果在串口监视器里查看数据代码上传成功后系统就开始工作了。我们怎么知道它读没读到数据呢这就需要打开Arduino IDE的“串口监视器”。点击Arduino IDE右上角的“串口监视器”图标像一个放大镜。确保监视器右下角的波特率设置为9600和代码里Serial.begin(9600)设置的一致。如果一切正常你将会看到串口监视器里每隔2秒就打印出一行新的数据格式类似于ColorEasyDuino DHT11 温湿度测试启动... 当前湿度: 45.00 % 当前温度: 25.00 °C 当前湿度: 45.00 % 当前温度: 25.00 °C恭喜你到这里你已经成功实现了一个完整的温湿度监测节点。常见问题与调试如果串口监视器没有输出或者一直显示“读取失败”别着急这是学习过程中最常见的环节。我们可以按照以下顺序排查检查电源首先确认DHT11模块的VCC和GND是否接反或接松了。模块上的电源指示灯如果有的话亮了吗检查数据线确认DATA引脚是否确实连接到了代码中定义的引脚默认是2号引脚并且接触良好。检查上拉电阻如果你使用的是不带电阻的“裸”DHT11必须在DATA引脚和VCC5V之间连接一个4.7KΩ - 10KΩ的电阻。这是单总线协议正常工作的必要条件。检查波特率确保串口监视器的波特率是9600。重启与重插尝试关闭串口监视器拔插一下开发板的USB线重新打开监视器。查看错误信息上传代码时IDE下方如果有红色错误提示根据提示修改通常是库没安装好或者语法错误。这个基于ColorEasyDuino和DHT11的小系统虽然简单但已经具备了物联网传感节点的所有基本要素传感器、控制器、数据输出。你可以在此基础上尝试用传感器数据控制一个LED或者将数据通过网络发送出去玩法非常多。希望这个教程能帮你顺利踏出嵌入式开发的第一步。

相关新闻