M-Design设计竞赛 - 基于ESP32的温度采集与显示
该项目使用了ESP32、显示屏、bmp280,实现了温度折线显示的设计,它的主要功能为:采集环境温度,并以折线的形式显示出来。
标签
嵌入式系统
显示
开发板
2025 M-Design
liuliuliu
更新2025-04-01
26


一、创意方向

现在市面上普通电子温度计缺少图像展示功能,不能直观查看一段时间内的温度状况,本次借助贸泽电子M-Design创意设计竞赛来提交一个创意。要在采集温度的同时显示出一段时间内的温度折线变化。

二、设计思路及效果展示

本次完成的任务是任务三:无线通信、物联网

设计框图如下所示,使用ESP32采集BMP280的温度,采集到数据后,把数据以折线图的形式,展示到触摸屏上。

1743064822990.png

实物图如下图所示,是手指按压着传感器温度直线上升,当松开手后温度开始下降。

55ab742bdc7fb35150c6b0cba5dffbd.jpg

三、硬件介绍

本次活动用到了Comchip厂商的SS8050 三极管,用作ESP32下载程序时切换模式。

SS8050器件介绍

最大直流电集电极电流: 1.5 A 集电极—发射极最大电压 VCEO: 25 V

集电极—基极电压 VCBO: 40 V 发射极 - 基极电压 VEBO: 5 V

集电极—射极饱和电压: 500 mV

本次使用的屏幕为2.4英寸的触摸显示屏,BMP280传感器和ESP32模块。如下图所示。

IMG_5770.jpeg



四、关键代码及说明

如下所示:

1. BMP280初始化。

2. 触摸屏幕要进行初始化,初始化时要拉低对应的CS引脚

// BMP280初始化
Wire.begin(I2C_SDA,I2C_SCL);
  bool status;
  //设置自定义 I2C 端口
  if (!bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID)) {
    Serial.println("Could not find a valid BMP280 sensor, check wiring!");
    while (1);
  } 

// 确保触摸屏和TFT屏幕的CS引脚拉高,防止初始化冲突
  digitalWrite(XPT2046_CS, HIGH);  
  digitalWrite(TFT_CS, HIGH);


  digitalWrite(XPT2046_CS, LOW);
  // 初始化触摸屏
  touchscreenSPI.begin(XPT2046_CLK, XPT2046_MISO, XPT2046_MOSI, XPT2046_CS);
  touchscreen.begin(touchscreenSPI);
  touchscreen.setRotation(2);  // 设置触摸屏旋转

3. 读取BMP280的温度值并打印。

  #if TEMP_CELSIUS
    float bmp_temp = bmp.readTemperature();
  #else
    float bmp_temp = 1.8 * bmp.readTemperature() + 32;  
  #endif
 
  //重置刻度范围(图表 y 轴)变量
  scale_min_temp = 120.0;
  scale_max_temp = -20.0;


  // 将值移动到数组的左侧,并在末尾插入最新的读数
  for (int i = 0; i < BMP_NUM_READINGS; i++) {
    if(i == (BMP_NUM_READINGS-1) && float(bmp_temp) < 120.0) {
      bmp_last_readings[i] = float(bmp_temp);  
    }
    else {
      bmp_last_readings[i] = float(bmp_last_readings[i + 1]);  // Shift values to the left of the array
    }
    //获取数组中的最小值/最大值以设置刻度范围(图表 y 轴)
    if((float(bmp_last_readings[i]) < scale_min_temp) && (float(bmp_last_readings[i]) != -20.0 )) {
      scale_min_temp = bmp_last_readings[i];
    }
    if((float(bmp_last_readings[i]) > scale_max_temp) && (float(bmp_last_readings[i]) != -20.0 )) {
      scale_max_temp = bmp_last_readings[i];
    }
  }
  Serial.print("Min temp: ");
  Serial.println(float(scale_min_temp));
  Serial.print("Max temp: ");
  Serial.println(float(scale_max_temp));
  Serial.print("BMP last reading: ");
  Serial.println(float(bmp_last_readings[BMP_NUM_READINGS-1]));
  lv_draw_chart();

五、程序流程图

image.png

六、活动总结

很感谢2025贸泽电子M-Design创意设计竞赛活动,让我有机会通过这个活动做一些很有意义的事情,来挑战自己。这之中虽然遇到了一些难题,比如触摸屏和显示屏的引脚共用问题,好在努力查找问题,最终解决了问题,本次项目的成品略显粗糙,实用性还有能改进空间,我将有机会后续优化。

附件下载
TFT-TochLCD.rar
程序
团队介绍
个人
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号