一、引言
在智能家居与物联网技术蓬勃发展的今天,环境数据的实时监测成为许多场景的核心需求——从家庭健康管理到农业大棚调控,再到实验室精密控制,温湿度数据都扮演着重要角色。
本文将使用ESP8266开发板,搭配DHT22温湿度传感器,打造一个兼具本地显示与远程监控能力的智能温湿度计。通过这个项目,您不仅能掌握传感器数据采集、OLED屏幕驱动和WiFi通信的基础技能,还能体验到物联网设备从硬件搭建到软件联调的完整开发流程。无需复杂电路,仅需30分钟,即可迈出智能硬件开发的第一步!
二、所需硬件
1. ESP8266开发板
本文采用CH340芯片的NodeMCU开发板,如芯片不同请下载对应模块驱动。
2. DHT22温湿度传感器
高精度数字传感器,测量范围:-40~80℃(±0.5℃),0~100%RH(±2%湿度),通过单总线协议与ESP8266通信。
相比于DHT11,其数据更为精准。
3. SSD1306 OLED显示屏(128x64像素,I2C接口)
用于本地实时显示数据,无需背光、功耗极低,对比度清晰,适合嵌入式设备。
关键参数:0.96英寸,I2C地址默认为0x3C
4. Micro USB数据线 为开发板供电并上传程序,需确保线材支持数据传输(部分廉价线仅能充电,这是一个大坑)。
5.母对母杜邦线 用于硬件与开发板的连接。
三、准备工作
- 安装Arduino IDE
- 手机端安装点灯blinker
- 安装开发板驱动程序
- 在Arduino IDE中搭建ESP8266开发环境
- 安装温湿度传感器,OLED屏幕和Blinker所需要的库
- 将开发板与电脑连接
四、接线方法
OLED屏幕使用I2C协议,其SCL接D1,SDA接D2,VCC接3V,GND接板子上的G
DHT22使用单总线协议,DATA接D6,VCC接3V,GND接G
接好后如图所示。
五、点灯blinker端的设置
首页-右上角+号-添加独立设备,选择网络接入,此时你会获得一个密钥,记住这个密钥,会在后续代码中用到。
在独立设备右上角点击编辑,新建两个数据模块,组件键名设为temp和humi,这步很重要,否则会导致数据无法显示。
六、代码部分
#define BLINKER_WIFI
#define BLINKER_PRINT Serial
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#include <Blinker.h>#define DHTPIN D6 // DATA引脚接GPIO12/D6
#define DHTTYPE DHT22
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64char auth[] = "Your_Blinker_Auth_Key"; // 替换为您的Blinker设备密钥
char ssid[] = "Your_WiFi_SSID"; // 替换为您的Wi-Fi SSID
char pswd[] = "Your_WiFi_Password"; // 替换为您的Wi-Fi 密码DHT dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);void setup() {
Serial.begin(115200);
Blinker.begin(auth, ssid, pswd); // 初始化Blinker连接
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // I2C地址通常为0x3C
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.clearDisplay();
dht.begin();
}void loop() {
Blinker.run(); // 维持与Blinker服务器的连接
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();if (isnan(humidity) || isnan(temperature)) {
Serial.println("读取失败!");
return;
}Blinker.print("temp", temperature); // 发送温度数据到Blinker
Blinker.print("humi", humidity); // 发送湿度数据到Blinkerdisplay.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// 在(0,0)位置显示温度
display.setCursor(0, 0);
display.print("Temperature: ");
display.print(temperature);
display.print(" C");// 在(0,20)位置显示湿度
display.setCursor(0, 20);
display.print("Humidity: ");
display.print(humidity);
display.print(" %");display.display();
delay(2000); // 每隔2秒更新一次屏幕和Blinker的数据
}
复制以上代码,在Arduino IDE中粘贴,上传烧录进板子,烧录成功后OLED屏幕中即显示温湿度。
打开Blinker,显示设备在线,组件显示温湿度,即为上传成功。
至此,你已经完成了智能温湿度计的制作,我们下期再见。