台北市网站建设_网站建设公司_电商网站_seo优化
2026/1/7 19:17:44 网站建设 项目流程

本教程将手把手教你搭建一个基于 ESP8266 的温湿度监测系统,实现「每秒读取温湿度 + 点阵屏实时显示 + HTTP 局域网访问 + 每 5 分钟上传 LeanCloud 云端」的完整功能,适合新手快速上手。

一、项目功能清单

  1. 硬件:ESP8266 驱动 SHT30 温湿度传感器(高精度)+ 4 联 MAX7219 8*8 点阵屏;
  2. 数据读取:每秒读取一次温湿度,实时显示在点阵屏上;
  3. 局域网访问:ESP8266 搭建 HTTP 服务器,固定主机名,电脑 / 手机可访问温湿度数据;
  4. 云端存储:每 5 分钟自动将温湿度数据上传到 LeanCloud,支持远程查看历史数据。

二、硬件准备

器件数量备注
ESP8266(NodeMCU)1 个核心控制板
SHT30 温湿度传感器1 个I2C 通信,精度优于 DHT11
4 联 MAX7219 点阵屏1 个SPI 通信,8*32 显示区域
杜邦线若干公对公 / 公对母
Micro USB 数据线1 根供电 + 烧录程序
5V 电源(可选)1 个脱离电脑供电使用

三、硬件接线(核心步骤)

1. SHT30 → ESP8266(I2C 通信,必须接 3.3V)

SHT30 引脚ESP8266 引脚重要说明
VCC3.3V禁止接 5V!会烧毁传感器
GNDGND共地,保证电压稳定
SDAD2 (GPIO4)I2C 数据引脚
SCLD1 (GPIO5)I2C 时钟引脚

2. MAX7219 点阵屏 → ESP8266(SPI 通信)

MAX7219 引脚ESP8266 引脚说明
VCC5V推荐 5V 供电,显示更清晰
GNDGND共地
DIND7 (GPIO13)SPI 数据引脚
CSD8 (GPIO15)SPI 片选引脚
CLKD5 (GPIO14)SPI 时钟引脚

接线提示:先接 GND,再接 VCC,最后接信号引脚(SDA/SCL/DIN/CLK/CS),避免接反烧毁器件。

四、软件准备

1. Arduino IDE 配置

  • 安装 Arduino IDE(官网下载:https://www.arduino.cc/en/software);
  • 配置 ESP8266 开发板:
    1. 打开 Arduino IDE → 文件 → 首选项 → 附加开发板管理器网址,输入:http://arduino.esp8266.com/stable/package_esp8266com_index.json
    2. 工具 → 开发板 → 开发板管理器,搜索「esp8266」并安装;
    3. 工具 → 开发板,选择「NodeMCU 1.0 (ESP-12E Module)」。

2. 安装依赖库

打开 Arduino IDE → 项目 → 加载库 → 管理库,搜索并安装以下库:

  • Adafruit SHT31(SHT30 传感器驱动);
  • MD_Parola(MAX7219 点阵屏显示控制);
  • MD_MAX72XX(MAX7219 底层驱动);
  • ESP8266WiFi(自带,无需安装)。

3. LeanCloud 准备(云端存储)

  1. 注册 LeanCloud 账号(https://console.leancloud.app/),创建一个「应用」;
  2. 进入应用 → 设置 → 应用凭证,记录以下信息(后续填到代码里):
    • AppID、AppKey、MasterKey(注意保护 MasterKey,不要泄露)。

五、完整代码

将以下代码复制到 Arduino IDE,替换「配置项」中的 WiFi 信息、LeanCloud 凭证即可使用。

cpp

运行

#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <WiFiClient.h> #include <Adafruit_SHT31.h> #include <MD_Parola.h> #include <MD_MAX72xx.h> #include <SPI.h> // ====================== 【配置项 - 需修改】 ====================== // WiFi配置 const char* ssid = "你的WiFi名称"; // 替换为自家WiFi名称 const char* password = "你的WiFi密码"; // 替换为自家WiFi密码 // 局域网主机名(固定访问地址) const char* espHostname = "esp8266-temphumi"; // MAX7219配置(4联8*8点阵屏,数量无需修改) #define MAX_DEVICES 4 // 点阵屏数量(4联屏固定为4) #define CLK_PIN 14 // D5(对应接线,无需修改) #define DATA_PIN 13 // D7(对应接线,无需修改) #define CS_PIN 15 // D8(对应接线,无需修改) // LeanCloud配置(替换为自己的凭证) const char* leanCloudServer = "2m"; const String leanCloudAppID = "2E#####"; const String leanCloudAppKey = "####"; const String leanCloudMasterKey = "####"; // ================================================================ // 全局变量初始化 MD_Parola matrix = MD_Parola(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES); Adafruit_SHT31 sht30 = Adafruit_SHT31(); float temperature = 0.0, humidity = 0.0; ESP8266WebServer server(80); unsigned long lastUploadTime = 0; const unsigned long uploadInterval = 5 * 60 * 1000; // 5分钟上传一次 // 【功能1】读取SHT30温湿度数据 bool readSHT30() { float t, h; // SHT30读取温湿度,地址默认0x44,失败可改为0x45 if (sht30.readTemperature(&t) && sht30.readHumidity(&h)) { temperature = t; humidity = h; return true; } return false; } // 【功能2】HTTP服务接口:返回温湿度JSON数据 void handleTempHumi() { String json = "{\"temperature\":" + String(temperature, 1) + ",\"humidity\":" + String(humidity, 1) + "}"; server.send(200, "application/json", json); } // 【功能3】上传数据到LeanCloud云端 void uploadToLeanCloud() { WiFiClient client; const int httpPort = 80; // 连接LeanCloud服务器 if (!client.connect(leanCloudServer, httpPort)) { Serial.println("❌ LeanCloud连接失败"); return; } // 构建上传的JSON数据 String postData = "{\"temperature\":" + String(temperature, 1) + ",\"humidity\":" + String(humidity, 1) + "}"; // 发送HTTP POST请求(MasterKey需加,master标识) client.print(String("POST /1.1/classes/TempHumiData HTTP/1.1\r\n") + "Host: " + leanCloudServer + "\r\n" + "X-LC-Id: " + leanCloudAppID + "\r\n" + "X-LC-Key: " + leanCloudMasterKey + ",master\r\n" + "Content-Type: application/json\r\n" + "Content-Length: " + String(postData.length()) + "\r\n" + "Connection: close\r\n\r\n" + postData); // 打印响应(调试用) delay(1000); while (client.available()) { String line = client.readStringUntil('\r'); Serial.print(line); } client.stop(); Serial.println("\n✅ LeanCloud上传完成"); } // 【功能4】点阵屏显示温湿度 void displayOnMatrix() { matrix.setTextAlignment(PA_CENTER); // 居中显示 matrix.setIntensity(5); // 亮度(0-15,数值越大越亮) // 拼接显示内容:如「25.5C 60.0%」 String displayStr = String(temperature, 1) + "C " + String(humidity, 1) + "%"; matrix.print(displayStr); delay(1000); // 显示1秒(和读取频率同步) } // 初始化函数(只执行一次) void setup() { Serial.begin(115200); // 串口波特率,用于调试 // 1. 初始化SHT30传感器 if (!sht30.begin(0x44)) { Serial.println("❌ SHT30初始化失败!检查接线/地址"); while (1) delay(10); // 初始化失败则卡住,提示排查 } Serial.println("✅ SHT30初始化成功"); // 2. 初始化点阵屏 matrix.begin(); matrix.displayClear(); matrix.print("Init..."); // 开机提示 delay(1000); Serial.println("✅ 点阵屏初始化成功"); // 3. 设置局域网主机名 WiFi.hostname(espHostname); // 4. 连接WiFi Serial.print("🔌 连接WiFi..."); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\n✅ WiFi已连接"); Serial.print("📡 主机名: "); Serial.println(WiFi.hostname()); Serial.print("📡 IP地址: "); Serial.println(WiFi.localIP()); // 5. 启动HTTP服务器 server.on("/temp_humi", handleTempHumi); // 注册接口 server.begin(); Serial.println("✅ HTTP服务器已启动"); // 6. 首次读取温湿度 readSHT30(); } // 主循环(反复执行) void loop() { // 1. 每秒读取一次温湿度并显示 static unsigned long lastReadTime = 0; if (millis() - lastReadTime >= 1000) { lastReadTime = millis(); if (readSHT30()) { Serial.printf("🌡️ 温度: %.1f°C, 湿度: %.1f%%\n", temperature, humidity); displayOnMatrix(); } else { Serial.println("❌ SHT30读取失败"); matrix.print("Read Err"); delay(1000); } } // 2. 处理HTTP客户端请求(电脑/手机访问) server.handleClient(); // 3. 每5分钟上传数据到LeanCloud if (millis() - lastUploadTime >= uploadInterval) { lastUploadTime = millis(); Serial.println("\n📤 开始上传到LeanCloud..."); uploadToLeanCloud(); } }

六、程序烧录与测试

1. 烧录程序

  1. 将 ESP8266 通过 Micro USB 连接到电脑;
  2. Arduino IDE → 工具 → 端口,选择 ESP8266 对应的 COM 口;
  3. 点击「上传」按钮(右箭头),等待烧录完成(底部提示「上传成功」)。

2. 功能测试

测试 1:串口调试(看日志)

打开 Arduino IDE → 工具 → 串口监视器,波特率选 115200,可看到:

  • 传感器 / 点阵屏初始化成功提示;
  • WiFi 连接成功,显示主机名和 IP;
  • 每秒刷新的温湿度数据;
  • 每 5 分钟一次的 LeanCloud 上传日志。
测试 2:点阵屏显示

正常情况下,点阵屏会显示当前温湿度(如「25.5C 60.0%」),若显示「Read Err」,说明 SHT30 读取失败,需检查接线。

测试 3:局域网 HTTP 访问

在同一 WiFi 下的电脑 / 手机浏览器输入:http://esp8266-temphumi/temp_humihttp://ESP8266的IP地址/temp_humi会返回 JSON 格式数据:{"temperature":25.5,"humidity":60.0}

测试 4:LeanCloud 云端查看

登录 LeanCloud 控制台 → 数据存储 → 结构化数据 →TempHumiData表,可看到每 5 分钟上传的温湿度记录。

七、常见问题排查

问题现象排查方向
SHT30 初始化失败1. 接线:SDA→D2、SCL→D1;2. 供电:必须接 3.3V;3. 地址:改 0x44 为 0x45 重试
点阵屏不显示1. 接线:DIN→D7、CLK→D5、CS→D8;2. 确认是 4 联屏(MAX_DEVICES=4)
HTTP 访问失败1. 电脑和 ESP8266 连同一 WiFi;2. 关闭电脑防火墙;3. 核对 IP / 主机名
LeanCloud 上传失败1. 凭证是否正确;2. MasterKey 后是否加,master;3. ESP8266 能否访问外网
点阵屏亮度太亮 / 太暗修改代码中matrix.setIntensity(5)的数值(0-15)

八、总结

  1. 本项目核心是 ESP8266 作为主控,整合了 SHT30(数据采集)、MAX7219(本地显示)、HTTP 服务(局域网访问)、LeanCloud(云端存储)四大功能;
  2. 接线是基础:SHT30 必须接 3.3V,MAX7219 推荐接 5V,信号引脚严格对应;
  3. 关键配置:WiFi 信息、LeanCloud 凭证需替换为自己的,SHT30 地址可根据实际调整;
  4. 扩展方向:可修改上传频率、点阵屏显示样式,或在 LeanCloud 添加数据可视化面板。

整个系统实现了「本地采集 - 本地显示 - 局域网访问 - 云端存储」的完整闭环,适合物联网入门学习。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询