ESP32 Упатство 25/55 - Мерење температура користејќи NTC и LCD | SunFounder's ESP32 IoT Learning комплет
Во ова упатство, ќе научиме како да мериме температура користејќи негативен температурен коефициент (NTC) термистор и да ги прикажуваме отчитувањата на LCD екран користејќи го ESP32 микроконтролерот. Проектот ќе вклучува поврзување на NTC термистор со ESP32 и користење на LCD за прикажување на температурните отчитувања и во Целзиусови и во Фаренхајтови степени. Ова е одличен начин да започнете со техниките за мерење температура и прикажување користејќи ја ESP32 платформата.
Ќе ја користиме SunFounder ESP32 продолжната плоча, која ги подобрува можностите на ESP32 со вградени Wi-Fi и Bluetooth. Оваа плоча може лесно да се интегрира со различни сензори и дисплеи, што ја прави идеална за IoT проекти. NTC термисторот ќе обезбеди температурни отчитувања врз основа на неговиот отпор, кој варира обратнопропорционално со температурата. За дополнително појаснување на поставувањето и кодот, задолжително погледнете го видеото (во видеото на 00:00).
Објаснување на хардверот
Главните компоненти користени во овој проект вклучуваат ESP32 микроконтролер, NTC термистор, отпорник и LCD дисплеј. ESP32 служи како централна процесорска единица, обработувајќи ги податоците од термисторот и контролирајќи го LCD дисплејот. NTC термисторот го менува својот отпор според температурата, што ни овозможува да ја пресметаме температурата врз основа на конфигурацијата на делител на напон со фиксен отпорник.
LCD дисплејот ќе ги прикажува температурните отчитувања и во Целзиусови и во Фаренхајтови степени. Ќе го користиме I2C протоколот за комуникација со LCD, што го поедноставува поврзувањето со намалување на бројот на потребни пинови. NTC термисторот има карактеристика каде неговиот отпор се намалува со зголемување на температурата, што е клучно за нашите пресметки.
Детали од техничката документација
| Производител | SunFounder |
|---|---|
| Број на дел | NTC термистор |
| Номинален отпор | 10 kΩ |
| Бета вредност | 3950 K |
| Температурен опсег | -40°C до 125°C |
| Пакет | Аксијален |
- Осигурете се дека термисторот е оценет за очекуваниот температурен опсег.
- Користете отпорник од 10 kΩ за делителот на напон; во спротивно, отчитувањата ќе бидат неточни.
- Проверете ги врските за да избегнете кратки споеви.
- Чувајте ја I2C адресата на LCD точна (обично 0x27).
- Користете соодветни нивоа на напојување за ESP32 и периферните уреди.
- Проверете дали брзината на серискиот монитор одговара на поставките во кодот (115200).
Инструкции за поврзување


За да ги поврзете компонентите, започнете со поврзување на NTC термисторот со ESP32. Термисторот нема поларитет, па може да се поврзе во било која насока. Поврзете еден извод од термисторот со пин за заземјување (GND) на ESP32. Другиот извод се поврзува со отпорник од 10 kΩ, кој потоа се поврзува со 3.3V пин на ESP32. Спојот помеѓу термисторот и отпорникот ќе се поврзе со пин 35 на ESP32, кој ќе го чита напонот за пресметки на температурата.
За LCD, поврзете го пинот за заземјување (обично вториот пин од врвот) со GND на ESP32. Потоа, поврзете го VCC (често првиот пин) со 5V пин на ESP32. SDA пинот (обично третиот пин) треба да се поврзе со пин 21 на ESP32, а SCL пинот (често четвртиот пин) треба да се поврзе со пин 22. Осигурете се дека сите врски се безбедни и двојно проверете ги броевите на пиновите за да избегнете грешки.
Примери на код и објаснување
Кодот започнува со дефинирање на константите за термисторот, вклучувајќи го бројот на пинот, референтниот напон и вредностите на отпорот. Функцијата за поставување ја иницијализира сериската комуникација и го поставува пинот на термисторот како влез.
const int thermistorPin = 35; // Пин поврзан со термисторот
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // 'другиот' отпорник
Главната јамка ја чита аналогната вредност од пинот на термисторот, го пресметува отпорот, а потоа ја пресметува температурата и во Целзиусови и во Фаренхајтови степени користејќи ја равенката со Бета параметарот. Пресметаните вредности се печатат на серискиот монитор.
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");
Овој код ефективно го ажурира LCD секои 300 милисекунди со најновите температурни отчитувања, овозможувајќи следење во реално време.
Демонстрација / Што да очекувате
По извршувањето на кодот и завршувањето на жичањето, треба да ги видите отчитувањата на температурата прикажани на LCD екранот и во Целзиусови и во Фаренхајтови степени. Ако го држите термисторот во рака, треба да забележите дека температурата се зголемува како што отпорот се намалува. Бидете внимателни со обратен поларитет и осигурете се дека врските се сигурни, бидејќи неправилното жичање може да доведе до неточни отчитувања (во видеото на 04:50).
Временски ознаки на видеото
- 00:00 Почеток
- 1:50 вовед во проектот
- 5:32 објаснето жичањето
- 8:20 објаснет Arduino NTC кодот за ESP32
- 13:38 Избор на ESP32 плоча и COM порт во Arduino IDE
- 15:20 Демонстрација на мерење температура со NTC
- 17:34 NTC температура на LCD1602 со ESP32
- 18:42 објаснет Arduino кодот со LCD
- 21:15 Демонстрација на температура на LCD
- 23:13 Зелен LCD или син LCD1601?
// Define constants
const int thermistorPin = 35; // Pin connected to the thermistor
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // the 'other' resistor
const float beta = 3950; // Beta value (Typical Value)
const float nominalTemperature = 25; // Nominal temperature for calculating the temperature coefficient
const float nominalResistance = 10000; // Resistance value at nominal temperature
void setup() {
Serial.begin(115200); // Initialize serial communication
pinMode(thermistorPin, INPUT); // Set pin as input
}
void loop() {
int adcValue = analogRead(thermistorPin); // Read ADC value
float voltage = (adcValue * referenceVoltage) / 4095.0; // Calculate voltage
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Calculate thermistor resistance with updated configuration
// Calculate temperature using the Beta parameter equation
float tempK = 1 / (((log(resistance / nominalResistance)) / beta) + (1 / (nominalTemperature + 273.15)));
float tempC = tempK - 273.15; // Get temperature in Celsius
float tempF = 1.8 * tempC + 32.0; // Get temperature in Fahrenheit
//Print temperature
printf("TempC: %.2f C\n", tempC);
printf("TempF: %.2f F\n", tempF);
delay(300); // Wait 1 second
}
/*
This is Lesson 25/55 of SunFounder's ESP32 IoT Learning kit code
displays temperature from NTC on LCD screen
written by Ahmad Shamshiri for SunFounder's ESP32 IoT Learnign kit
watch full video https://youtu.be/zJh-gWY0DmE
download this code, wiring diagram and other resources from https://robojax.com/RJT707
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//SDA->21,SCL->22
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
// Define constants
const int thermistorPin = 35; // Pin connected to the thermistor
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // Resistance value (10k)
const float beta = 3950; // Beta value (Typical Value)
const float nominalTemperature = 25; // Nominal temperature for calculating the temperature coefficient
const float nominalResistance = 10000; // Resistance value at nominal temperature
void setup() {
lcd.clear();
lcd.init();// initialize the lcd
lcd.backlight(); // Turns on the LCD backlight.
//Serial.begin(115200); // Initialize serial communication
pinMode(thermistorPin, INPUT); // Set pin as input
}
void loop() {
int adcValue = analogRead(thermistorPin); // Read ADC value
float voltage = (adcValue * referenceVoltage) / 4095.0; // Calculate voltage
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Calculate thermistor resistance with updated configuration
// Calculate temperature using the Beta parameter equation
float tempK = 1 / (((log(resistance / nominalResistance)) / beta) + (1 / (nominalTemperature + 273.15)));
float tempC = tempK - 273.15; // Get temperature in Celsius
float tempF = 1.8 * tempC + 32.0; // Get temperature in Fahrenheit
//Print temperature
//printf("TempC: %.2f C\n", tempC);
//printf("TempF: %.2f F\n", tempF);
// Display temperature on LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.write(223); // Degree symbol
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(tempF, 1);
lcd.write(223); // Degree symbol
lcd.print("F");
delay(300); // Wait 1 second
}
Common Course Links
Common Course Files
Ресурси и референци
-
ДокументацијаESP32 Tutorial 25/55 - SunFounder doc page for NTC thermometerdocs.sunfounder.com
-
ДокументацијаLearn about NTC Thermistordocs.sunfounder.com
Датотеки📁
Нема достапни датотеки.