Arduino Nano HC-05蓝牙 DHT11传感器从零搭建物联网温湿度监测系统第一次接触Arduino和蓝牙模块的新手往往会在硬件连接和代码调试上踩不少坑。记得我刚开始尝试用HC-05蓝牙模块传输DHT11传感器数据时整整两天时间都卡在为什么手机收不到数据这个问题上——后来才发现原来我把蓝牙模块的TX/RX线接反了而且完全忽略了波特率设置的重要性。1. 硬件准备与连接避坑指南1.1 组件清单与选购建议在开始项目前你需要准备以下核心组件Arduino Nano开发板建议选择带有CH340芯片的版本价格实惠且稳定性好HC-05蓝牙模块注意区分主从模式版本本项目需要使用从机模式DHT11温湿度传感器虽然精度不如DHT22但对于入门项目完全够用面包板和跳线建议使用不同颜色的杜邦线以便区分连接注意市场上有些廉价的HC-05模块可能存在质量问题如果遇到频繁断连的情况可以考虑更换品牌或检查供电是否稳定。1.2 三种关键连接模式详解HC-05与Arduino Nano的连接方式直接影响模块的工作状态以下是三种典型连接场景烧录模式编程状态当需要给Arduino上传代码时必须断开蓝牙模块与数字引脚(D0/D1)的连接否则会导致上传失败。这是因为蓝牙模块占用了硬件串口。正确做法上传代码前拔掉蓝牙模块的TX/RX线上传完成后重新连接蓝牙模块如果需要频繁调试可以考虑使用SoftwareSerial库将蓝牙连接到其他数字引脚通信模式正常工作状态在正常工作状态下HC-05与Arduino的连接方式如下Arduino Nano引脚HC-05引脚备注5VVCC电源正极GNDGND电源负极D2 (RX)TX软件串口接收D3 (TX)RX软件串口发送错误模式常见问题新手最容易犯的几个接线错误TX-TX/RX-RX直连这会导致通信完全失败必须交叉连接TX接RXRX接TX供电不足如果使用3.3V引脚给HC-05供电可能导致信号不稳定引脚冲突同时使用硬件串口和其他设备会导致数据混乱2. 软件配置与关键代码解析2.1 必备库安装与环境配置在开始编程前需要安装以下两个关键库#include DHT.h #include SoftwareSerial.h可以通过Arduino IDE的库管理器搜索安装打开IDE点击工具-管理库搜索DHT sensor library并安装搜索SoftwareSerial并安装通常已内置2.2 SoftwareSerial库的深度使用使用SoftwareSerial库可以避免硬件串口冲突以下是配置示例#define DHTPIN 4 // DHT11数据引脚 #define DHTTYPE DHT11 // 传感器类型 SoftwareSerial bluetooth(2, 3); // RX, TX DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); // 硬件串口用于调试 bluetooth.begin(38400); // HC-05默认波特率 dht.begin(); }波特率设置要点HC-05模块出厂默认波特率通常是38400如果通信出现乱码尝试修改为9600或115200必须确保蓝牙模块和代码中的波特率设置一致2.3 完整数据采集与传输代码以下是整合DHT11数据采集和蓝牙传输的完整代码void loop() { delay(2000); // 传感器读取间隔 float humidity dht.readHumidity(); float temp dht.readTemperature(); if (isnan(humidity) || isnan(temp)) { Serial.println(读取DHT11失败!); return; } // 通过硬件串口打印到电脑 Serial.print(湿度: ); Serial.print(humidity); Serial.print(% 温度: ); Serial.print(temp); Serial.println(°C); // 通过蓝牙发送到手机 bluetooth.print(H:); bluetooth.print(humidity); bluetooth.print(|T:); bluetooth.print(temp); bluetooth.println(); }3. 手机端数据接收方案3.1 使用串口调试APP快速验证在开发初期建议先用蓝牙串口调试APP验证通信是否正常。推荐以下APPAndroidSerial Bluetooth TerminaliOSLightBlue连接步骤手机蓝牙设置中搜索并配对HC-05默认密码通常是1234打开串口调试APP选择已配对的HC-05模块如果一切正常应该能看到温湿度数据定期更新3.2 使用App Inventor创建简易监控界面对于想进一步开发自定义界面的用户MIT App Inventor是个不错的入门选择布局设计添加两个Label显示温度和湿度添加一个BluetoothClient组件添加一个Clock组件定时更新数据关键代码块当 BluetoothClient1.接收到数据 设置 Label温度.Text 温度: 提取数据(全局_原始数据, T:, |) 设置 Label湿度.Text 湿度: 提取数据(全局_原始数据, H:, |) %数据处理函数定义 提取数据 原始数据 开始标记 结束标记 返回 取文本中间(原始数据, 位置(原始数据, 开始标记)长度(开始标记), 位置(原始数据, 结束标记)-(位置(原始数据, 开始标记)长度(开始标记)))4. 高级调试与性能优化4.1 常见问题排查指南遇到问题时可以按照以下步骤排查检查电源用万用表测量HC-05的VCC和GND之间电压是否稳定在5V观察蓝牙模块指示灯状态快闪表示未连接慢闪表示已连接验证串口通信void setup() { Serial.begin(9600); Serial.println(Hello from Arduino!); }上传这段代码通过IDE的串口监视器检查是否能收到消息隔离测试蓝牙模块使用AT命令模式检查模块状态按住HC-05上的按钮上电进入AT模式指示灯慢闪发送AT应收到OK响应4.2 系统稳定性优化技巧长期运行的温湿度监测系统需要考虑以下优化电源管理// 在loop开始时启用蓝牙结束后关闭 void loop() { power_bluetooth(true); // 发送数据... power_bluetooth(false); delay(60000); // 每分钟更新一次 } void power_bluetooth(bool on) { digitalWrite(BT_EN_PIN, on ? HIGH : LOW); }数据校验void sendData(float temp, float humidity) { byte checksum (byte(temp) byte(humidity)) % 256; bluetooth.print(T:); bluetooth.print(temp); bluetooth.print(|H:); bluetooth.print(humidity); bluetooth.print(|C:); bluetooth.println(checksum); }错误恢复void resetBluetooth() { digitalWrite(BT_RESET_PIN, LOW); delay(100); digitalWrite(BT_RESET_PIN, HIGH); delay(2000); // 等待模块重新初始化 }在实际部署中我发现为DHT11传感器添加一个4.7KΩ的上拉电阻可以显著提高读数稳定性特别是在长导线连接的情况下。另外如果项目需要长期运行建议考虑使用锂电池配合充电模块供电并添加一个简单的防水外壳保护电路板。