Arduino Mega + TFT LCD 实时数据历史曲线绘制:DHT11 温湿度图表化
元器件清单
| 元器件 | 数量 | 备注 |
|---|---|---|
| Arduino Mega 2560 | 1 | SRAM 充足,驱动 TFT 无压力 |
| Elegoo 2.8 英寸 TFT LCD Shield (ILI9341) | 1 | 插针直插 Mega,免布线 |
| DHT11 温湿度传感器 | 1 | 数据引脚接 D22 |
| 面包板、跳线 | 若干 | 传感器连接 |
核心功能:零代码量修改即可绘制任意传感器历史曲线
本项目封装了完整的坐标系绘制、数据映射、滚动刷新、坐标标注逻辑,**用户仅需修改 5 个核心变量** 即可适配任意传感器:
bool proDebug = false; // 调试模式:串口打印温度
uint16_t graphColor = BLUE; // 坐标轴/标签颜色
uint16_t pointColor = BLACK; // 数据点颜色
uint16_t lineColor = GREEN; // 连线颜色
String graphName = "Time Graph"; // 图表标题
int graphRange = 50; // Y轴量程最大值 (对应传感器最大读数)
int markSize = 3; // 数据点方块大小 (像素)
坐标系绘制原理 (TFT 屏幕坐标系)
- 原点 (0,0) 位于**屏幕左上角**
- X 轴向右增大,Y 轴向下增大
fillRect(x, y, w, h, color):x=距左边距,y=距上边距- 图表绘制区域由
originX, originY, sizeX, sizeY定义

三大核心代码模块解析
1. 图表初始化 (Set Up Graph)
- 绘制标题、X/Y 轴线
- 按
numberOfMarks绘制 X 轴刻度线 (时间标记) - 按 6 个分度绘制 Y 轴横向网格线及数值标签 (由
graphRange自动计算)
2. 传感器读取 (Read Temperature)
chk = DHT.read11(22); // D22 引脚
temp = DHT.temperature; // 获取摄氏度整数值
可替换为任意传感器读取代码 (光敏、土壤湿度、光照、气体浓度等),只需保证输出变量 temp 为数值型。
3. 动态绘图与滚动 (Draw Graph)
- 缓冲区未满时 (blockPos < 8): 在对应 X 位置绘制数据点,连接上一点,显示时间标签
- 缓冲区满后 (blockPos ≥ 8): 清除图表绘图区,将 8 个历史点整体左移一格,腾出最右位置绘制新点,时间标签同步左移
- 采用
map()函数将传感器数值线性映射至 Y 轴像素坐标
个性化定制指南
修改图表尺寸与位置
调整全局常量:
const int originX = 40; // 图表左边距
const int originY = 280; // 图表底边距 (X轴基线)
const int sizeX = 280; // 图表宽度
const int sizeY = 200; // 图表高度
更换传感器类型
- 修改
graphRange为新传感器最大量程 (如光敏 1023、土壤湿度 100、CO2 5000ppm) - 替换
Read Temperature区域代码为对应传感器读取逻辑 - 若传感器输出浮点数,建议乘以 10/100 转整数处理,显示时再除还原
扩展多曲线同屏显示
定义多组 locationBlock[] 数组,不同颜色 pointColor/lineColor 区分,循环绘制即可。注意 SRAM 占用 (Mega 8KB 足够)。
依赖库
- Adafruit_TFTLCD / Elegoo_TFTLCD (BSD 协议)
- DHT sensor library (Public Domain)
进阶玩法
- 加入 SD 卡模块,定时存储 CSV 日志
- 接入 RTC 模块 (DS3231),X 轴显示真实时钟而非相对秒数
- 触摸屏交互:点击切换传感器、缩放量程、暂停/继续
- 移植至 ESP32 + 更大屏幕 (3.5"/4.0") 实现工业级 HMI
制造工艺
- ILI9341 2.4 英寸 TFT 触摸屏扩展板位图动画专业指南
- DIY 蓝牙控制 Arduino 间谍小车
- FlickMote:基于手势的智能家居红外遥控器
- DIY Arduino TV-B-Gone:万能关机遥控器
- 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
- Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
- Arduino 项目优化供电方案:从按键开关到电池监测与数据记录
- Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
- Arduino UNO 驱动 1.17 英寸 TFT 屏显示图片 (SD 卡读取)
- 从零构建智能 Arduino 四足机器人:完整指南
- DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
- Arduino Nano 专用 2.8 英寸 TFT 扩展板 – 320×240 SPI 显示屏