ESP32 பயிற்சி 46/55 - HiveMQ MQTT ஐப் பயன்படுத்தி தொலைநிலை வெப்பநிலை கண்காணிப்பு | SunFounder இன் ESP32 கிட்
இந்த டுடோரியலில், ESP32 மற்றும் MQTT நெறிமுறையைப் பயன்படுத்தி தொலைநிலை வெப்பநிலை கண்காணிப்பு அமைப்பை உருவாக்குவோம். இந்த திட்டம் வெப்பநிலை தரவை MQTT ப்ரோக்கருக்கு வெளியிடவும், வலை இடைமுகத்தைப் பயன்படுத்தி LED ஐ தொலைவிலிருந்து கட்டுப்படுத்தவும் அனுமதிக்கிறது. ஒரு பொத்தானை அழுத்துவதன் மூலம், வெப்பநிலை அளவீடுகளை கிளவுட்க்கு அனுப்பலாம், மேலும் LED ஐ இயக்க அல்லது அணைக்க கட்டளைகளைப் பெறலாம்.
ESP32 என்பது உள்ளமைக்கப்பட்ட Wi-Fi மற்றும் புளூடூத் கொண்ட ஒரு சக்திவாய்ந்த மைக்ரோகண்ட்ரோலர் ஆகும், இது இன்டர்நெட் ஆஃப் திங்ஸ் (IoT) பயன்பாடுகளுக்கு ஏற்றது. இந்த அமைப்பில், வெப்பநிலையை அளவிட NTC தெர்மிஸ்டர், அளவீடுகளைத் தூண்டுவதற்கு ஒரு புஷ் பொத்தான், மற்றும் நிலையைக் குறிக்க LED ஐப் பயன்படுத்துவோம். தரவு HiveMQ க்கு அனுப்பப்படும், இது ஒரு பிரபலமான MQTT ப்ரோக்கர் ஆகும், அங்கு அதை தொலைவிலிருந்து அணுகலாம் (வீடியோவில் 00:45 இல்).
வன்பொருள் விளக்கம்
இந்த திட்டத்திற்கு, பின்வரும் கூறுகளைப் பயன்படுத்துவோம்:
- ESP32 மைக்ரோகண்ட்ரோலர்: இந்த போர்டு மத்திய செயலாக்க அலகாக செயல்படுகிறது, Wi-Fi இணைப்புகள் மற்றும் MQTT தகவல்தொடர்புகளை கையாளுகிறது.
- NTC தெர்மிஸ்டர்: இந்த வெப்பநிலை சென்சார் வெப்பநிலையின் அடிப்படையில் அதன் எதிர்ப்பை மாற்றுகிறது. இது ஒரு அனலாக் சிக்னலை வழங்குகிறது, இதை ESP32 தற்போதைய வெப்பநிலையை தீர்மானிக்க படிக்க முடியும்.
- LED: இந்த ஒளி-உமிழும் டையோடு MQTT வழியாக பெறப்பட்ட கட்டளைகளின் அடிப்படையில் நிலையைக் குறிக்க பயன்படுத்தப்படும்.
- புஷ் பொத்தான்: இந்த பொத்தான் ESP32 ஐ வெப்பநிலையை படிக்கவும், அதை MQTT ப்ரோக்கருக்கு வெளியிடவும் தூண்டும்.
டேட்டாஷீட் விவரங்கள்
| உற்பத்தியாளர் | SunFounder |
|---|---|
| பகுதி எண் | ESP32 |
| லாஜிக்/IO மின்னழுத்தம் | 3.3 V |
| விநியோக மின்னழுத்தம் | 5 V (USB வழியாக) |
| வெளியீட்டு மின்னோட்டம் (ஒரு சேனலுக்கு) | 12 mA அதிகபட்சம் |
| PWM அதிர்வெண் வழிகாட்டுதல் | 40 kHz வரை |
| உள்ளீட்டு லாஜிக் வாசல்கள் | 0.3 V (குறைந்த), 2.4 V (உயர்) |
| வெப்ப வரம்புகள் | -40 முதல் 85 °C |
| பேக்கேஜ் | ESP32-WROOM-32 |
- சேதத்தைத் தவிர்க்க சரியான மின்னழுத்த அளவுகளை உறுதி செய்யவும்.
- நிலையான அளவீடுகளை உறுதி செய்ய புஷ் பொத்தானுக்கு புல்-அப் ரெசிஸ்டர்களைப் பயன்படுத்தவும்.
- டிகப்ளிங் மின்தேக்கிகள் மின்சார விநியோகத்தை நிலைப்படுத்த உதவும்.
- தவறான அளவீடுகளைத் தவிர்க்க தெர்மிஸ்டரின் வயரிங் குறித்து கவனமாக இருங்கள்.
- வெற்றிகரமான இணைப்புக்கு உங்கள் MQTT ப்ரோக்கர் விவரங்களை சரிபார்க்கவும்.
வயரிங் வழிமுறைகள்

கூறுகளை இணைக்க, NTC தெர்மிஸ்டரை இணைப்பதன் மூலம் தொடங்கவும். தெர்மிஸ்டரின் ஒரு பின்னை ESP32 இல் உள்ள 3.3 V விநியோகத்துடன் இணைக்கவும். மற்ற பின் ESP32 இல் உள்ள பின் 36 உடன் இணைகிறது, மேலும் அது ஒரு 10 kΩ ரெசிஸ்டருடன் இணைக்கப்பட வேண்டும், இது பின்னர் தரையுடன் இணைக்கப்படுகிறது. இது ஒரு மின்னழுத்த பிரிப்பியை உருவாக்குகிறது, இது ESP32 தெர்மிஸ்டரின் எதிர்ப்பை படிக்க அனுமதிக்கிறது.
அடுத்து, LED ஐ இணைக்கவும். LED இன் நீண்ட பின் (அனோட்) ESP32 இல் உள்ள பின் 4 உடன் 220 Ω ரெசிஸ்டர் வழியாக இணைகிறது, அதே நேரத்தில் குறுகிய பின் (கேத்தோட்) தரையுடன் இணைகிறது. புஷ் பொத்தானுக்கு, ஒரு பக்கத்தை 3.3 V உடன் இணைக்கவும், மற்ற பக்கத்தை ESP32 இல் உள்ள பின் 14 உடன் இணைக்கவும். கூடுதலாக, பொத்தான் அழுத்தப்படாதபோது நிலையான LOW நிலையை உறுதி செய்ய பொத்தான் பின்னிலிருந்து தரைக்கு ஒரு 10 kΩ ரெசிஸ்டரை இணைக்கவும்.
தேவையான நூலகத்தை நிறுவவும்
PubSubClient நூலகம் இங்கே பயன்படுத்தப்படுகிறது, அதை நூலக மேலாளர் மூலம் நிறுவலாம்.
குறியீடு எடுத்துக்காட்டுகள் & விளக்கம்
அமைப்பில், நாம் தொடர் தகவல்தொடர்பை துவக்குகிறோம், Wi-Fi இணைப்பை அமைக்கிறோம், மற்றும் MQTT சேவையகத்தை உள்ளமைக்கிறோம். அமைப்பு குறியீட்டின் ஒரு பகுதி இங்கே:
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
குறியீட்டின் இந்த பகுதி Wi-Fi நெட்வொர்க்கிற்கான இணைப்பை நிறுவுகிறது மற்றும் MQTT சேவையகத்தை அமைக்கிறது. பொத்தான் மற்றும் LED க்கான பின் முறைகளும் இங்கே உள்ளமைக்கப்படுகின்றன.
லூப் செயல்பாடு தொடர்ந்து பொத்தான் நிலையை சரிபார்த்து, அழுத்தும்போது வெப்பநிலை தரவை வெளியிடுகிறது. லூப்பிலிருந்து ஒரு மையப்படுத்தப்பட்ட பகுதி இங்கே:
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
if (digitalRead(buttonPin)) {
long now = millis();
if (now - lastMsg > 5000) {
lastMsg = now;
char tempString[8];
dtostrf(thermistor(), 1, 2, tempString);
client.publish("SF/TEMP", tempString);
}
}
}
இந்த லூப்பில், ESP32 MQTT ப்ரோக்கருடன் இணைக்கப்பட்டுள்ளதா என்பதை சரிபார்க்கிறோம். பொத்தான் அழுத்தப்பட்டால், அது தெர்மிஸ்டரிலிருந்து வெப்பநிலையை படித்து, ஒவ்வொரு 5 விநாடிகளுக்கும் "SF/TEMP" தலைப்புக்கு வெளியிடுகிறது.
செயல்விளக்கம் / என்ன எதிர்பார்க்கலாம்
திட்டம் அமைக்கப்பட்டு இயங்கும்போது, பொத்தானை அழுத்தினால் தற்போதைய வெப்பநிலை MQTT ப்ரோக்கருக்கு வெளியிடப்படும். இந்த தரவை எந்த MQTT கிளையண்டிலிருந்தும் கண்காணிக்கலாம். கூடுதலாக, LED-ஐ கட்டுப்படுத்த செய்திகளை அனுப்பலாம்; "on" அனுப்பினால் அது ஒளிரும், "off" அனுப்பினால் அது அணைக்கப்படும். 15:30 நேரத்தில் உள்ள வீடியோவில் எதிர்பார்க்கப்படும் நடத்தையைப் பாருங்கள், அங்கு ஒவ்வொரு பொத்தான் அழுத்தத்திற்குப் பிறகும் வெப்பநிலை அளவீடுகள் காட்டப்படுகின்றன.
வீடியோ நேரக்குறியீடுகள்
- 00:00 தொடக்கம்
- 2:05 திட்டத்திற்கான அறிமுகம்
- 7:06 இலவச HiveMQ சேவை
- 7:56 வயரிங் விளக்கம்
- 11:11 Arduino குறியீடு விளக்கம்
- 18:46 Arduino IDE-இல் ESP32 போர்டு மற்றும் COM போர்ட்டைத் தேர்ந்தெடுத்தல்
- 20:30 HiveMQ Free ப்ரோக்கரின் செயல்விளக்கம்
/*********
:ref: https://randomnerdtutorials.com/esp32-mqtt-publish-subscribe-arduino-ide/
https://docs.sunfounder.com/projects/kepler-kit/en/latest/iotproject/5.mqtt_pub.html
*********/
#include <WiFi.h>
#include <PubSubClient.h>
//#include <Wire.h>
// Replace the next variables with your SSID/Password combination
const char* ssid = "SSID";
const char* password = "PASSWORD";
// Add your MQTT Broker address, example:
const char* mqtt_server = "broker.hivemq.com";
const char* unique_identifier = "sunfounder-client-sdgvsda";
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
int value = 0;
// LED Pin
const int ledPin = 4;
const int buttonPin = 14;
// When you connect to WIFI, only 36 39 34 35 32 33 pins can be used for analog reading.
// Define constants
const int thermistorPin = 36; // 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() {
Serial.begin(115200);
// default settings
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
String messageTemp;
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
messageTemp += (char)message[i];
}
Serial.println();
// If a message is received on the topic "SF/LED", you check if the message is either "on" or "off".
// Changes the output state according to the message
if (String(topic) == "SF/LED") {
Serial.print("Changing state to ");
if (messageTemp == "on") {
Serial.println("on");
digitalWrite(ledPin, HIGH);
} else if (messageTemp == "off") {
Serial.println("off");
digitalWrite(ledPin, LOW);
}
}
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(unique_identifier)) {
Serial.println("connected");
// Subscribe
client.subscribe("SF/LED");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
float thermistor() {
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
Serial.print("Temp: ");
Serial.println(tempC);
delay(200); //wait for 200 milliseconds
return tempC;
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// if the button pressed, publish the temperature to topic "SF/TEMP"
if (digitalRead(buttonPin)) {
long now = millis();
if (now - lastMsg > 5000) {
lastMsg = now;
char tempString[8];
dtostrf(thermistor(), 1, 2, tempString);
client.publish("SF/TEMP", tempString);
}
}
}
Common Course Links
Common Course Files
வளங்கள் மற்றும் மேற்கோள்கள்
-
ஆவணங்கள்ESP32 Tutorial 46/55 - SunFounder doc page for IoT Communication with MQTTdocs.sunfounder.com
கோப்புகள்📁
கோப்புகள் கிடைக்கவில்லை.