搜索代码

ESP32教程25/55 - 使用NTC和LCD测量温度 | SunFounder的ESP32物联网学习套件

ESP32教程25/55 - 使用NTC和LCD测量温度 | SunFounder的ESP32物联网学习套件

在本教程中,我们将学习如何使用负温度系数(NTC)热敏电阻测量温度,并使用ESP32微控制器将读数显示在LCD屏幕上。该项目将涉及将NTC热敏电阻连接到ESP32,并使用LCD以摄氏度和华氏度两种单位显示温度读数。这是开始使用ESP32平台进行温度传感和显示技术的好方法。

ESP32-25-NTC_thermometeLCD

我们将使用SunFounder的ESP32扩展板,该板通过内置Wi-Fi和蓝牙增强了ESP32的功能。该板可以轻松与各种传感器和显示器集成,非常适合物联网项目。NTC热敏电阻将根据其电阻提供温度读数,其电阻随温度升高而降低。有关设置和代码的进一步说明,请务必观看视频(视频中00:00处)。

硬件说明

本项目中使用的主要组件包括ESP32微控制器、NTC热敏电阻、一个电阻和一个LCD显示器。ESP32作为中央处理单元,处理来自热敏电阻的数据并控制LCD显示器。NTC热敏电阻根据温度改变其电阻,使我们能够基于与固定电阻组成的电压分压器配置来计算温度。

NTC_thermistor

LCD显示器将以摄氏度和华氏度两种单位显示温度读数。我们将使用I2C协议与LCD通信,这通过减少所需引脚数量简化了接线。NTC热敏电阻的特性是其电阻随温度升高而降低,这对我们的计算至关重要。

数据手册详情

制造商 SunFounder
零件编号 NTC热敏电阻
标称电阻 10 kΩ
B值 3950 K
温度范围 -40°C至125°C
封装 轴向

 

  • 确保热敏电阻的额定温度范围符合预期。
  • 使用10 kΩ电阻作为电压分压器;否则读数将不准确。
  • 检查连接以避免短路。
  • 确保LCD的I2C地址正确(通常为0x27)。
  • 为ESP32和外设使用适当的电源电压。
  • 检查串行监视器的波特率是否与代码设置匹配(115200)。
NTC_formula

接线说明

ESP32-11_LCD-wiring
ESP32-25-NTC_thermometer_wiring

要连接组件,首先将NTC热敏电阻连接到ESP32。热敏电阻没有极性,因此可以任意方向连接。将热敏电阻的一个引脚连接到ESP32上的接地(GND)引脚。另一个引脚连接到10 kΩ电阻,该电阻再连接到ESP32上的3.3V引脚。热敏电阻和电阻之间的连接点将连接到ESP32上的引脚35,该引脚将读取电压以进行温度计算。

对于LCD,将接地引脚(通常是从顶部数第二个引脚)连接到ESP32上的GND。然后,将VCC(通常是第一个引脚)连接到ESP32上的5V引脚。SDA引脚(通常是第三个引脚)应连接到ESP32上的引脚21,SCL引脚(通常是第四个引脚)应连接到引脚22。确保所有连接牢固,并仔细检查引脚编号以避免任何错误。

代码示例与讲解

代码首先定义热敏电阻的常量,包括引脚编号、参考电压和电阻值。setup函数初始化串行通信并将热敏电阻引脚设置为输入。

const int thermistorPin = 35; // 连接到热敏电阻的引脚
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // '另一个'电阻

主循环读取热敏电阻引脚的模拟值,计算电阻,然后使用Beta参数方程计算摄氏度和华氏度温度。计算值将打印到串行监视器。

int adcValue = analogRead(thermistorPin); // 读取ADC值
float voltage = (adcValue * referenceVoltage) / 4095.0; // 计算电压
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // 计算热敏电阻阻值

最后,温度显示在LCD上。lcd.print()函数用于显示温度值以及度符号。

lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.write(223); // 度符号
lcd.print("C");

该代码每300毫秒更新一次LCD上的最新温度读数,实现实时监控。

演示/预期效果

运行代码并完成接线后,您应该会在LCD上看到以摄氏度和华氏度显示的温度读数。如果将热敏电阻握在手中,您会注意到随着电阻减小,温度升高。请注意极性不要接反,并确保连接牢固,因为接线不当可能导致读数不准确(视频04:50处)。

视频时间戳

  • 00:00 开始
  • 1:50 项目介绍
  • 5:32 接线说明
  • 8:20 适用于ESP32的Arduino NTC代码说明
  • 13:38 在Arduino IDE中选择ESP32开发板和COM端口
  • 15:20 NTC温度测量演示
  • 17:34 使用ESP32在LCD1602上显示NTC温度
  • 18:42 带LCD的Arduino NTC代码说明
  • 21:15 LCD上温度显示演示
  • 23:13 绿色LCD还是蓝色LCD1601?

图像

ESP32-11_LCD-wiring
ESP32-11_LCD-wiring
ESP32-11_LCD-wiring-schematic
ESP32-11_LCD-wiring-schematic
NTC_thermistor
NTC_thermistor
ESP32-25-NTC_thermometer_schematic
ESP32-25-NTC_thermometer_schematic
ESP32-25-NTC_thermometer_wiring
ESP32-25-NTC_thermometer_wiring
NTC_formula
NTC_formula
ESP32-25-NTC_thermometeLCD
ESP32-25-NTC_thermometeLCD
824-ESP32 Tutorial 25/55- SunFounder doc page NTC Thermometer
语言: C++
/*
 * // 定义常量
 */
const int thermistorPin = 35; // 连接到热敏电阻的引脚
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // 另一个电阻器
const float beta = 3950; // β值(典型值)
const float nominalTemperature = 25; // 计算温度系数的标称温度
const float nominalResistance = 10000; // 额定温度下的电阻值

void setup() {
  Serial.begin(115200); // 初始化串行通信
  pinMode(thermistorPin, INPUT); // 将引脚设置为输入
}

void loop() {
  int adcValue = analogRead(thermistorPin); // 读取ADC值
  float voltage = (adcValue * referenceVoltage) / 4095.0; // 计算电压
  float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // 计算更新配置下的热敏电阻阻值

 // 使用贝塔参数方程计算温度
  float tempK = 1 / (((log(resistance / nominalResistance)) / beta) + (1 / (nominalTemperature + 273.15)));

  float tempC = tempK - 273.15; // 获取摄氏温度
  float tempF = 1.8 * tempC + 32.0; // 获取华氏温度

 // 打印温度
  printf("TempC: %.2f C\n", tempC);
  printf("TempF: %.2f F\n", tempF);

  delay(300); // 等待1秒钟
}

825-ESP32 Tutorial 25/55- Arduino code for LCD with NTC thermistor
语言: C++
/*
 * 这是SunFounder ESP32物联网学习套件代码的第25/55课
 * 在LCD屏幕上显示NTC温度
 * 由Ahmad Shamshiri为SunFounder ESP32物联网学习套件撰写
 * 观看完整视频 https://youtu.be/zJh-gWY0DmE
 * 从 https://robojax.com/RJT707 下载此代码、接线图和其他资源
 */
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

 // SDA->21,SCL->22
LiquidCrystal_I2C lcd(0x27,16,2); // 将LCD地址设置为0x27,适用于16字符和2行显示。


 // 定义常量
const int thermistorPin = 35; // 引脚连接到热敏电阻
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // 电阻值 (10k)
const float beta = 3950; // 贝塔值(典型值)
const float nominalTemperature = 25; // 计算温度系数的名义温度
const float nominalResistance = 10000; // 额定温度下的电阻值

void setup() {

  lcd.clear();
  lcd.init(); // 初始化LCD
  lcd.backlight(); // 打开LCD背光。

 // Serial.begin(115200); // 初始化串口通信
  pinMode(thermistorPin, INPUT); // 将引脚设置为输入
}

void loop() {
  int adcValue = analogRead(thermistorPin); // 读取ADC值
  float voltage = (adcValue * referenceVoltage) / 4095.0; // 计算电压
  float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // 使用更新的配置计算热敏电阻电阻值

 // 使用 Beta 参数方程计算温度
  float tempK = 1 / (((log(resistance / nominalResistance)) / beta) + (1 / (nominalTemperature + 273.15)));

  float tempC = tempK - 273.15; // 获取摄氏温度
  float tempF = 1.8 * tempC + 32.0; // 获取华氏温度

 // 打印温度
 // printf("温度: %.2f 摄氏度\n", tempC);
 // printf("温度: %.2f 华氏度\n", tempF);

 // 在LCD上显示温度
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(tempC, 1);
  lcd.write(223); // 度符号
  lcd.print("C");

  lcd.setCursor(0, 1);
  lcd.print("Temp: ");
  lcd.print(tempF, 1);
  lcd.write(223); // 度符号
  lcd.print("F");

  delay(300); // 等待 1 秒钟
}

资源与参考

文件📁

没有可用的文件。