Tutorial ESP32 25/55 - Măsurarea temperaturii folosind NTC și LCD | Kitul de învățare IoT ESP32 de la SunFounder
În acest tutorial, vom învăța cum să măsurăm temperatura folosind un termistor cu coeficient negativ de temperatură (NTC) și să afișăm citirile pe un ecran LCD folosind microcontrolerul ESP32. Proiectul va implica conectarea unui termistor NTC la ESP32 și utilizarea unui LCD pentru a afișa citirile de temperatură atât în Celsius, cât și în Fahrenheit. Aceasta este o modalitate excelentă de a începe cu tehnicile de detectare a temperaturii și afișare folosind platforma ESP32.
Vom folosi placa de extensie ESP32 de la SunFounder, care îmbunătățește capacitățile ESP32 cu Wi-Fi și Bluetooth integrate. Această placă poate fi integrată ușor cu diverse senzori și afișaje, fiind ideală pentru proiecte IoT. Termistorul NTC va oferi citiri de temperatură pe baza rezistenței sale, care variază invers proporțional cu temperatura. Pentru clarificări suplimentare privind configurarea și codul, asigurați-vă că urmăriți videoclipul (în videoclip la 00:00).
Hardware Explicat
Principalele componente utilizate în acest proiect includ microcontrolerul ESP32, un termistor NTC, un rezistor și un afișaj LCD. ESP32 servește ca unitate centrală de procesare, gestionând datele de la termistor și controlând afișajul LCD. Termistorul NTC își schimbă rezistența în funcție de temperatură, permițându-ne să calculăm temperatura pe baza configurației divizorului de tensiune cu un rezistor fix.
Afișajul LCD va arăta citirile de temperatură atât în Celsius, cât și în Fahrenheit. Vom folosi protocolul I2C pentru a comunica cu LCD-ul, ceea ce simplifică cablarea prin reducerea numărului de pini necesari. Termistorul NTC are o caracteristică prin care rezistența sa scade odată cu creșterea temperaturii, ceea ce este crucial pentru calculele noastre.
Detalii din Fișa Tehnică
| Producător | SunFounder |
|---|---|
| Număr de piesă | Termistor NTC |
| Rezistență Nominală | 10 kΩ |
| Valoare Beta | 3950 K |
| Interval de Temperatură | -40°C până la 125°C |
| Pachet | Axial |
- Asigurați-vă că termistorul este evaluat pentru intervalul de temperatură așteptat.
- Folosiți un rezistor de 10 kΩ pentru divizorul de tensiune; altfel, citirile vor fi inexacte.
- Verificați conexiunile pentru a evita scurtcircuitele.
- Păstrați adresa I2C a LCD-ului corectă (de obicei 0x27).
- Folosiți niveluri adecvate de alimentare pentru ESP32 și periferice.
- Verificați ca viteza de transmisie a monitorului serial să corespundă setărilor din cod (115200).
Instrucțiuni de Cablare


Pentru a cabla componentele, începeți prin conectarea termistorului NTC la ESP32. Termistorul nu are polaritate, deci poate fi conectat în orice direcție. Conectați un terminal al termistorului la pinul de masă (GND) de pe ESP32. Celălalt terminal se conectează la un rezistor de 10 kΩ, care apoi se conectează la pinul de 3.3V de pe ESP32. Joncțiunea dintre termistor și rezistor se va conecta la pinul 35 de pe ESP32, care va citi tensiunea pentru calculele de temperatură.
Pentru LCD, conectați pinul de masă (de obicei al doilea pin de sus) la GND de pe ESP32. Apoi, conectați VCC (adesea primul pin) la pinul de 5V de pe ESP32. Pinul SDA (de obicei al treilea pin) ar trebui să se conecteze la pinul 21 de pe ESP32, iar pinul SCL (adesea al patrulea pin) ar trebui să se conecteze la pinul 22. Asigurați-vă că toate conexiunile sunt sigure și verificați de două ori numerele pinilor pentru a evita orice greșeli.
Exemple de Cod & Explicație
Codul începe prin definirea constantelor pentru termistor, inclusiv numărul pinului, tensiunea de referință și valorile rezistenței. Funcția de configurare inițializează comunicarea serială și setează pinul termistorului ca intrare.
const int thermistorPin = 35; // Pin conectat la termistor
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // celălalt rezistor
Bucla principală citește valoarea analogică de pe pinul termistorului, calculează rezistența și apoi calculează temperatura atât în Celsius, cât și în Fahrenheit folosind ecuația parametrului Beta. Valorile calculate sunt afișate pe monitorul serial.
int adcValue = analogRead(thermistorPin); // Citește valoarea ADC
float voltage = (adcValue * referenceVoltage) / 4095.0; // Calculează tensiunea
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Calculează rezistența termistorului
În final, temperatura este afișată pe LCD. Funcția lcd.print() este folosită pentru a afișa valorile temperaturii, împreună cu simbolul gradului.
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.write(223); // Simbolul gradului
lcd.print("C");
Acest cod actualizează efectiv LCD-ul la fiecare 300 de milisecunde cu cele mai recente citiri de temperatură, permițând monitorizarea în timp real.
Demonstrație / Ce să Vă Așteptați
După rularea codului și finalizarea cablajului, ar trebui să vedeți citirile de temperatură afișate pe LCD atât în grade Celsius, cât și în Fahrenheit. Dacă țineți termistorul în mână, ar trebui să observați creșterea temperaturii pe măsură ce rezistența scade. Fiți atenți la polaritatea inversată și asigurați-vă că conexiunile sunt sigure, deoarece cablarea necorespunzătoare poate duce la citiri inexacte (în video la 04:50).
Marcaje temporale video
- 00:00 Început
- 1:50 introducere în proiect
- 5:32 cablarea explicată
- 8:20 codul Arduino NTC pentru ESP32 explicat
- 13:38 Selectarea plăcii ESP32 și a portului COM în Arduino IDE
- 15:20 Demonstrație măsurare temperatură NTC
- 17:34 Temperatura NTC pe LCD1602 cu ESP32
- 18:42 Codul Arduino NTC cu LCD explicat
- 21:15 Demonstrație temperatură pe LCD
- 23:13 LCD verde sau LCD albastru 1601?
// 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
Resurse și referințe
-
DocumentațieESP32 Tutorial 25/55- SunFounder doc page for NTS thermometerdocs.sunfounder.com
-
DocumentațieLearn about NTC Thermistordocs.sunfounder.com
Fișiere📁
Nu sunt disponibile fișiere.