一、前言
上回FastBond2阶段1的文档中,展示了使用Scheme-it绘制的原理图,介绍了制作温度显示器的方法以及原理,也说明了项目中所使用到的活动规定厂家的芯片。
想了解阶段1的具体内容可以通过链接跳转:FastBond2阶段1-基于ESP32智能温度显示器框图设计
- 项目介绍
这个项目基于ESP32与LM75温度传感器和SSD1306 OLED显示屏,旨在创建一个能够周期性地读取LM75传感器的温度数据并在OLED显示屏上显示的温度监测系统。以下是该项目的主要特点和功能:
-
1. 这个项目的主要目的是使用ESP32控制传感器和OLED显示屏,周期性地读取温度数据并将其显示在OLED屏幕上。这个系统适用于需要实时监测温度的多个市场和应用领域,包括家庭自动化、仓储物流、冷链物流、温度监测与记录和小型气候控制系统等。
2. 硬件上,这个系统包括ESP32开发板、LM75温度传感器和SSD1306 OLED显示屏。ESP32是一款强大的微控制器,集成了无线网络和蓝牙通信功能,是许多物联网项目的理想选择。LM75是一种数字温度传感器,可以通过I2C接口读取温度数据。SSD1306 OLED显示屏是一个高清晰度的显示屏,可以通过SPI接口显示温度数据。
3. 软件上,这个系统使用Arduino IDE和相应的库文件。通过编写Arduino代码,可以使得ESP32和其他硬件相关联并周期性地读取和处理温度数据。其中,LM75温度传感器和SSD1306 OLED显示屏的库文件可以帮助我们轻松地操作和访问它们。
-
- 市场应用介绍
-
家庭自动化:该系统可以用于家庭自动化系统,监测室内温度并实时显示在OLED显示屏上。用户可以根据温度数据做出相应的调整,例如调节空调或供暖系统。
-
仓储与物流:在仓储和物流领域,该系统可以用于监测货物存储区的温度。通过将LM75传感器与适当的位置搭配,可以及时发现温度异常并采取措施,确保货物质量和安全。
-
冷链物流:对于冷链物流行业,该系统可以实时监测运输过程中的温度变化。这对于需要保持特定温度的产品(如食品、药品)非常重要,可以确保它们在整个运输过程中处于理想的温度条件下。
-
温度监测与记录:这个系统也可以应用于温度监测与记录领域,如实验室环境。通过将温度数据周期性地记录下来,可以进行数据分析、溯源和质量控制。
-
小型气候控制系统:该系统可以作为小型气候控制系统的一部分,用于监测小空间(如温室、热带植物桌面种植器等)的温度。用户可以根据温度数据调整环境条件,以保持最适宜的生长环境。
- 项目设计思路
这是一个关于使用ESP32、LM75温度传感器和SSD1306 OLED显示屏的项目构思:
本项目旨在使用ESP32微控制器、LM75温度传感器和SSD1306 OLED显示屏,开发一个实时温度监测与显示系统。系统将周期性地读取温度数据,并通过OLED显示屏展示当前温度信息。用户可以根据温度数据做出相应的调整和决策。
项目功能:
- 温度数据获取:通过连接和配置LM75温度传感器,实时获取环境的温度数据。
- 温度数据显示:利用SSD1306 OLED显示屏,将温度数据以易读的方式显示出来,包括当前温度值和单位(摄氏度或华氏度)。
- 实时更新:通过ESP32的定时器功能,周期性地读取温度数据并更新到OLED显示屏上,以保持实时性。
- 项目方案框图和原理图解释
链接:https://www.digikey.cn/schemeit/project/温度显示器-6d26ad5bfc6646beba5b3095b1a2be4c
原理图(一)
原理图(二)
原理图(三)
原理图(四)
- 元器件介绍
主控芯片:乐鑫ESP3253
ESP-WROOM-32模块基于ESP32芯片,该芯片集成了2.4 GHz的WiFi和蓝牙功能,还具备双核处理器、低功耗和高性能等特点。ESP-WROOM-32模块具备丰富的外设接口,包括数字GPIO引脚、模拟输入输出、SPI、I2C、UART和PWM等,使其具备良好的扩展性,可以满足不同项目的需求。
LM75 温度传感器:
LM75是一种数字温度传感器,采用I2C接口进行通信。它可以实时测量环境温度,并将读数以数字形式输出。LM75具有高精度、灵敏度高以及低功耗等特点,适用于广泛的温度监测应用,如家庭自动化、工业系统、温度控制和数据记录等。(之前使用的是DS1820传感器但由于该传感器的稳定性和感知性不好,改为使用LM75)
SSD1306 OLED 显示屏:
SSD1306是一种单色OLED显示屏,具有高对比度、快速响应和低功耗等优点。它采用SPI或I2C接口进行通信,并可显示文本、图形和动画。SSD1306 OLED显示屏广泛应用于可穿戴设备、智能家居、仪器仪表和嵌入式系统中,提供清晰的显示效果和用户交互界面。
- 关键代码及说明
首先,我们包含了需要的库文件,包括Wire.h、Adafruit_GFX.h和Adafruit_SSD1306.h。然后定义了LM75的I2C地址和创建了一个Adafruit_SSD1306对象来控制OLED显示屏。
disout()函数用于在OLED显示屏上显示温度数据。该函数首先清除显示屏内容,然后设置文本大小、颜色和位置,将传入的文本和温度数据打印到屏幕上,并显示出来。
LM75()函数用于读取LM75传感器的温度数据。该函数通过I2C向LM75发送命令,并读取返回的数据。函数将读取的原始温度数据进行处理,并返回温度值。
在setup()函数中,初始化了串口通信、I2C总线和OLED显示屏。
在loop()函数中,我们通过调用LM75()函数获取温度数据,并使用disout()函数将数据显示在OLED显示屏上。如果温度数据超出了有效范围,将显示一个错误信息。
最后,通过延迟1秒钟的方式循环执行温度读取和显示的操作。
关键代码(一)
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// LM75 I2C地址
#define LM75_ADDRESS 0x48
Adafruit_SSD1306 display(128, 64, &Wire, -1);
void disout(char *pr, float tem) {
display.clearDisplay();
display.display();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print(pr);
display.setTextSize(2);
display.setCursor(0, 23);
display.println(tem, 1);
display.setTextSize(1.5);
display.setCursor(50, 23);
display.print("celsius");
display.display();
}
float LM75() {
Wire.beginTransmission(LM75_ADDRESS);
Wire.write(0x00);
Wire.endTransmission();
delay(500);
Wire.requestFrom(LM75_ADDRESS, 2);
int rawTemp = Wire.read() << 8 | Wire.read();
float temperature = rawTemp / 256.0;
if (temperature >= 0 && temperature <= 125) {
return temperature;
} else {
return -1.0;
}
}
void setup() {
Serial.begin(115200);
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.display();
}
void loop() {
char *pt = "temperature:";
float temp = LM75();
if (temp > 0 && temp < 125) {
disout(pt, temp);
} else {
display.clearDisplay();
display.setCursor(0, 0);
display.setTextSize(2);
display.print("ERROR!!!!!!!!!!!!!!!!!!");
display.display();
}
delay(1000);
}
- 功能展示及说明
展示功能照片(一)
展示功能照片(二)
- 对本大赛的心得体会
在参加这项比赛的过程中,我获得了很多宝贵的经验和收获。首先,比赛是一个很好的机会,让我能够将自己的学习和实践应用到实际项目中。这让我更深刻地理解了理论知识和实际操作之间的差距,并激发了我对知识的进一步追求。
其次,参加比赛给我提供了一个良好的交流与学习的平台。在与其他参赛者的交流中,我发现每个人都有自己独特的见解和创新思维,这让我受益匪浅。与其他参赛者的思想碰撞和交流,扩展了我的思维边界,启发了我更多的创意和解决问题的方法。
比赛过程中的挑战和困难锻炼了我的决策能力和解决问题的能力。在限定的时间内,我需要迅速做出决策、解决各种难题,并合理安排任务进度。这个过程不仅让我更好地组织和管理我的项目,也培养了我在压力下保持冷静和灵活应对的能力。