ESP32 Tutorial 25/55 - Temperatuur meten met NTC & LCD | SunFounder's ESP32 IoT-leerkit
In deze tutorial leren we hoe we temperatuur kunnen meten met een NTC-thermistor (Negative Temperature Coefficient) en de metingen kunnen weergeven op een LCD-scherm met behulp van de ESP32-microcontroller. Het project omvat het aansluiten van een NTC-thermistor op de ESP32 en het gebruik van een LCD om temperatuurmetingen weer te geven in zowel Celsius als Fahrenheit. Dit is een uitstekende manier om te beginnen met temperatuursensing en weergavetechnieken op het ESP32-platform.
We zullen gebruikmaken van SunFounder's ESP32-uitbreidingsbord, dat de mogelijkheden van de ESP32 verbetert met ingebouwde Wi-Fi en Bluetooth. Dit bord kan eenvoudig worden geïntegreerd met verschillende sensoren en displays, waardoor het ideaal is voor IoT-projecten. De NTC-thermistor zal temperatuurmetingen leveren op basis van zijn weerstand, die omgekeerd evenredig varieert met de temperatuur. Voor verdere verduidelijking over de opstelling en code, bekijk zeker de video (in video op 00:00).
Hardware uitgelegd
De belangrijkste componenten die in dit project worden gebruikt, zijn de ESP32-microcontroller, een NTC-thermistor, een weerstand en een LCD-display. De ESP32 fungeert als de centrale verwerkingseenheid, die gegevens van de thermistor verwerkt en het LCD-display aanstuurt. De NTC-thermistor verandert zijn weerstand afhankelijk van de temperatuur, waardoor we de temperatuur kunnen berekenen op basis van de spanningsdelerconfiguratie met een vaste weerstand.
Het LCD-display toont de temperatuurmetingen in zowel Celsius als Fahrenheit. We gebruiken het I2C-protocol om met het LCD te communiceren, wat de bedrading vereenvoudigt door het aantal benodigde pinnen te verminderen. De NTC-thermistor heeft de eigenschap dat zijn weerstand afneemt bij een temperatuurstijging, wat cruciaal is voor onze berekeningen.
Datasheetdetails
| Fabrikant | SunFounder |
|---|---|
| Onderdeelnummer | NTC-thermistor |
| Nominale weerstand | 10 kΩ |
| Bètawaarde | 3950 K |
| Temperatuurbereik | -40°C tot 125°C |
| Behuizing | Axiaal |
- Zorg ervoor dat de thermistor geschikt is voor het verwachte temperatuurbereik.
- Gebruik een 10 kΩ-weerstand voor de spanningsdeler; anders zijn de metingen onnauwkeurig.
- Controleer de verbindingen om kortsluiting te voorkomen.
- Houd het I2C-adres van het LCD correct (meestal 0x27).
- Gebruik geschikte voedingsspanningsniveaus voor de ESP32 en randapparatuur.
- Controleer of de baudrate van de seriële monitor overeenkomt met de code-instellingen (115200).
Bedradingsinstructies


Om de componenten te bedraden, begin met het aansluiten van de NTC-thermistor op de ESP32. De thermistor heeft geen polariteit, dus kan in beide richtingen worden aangesloten. Verbind één aansluitdraad van de thermistor met de aardingspin (GND) op de ESP32. De andere aansluitdraad verbindt met een 10 kΩ-weerstand, die vervolgens verbindt met de 3.3V-pin op de ESP32. Het knooppunt tussen de thermistor en de weerstand wordt verbonden met pin 35 op de ESP32, die de spanning leest voor temperatuurberekeningen.
Voor het LCD, verbind de aardingspin (meestal de tweede pin van boven) met GND op de ESP32. Verbind vervolgens de VCC (vaak de eerste pin) met de 5V-pin op de ESP32. De SDA-pin (meestal de derde pin) moet worden verbonden met pin 21 op de ESP32, en de SCL-pin (vaak de vierde pin) met pin 22. Zorg ervoor dat alle verbindingen stevig zijn en controleer de pinnummers dubbel om fouten te voorkomen.
Codevoorbeelden & uitleg
De code begint met het definiëren van de constanten voor de thermistor, inclusief het pinnummer, de referentiespanning en weerstandswaarden. De setup-functie initialiseert de seriële communicatie en stelt de thermistorpin in als invoer.
const int thermistorPin = 35; // Pin verbonden met de thermistor
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // de 'andere' weerstand
De hoofdloop leest de analoge waarde van de thermistorpin, berekent de weerstand en berekent vervolgens de temperatuur in zowel Celsius als Fahrenheit met behulp van de bètaparametervergelijking. De berekende waarden worden naar de seriële monitor geprint.
int adcValue = analogRead(thermistorPin); // Lees ADC-waarde
float voltage = (adcValue * referenceVoltage) / 4095.0; // Bereken spanning
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Bereken thermistorweerstand
Tot slot wordt de temperatuur weergegeven op het LCD. De functie lcd.print() wordt gebruikt om de temperatuurwaarden weer te geven, samen met het graden-symbool.
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.write(223); // Graden-symbool
lcd.print("C");
Deze code werkt het LCD elke 300 milliseconden bij met de nieuwste temperatuurmetingen, waardoor real-time monitoring mogelijk is.
Demonstratie / Wat te verwachten
Na het uitvoeren van de code en het voltooien van de bedrading, zou je de temperatuurmetingen op de LCD moeten zien in zowel Celsius als Fahrenheit. Als je de thermistor in je hand houdt, zou je moeten merken dat de temperatuur stijgt naarmate de weerstand afneemt. Wees voorzichtig met omgekeerde polariteit en zorg ervoor dat de verbindingen stevig zijn, aangezien onjuiste bedrading kan leiden tot onnauwkeurige metingen (in video op 04:50).
Videotijdstippen
- 00:00 Start
- 1:50 introductie van het project
- 5:32 bedrading uitgelegd
- 8:20 Arduino NTC-code voor ESP32 uitgelegd
- 13:38 ESP32-board en COM-poort selecteren in Arduino IDE
- 15:20 NTC-temperatuurmeting demonstratie
- 17:34 NTC-temperatuur op LCD1602 met ESP32
- 18:42 NTC Arduino-code met LCD uitgelegd
- 21:15 Demonstratie van temperatuur op LCD
- 23:13 Groene LCD of blauwe 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
Hulpmiddelen en referenties
-
DocumentatieESP32 Tutorial 25/55 - SunFounder doc page for NTC thermometerdocs.sunfounder.com
-
DocumentatieLearn about NTC Thermistordocs.sunfounder.com
Bestanden📁
Geen bestanden beschikbaar.