Návod na ESP32 25/55 - Meranie teploty pomocou NTC a LCD | SunFounderova ESP32 IoT výučbová súprava
V tomto návode sa naučíme, ako merať teplotu pomocou termistora so záporným teplotným koeficientom (NTC) a zobrazovať namerané hodnoty na LCD obrazovke pomocou mikrokontroléra ESP32. Projekt bude zahŕňať pripojenie NTC termistora k ESP32 a použitie LCD na zobrazenie teploty v stupňoch Celzia aj Fahrenheita. Je to skvelý spôsob, ako začať s technikami snímania teploty a zobrazovania pomocou platformy ESP32.
Využijeme rozširujúcu dosku SunFounder pre ESP32, ktorá rozširuje možnosti ESP32 o vstavané Wi-Fi a Bluetooth. Táto doska sa dá ľahko integrovať s rôznymi senzormi a displejmi, čo ju robí ideálnou pre IoT projekty. NTC termistor poskytne hodnoty teploty na základe svojho odporu, ktorý sa mení nepriamo úmerne s teplotou. Pre ďalšie objasnenie zapojenia a kódu si určite pozrite video (vo videu o 00:00).
Vysvetlenie hardvéru
Hlavné komponenty použité v tomto projekte zahŕňajú mikrokontrolér ESP32, NTC termistor, rezistor a LCD displej. ESP32 slúži ako centrálna procesorová jednotka, ktorá spracováva údaje z termistora a riadi LCD displej. NTC termistor mení svoj odpor podľa teploty, čo nám umožňuje vypočítať teplotu na základe konfigurácie napäťového deliča s pevným rezistorom.
LCD displej zobrazí hodnoty teploty v stupňoch Celzia aj Fahrenheita. Na komunikáciu s LCD použijeme protokol I2C, ktorý zjednodušuje zapojenie znížením počtu potrebných pinov. NTC termistor má charakteristiku, pri ktorej jeho odpor klesá so zvyšujúcou sa teplotou, čo je kľúčové pre naše výpočty.
Podrobnosti z datasheetu
| Výrobca | SunFounder |
|---|---|
| Označenie dielu | NTC termistor |
| Nominálny odpor | 10 kΩ |
| Hodnota Beta | 3950 K |
| Rozsah teplôt | -40°C až 125°C |
| Puzdro | Axiálne |
- Uistite sa, že termistor je dimenzovaný na očakávaný rozsah teplôt.
- Použite 10 kΩ rezistor pre napäťový delič; inak budú namerané hodnoty nepresné.
- Skontrolujte pripojenia, aby ste predišli skratom.
- Uistite sa, že adresa I2C LCD je správna (zvyčajne 0x27).
- Použite vhodné úrovne napájania pre ESP32 a periférie.
- Skontrolujte, či rýchlosť prenosu sériového monitora zodpovedá nastaveniam kódu (115200).
Pokyny na zapojenie


Pri zapájaní komponentov začnite pripojením NTC termistora k ESP32. Termistor nemá polaritu, takže ho možno pripojiť v oboch smeroch. Pripojte jeden vývod termistora k pinu uzemnenia (GND) na ESP32. Druhý vývod sa pripojí k 10 kΩ rezistoru, ktorý sa potom pripojí k pinu 3.3V na ESP32. Spojenie medzi termistorom a rezistorom sa pripojí na pin 35 na ESP32, ktorý bude čítať napätie pre výpočet teploty.
Pre LCD pripojte uzemňovací pin (zvyčajne druhý pin zhora) na GND na ESP32. Potom pripojte VCC (často prvý pin) na 5V pin na ESP32. Pin SDA (zvyčajne tretí pin) by sa mal pripojiť na pin 21 na ESP32 a pin SCL (často štvrtý pin) by sa mal pripojiť na pin 22. Uistite sa, že všetky pripojenia sú bezpečné a dvakrát skontrolujte čísla pinov, aby ste predišli chybám.
Príklady kódu a vysvetlenie
Kód začína definovaním konštánt pre termistor, vrátane čísla pinu, referenčného napätia a hodnôt odporu. Funkcia setup inicializuje sériovú komunikáciu a nastaví pin termistora ako vstup.
const int thermistorPin = 35; // Pin pripojený k termistoru
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // 'druhý' rezistor
Hlavná slučka číta analógovú hodnotu z pinu termistora, vypočíta odpor a potom vypočíta teplotu v stupňoch Celzia aj Fahrenheita pomocou rovnice s parametrom Beta. Vypočítané hodnoty sa vytlačia na sériový monitor.
int adcValue = analogRead(thermistorPin); // Prečítanie ADC hodnoty
float voltage = (adcValue * referenceVoltage) / 4095.0; // Výpočet napätia
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Výpočet odporu termistora
Nakoniec sa teplota zobrazí na LCD. Funkcia lcd.print() sa používa na zobrazenie hodnôt teploty spolu so symbolom stupňa.
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.write(223); // Symbol stupňa
lcd.print("C");
Tento kód efektívne aktualizuje LCD každých 300 milisekúnd s najnovšími hodnotami teploty, čo umožňuje monitorovanie v reálnom čase.
Demonštrácia / Čo očakávať
Po spustení kódu a dokončení zapojenia by ste mali vidieť hodnoty teploty zobrazené na LCD v stupňoch Celzia aj Fahrenheita. Ak podržíte termistor v ruke, mali by ste si všimnúť, že teplota stúpa, keď sa odpor znižuje. Buďte opatrní pri obrátenej polarite a uistite sa, že sú pripojenia pevné, pretože nesprávne zapojenie môže viesť k nepresným hodnotám (vo videu o 04:50).
Časové značky videa
- 00:00 Začiatok
- 1:50 úvod do projektu
- 5:32 vysvetlenie zapojenia
- 8:20 vysvetlenie Arduino NTC kódu pre ESP32
- 13:38 Výber dosky ESP32 a COM portu v Arduino IDE
- 15:20 Ukážka merania teploty NTC
- 17:34 NTC teplota na LCD1602 s ESP32
- 18:42 vysvetlenie Arduino kódu NTC s LCD
- 21:15 Ukážka teploty na LCD
- 23:13 Zelené LCD alebo modré 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
Zdroje a referencie
-
DokumentáciaESP32 Tutorial 25/55 - SunFounder doc page for NTC thermometerdocs.sunfounder.com
-
DokumentáciaLearn about NTC Thermistordocs.sunfounder.com
Súbory📁
Žiadne súbory nie sú k dispozícii.