ESP32 பயிற்சி 53/55 - ஒரு LCD இணைய கடிகாரத்தை உருவாக்குங்கள் | SunFounder இன் ESP32 IoT கற்றல் கிட்
இந்த டுடோரியலில், SunFounder நிறுவனத்தின் ESP32 மைக்ரோகண்ட்ரோலரைப் பயன்படுத்தி இணையத்துடன் இணைக்கப்பட்ட LCD கடிகாரத்தை உருவாக்குவோம். இந்த கடிகாரம் இணையம் வழியாக தானாகவே தற்போதைய நேரத்துடன் ஒத்திசைந்து, 12 மணி நேரம் அல்லது 24 மணி நேர வடிவத்தில் நேரத்தையும், வாரத்தின் நாள், தேதி மற்றும் மாதத்தையும் காண்பிக்கும். நெட்வொர்க் டைம் புரோட்டோகால் (NTP) பயன்பாடு கடிகாரம் கைமுறை சரிசெய்தல் இல்லாமல் துல்லியமாக இருக்க உதவுகிறது.
இந்த திட்டம் ESP32 இன் உள்ளமைக்கப்பட்ட Wi-Fi திறன்களைப் பயன்படுத்தி NTP சேவையகத்திலிருந்து தற்போதைய நேரத்தைப் பெறுகிறது. நேரத்தைக் காண்பிக்க லிக்விட் கிரிஸ்டல் டிஸ்ப்ளே (LCD) ஐப் பயன்படுத்துவோம், இது பயனர் விருப்பங்களுக்கு ஏற்ப வடிவமைக்கப்படலாம். எந்த படிகளிலும் மேலும் தெளிவுக்கு, வீடியோவைப் பார்க்கவும் (வீடியோவில் 00:30 இல்).
வன்பொருள் விளக்கம்
இந்த திட்டத்திற்கான முக்கிய கூறுகளில் ESP32 மைக்ரோகண்ட்ரோலர், 20x4 LCD டிஸ்ப்ளே மற்றும் மின்சார ஆதாரம் ஆகியவை அடங்கும். ESP32 என்பது உள்ளமைக்கப்பட்ட Wi-Fi மற்றும் புளூடூத் கொண்ட சக்திவாய்ந்த மைக்ரோகண்ட்ரோலர் ஆகும், இது IoT திட்டங்களுக்கு ஏற்றது. LCD நேரம் மற்றும் தேதியைக் காண்பிக்கப் பயன்படுகிறது, மேலும் இது வெவ்வேறு டிஸ்ப்ளே அளவுகளுக்கு உள்ளமைக்கப்படலாம்.
LCD ஆனது I2C புரோட்டோகால் மூலம் செயல்படுகிறது, இது இரண்டு கம்பிகள் (SDA மற்றும் SCL) மூலம் தொடர்பு கொள்ள அனுமதிக்கிறது. இது வயரிங்கை எளிதாக்குகிறது மற்றும் ESP32 இல் தேவையான பின்களின் எண்ணிக்கையை குறைக்கிறது. NTP சேவையகத்துடனான இணைப்பு ESP32 இன் Wi-Fi திறன்களைப் பயன்படுத்தி செய்யப்படுகிறது, இது நிகழ்நேர புதுப்பிப்புகளை செயல்படுத்துகிறது.
- சரியான மின்சார விநியோக மின்னழுத்தத்தை (5 V) உறுதி செய்யவும்.
- நிலைத்தன்மைக்காக மின்சார பின்களுக்கு அருகில் டிகப்பிளிங் மின்தேக்கிகளைப் பயன்படுத்தவும்.
- பஸ் மோதல்களைத் தவிர்க்க I2C இணைப்புகளில் கவனமாக இருங்கள்.
- LCD இன் I2C முகவரியை சரிபார்க்கவும் (0x27 அல்லது 0x3F).
- துல்லியமான இணைப்புக்கு Wi-Fi சான்றுகளை சரிபார்க்கவும்.
- பகல் சேமிப்பு நேர மாற்றங்களை உங்கள் குறியீட்டில் கையாளவும்.
- உங்கள் புவியியல் இருப்பிடத்திற்கு சரியான NTP சேவையகத்தைப் பயன்படுத்தவும்.
- டிஸ்ப்ளேவைப் புதுப்பிக்கும் முன் எப்போதும் LCD ஐ அழிக்கவும்.
வயரிங் வழிமுறைகள்

ESP32 ஐ LCD உடன் இணைக்க, மின்சார பின்களை இணைப்பதன் மூலம் தொடங்கவும். LCD இன் VCC ஐ ESP32 இன் 5V பின்னுடனும், LCD இன் GND பின்னை ESP32 இன் GND பின்னுடனும் இணைக்கவும். I2C தொடர்புக்கு, LCD இன் SDA பின்னை ESP32 இன் GPIO 21 உடனும், SCL பின்னை GPIO 22 உடனும் இணைக்கவும். தொடர்பு சிக்கல்களைத் தவிர்க்க இணைப்புகள் பாதுகாப்பாக இருப்பதை உறுதி செய்யவும்.
வயரிங் அமைக்கும்போது, எளிதான இணைப்புகளுக்கு ஆண்-பெண் ஜம்பர் கம்பிகளைப் பயன்படுத்தவும். உங்கள் LCD க்கு வேறு I2C முகவரி அல்லது பின் உள்ளமைவு இருந்தால், குறியீட்டை அதற்கேற்ப சரிசெய்யவும். தேவைப்பட்டால் மாற்று வயரிங் விருப்பங்களுக்கு வீடியோவைப் பார்க்கவும் (வீடியோவில் 05:30 இல்).
குறியீடு எடுத்துக்காட்டுகள் & விளக்கம்
குறியீடு LCD ஐ துவக்கி, NTP சேவையகத்திலிருந்து நேரத் தரவைப் பெற Wi-Fi இணைப்பை அமைக்கிறது. ssid மற்றும் password போன்ற முக்கிய அடையாளங்காட்டிகள் Wi-Fi நெட்வொர்க்குடன் இணைக்கப் பயன்படுகின்றன, அதே நேரத்தில் ntpServer1 மற்றும் ntpServer2 பயன்படுத்த வேண்டிய NTP சேவையகங்களைக் குறிப்பிடுகின்றன.
const char* ssid = "dars";
const char* password = "llllllllllllll";
const char* ntpServer1 = "pool.ntp.org";
const char* ntpServer2 = "time.nist.gov";
இந்த பகுதி நெட்வொர்க் சான்றுகள் மற்றும் சேவையக முகவரிகளைக் காட்டுகிறது. உங்கள் Wi-Fi SSID மற்றும் கடவுச்சொல்லை துல்லியமாக உள்ளிடுவதை உறுதி செய்யவும், ஏனெனில் எந்த தவறும் ESP32 இணையத்துடன் இணைவதைத் தடுக்கும்.
printLocalTime() செயல்பாட்டில், தற்போதைய நேரம் காட்சிக்காக வடிவமைக்கப்படுகிறது. tm அமைப்பு நேரத் தகவலைச் சேமிக்கப் பயன்படுகிறது, அதே நேரத்தில் strftime நேரத்தை படிக்கக்கூடிய சரமாக வடிவமைக்க உதவுகிறது.
void printLocalTime() {
struct tm timeinfo;
if(!getLocalTime(&timeinfo)) {
Serial.println("No time available (yet)");
return;
}
char timeHour[5];
strftime(timeHour, 5, "%H", &timeinfo);
இந்த குறியீடு உள்ளூர் நேரம் கிடைக்கிறதா என்பதைச் சரிபார்த்து மணிநேரத்தைப் பெறுகிறது. வடிவமைக்கப்பட்ட மணிநேரம் பின்னர் LCD இல் தற்போதைய நேரத்தைக் காண்பிக்கப் பயன்படுகிறது. நேரம் இன்னும் கிடைக்கவில்லை என்றால், அது Serial Monitor இல் ஒரு செய்தியை அச்சிடுகிறது.
இறுதியாக, setup() செயல்பாடு LCD ஐ துவக்கி Wi-Fi உடன் இணைக்கிறது. இது NTP சேவையக அமைப்புகளை உள்ளமைத்து நேர ஒத்திசைவுக்கான கால்பேக்கை அமைக்கிறது.
void setup() {
Serial.begin(115200);
lcd.init(); // initialize the lcd
lcd.backlight(); // Turns on the LCD backlight.
Serial.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
இந்த பகுதி பிழைத்திருத்தத்திற்காக Serial Monitor ஐ துவக்குகிறது, LCD ஐ அமைக்கிறது, மேலும் குறிப்பிட்ட Wi-Fi நெட்வொர்க்குடன் இணைக்க முயற்சிக்கிறது. இணைப்பு நிலை Serial Monitor இல் அச்சிடப்படும், இது இணைப்பை சரிபார்க்க உங்களை அனுமதிக்கிறது.
செயல்விளக்கம் / என்ன எதிர்பார்க்கலாம்
வெற்றிகரமான அமைப்பிற்குப் பிறகு, LCD தற்போதைய நேரம், வாரத்தின் நாள் மற்றும் தேதியைக் காண்பிக்கும். loop() செயல்பாட்டின் காரணமாக நேரம் ஒவ்வொரு 5 வினாடிகளுக்கும் புதுப்பிக்கப்படும் என எதிர்பார்க்கலாம். NTP சேவையகத்துடனான இணைப்பு தோல்வியுற்றால், நேரம் இன்னும் கிடைக்கவில்லை என்பதைக் குறிக்கும் செய்தி Serial Monitor இல் தோன்றும் (வீடியோவில் 12:00 இல்).
பொதுவான பிழைகளில் தவறான வயரிங், தவறான I2C முகவரிகள் மற்றும் தவறான Wi-Fi சான்றுகள் அடங்கும். அனைத்து இணைப்புகளும் பாதுகாப்பாக இருப்பதையும், NTP சேவையகம் உங்கள் நெட்வொர்க்கிலிருந்து அணுகக்கூடியதாக இருப்பதையும் உறுதி செய்யவும்.
வீடியோ நேர முத்திரைகள்
- 00:00 தொடக்கம்
- 2:10 அறிமுகம்
- 5:15 வயரிங் விளக்கம்
- 7:32 Arduino குறியீடு விளக்கம்
- 18:43 Arduino IDE இல் ESP32 போர்டு மற்றும் COM போர்ட்டைத் தேர்ந்தெடுத்தல்
- 20:27 இணைய கடிகார செயல்விளக்கம்
/*
Internet Clock using SunFounder's IoT ESP32 Learning kit
Full video instruction https://youtu.be/0KnuNqfiVug
📚⬇️ Download and resource page https://robojax.com/RJT686
Internet Clock for ESP32
Written by Ahamd Shasmhiri on Dec 31, 2023 at 19:29
www.Robojax.com
*/
#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
const bool showSeconds = true;//set to "true" to show seconds and "false" to hide
const bool showShortMonth = false;//December = false, Dec=true
const bool show24Hours = true;//true to have 18:30 or false to have 6:30
#include <WiFi.h>
#include "time.h"
#include "sntp.h"
#include "TZ.h"
//TZ.h is taken from https://github.com/esp8266/Arduino/blob/master/cores/esp8266/TZ.h
const char* ssid = "dars";
const char* password = "llllllllllllll";
const char* ntpServer1 = "pool.ntp.org";
const char* ntpServer2 = "time.nist.gov";
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
const String months[][2] ={
"January","Jan",
"February","Feb",
"March","Mar",
"April","Apr",
"May","May",
"June","Jun",
"July","Jul",
"August","Aug",
"September","Sep",
"October","Oct",
"November","Nov",
"December","Dec"
};
void printLocalTime()
{
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("No time available (yet)");
return;
}
//Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S 12Hours: %I:%M:%S");
// get time format HH:MM
char timeHour[5];
strftime(timeHour,5, "%H", &timeinfo);
String hourString = String(timeHour);//convert timeHour to string
char timeMinute[3];
strftime(timeMinute,3, "%M", &timeinfo);
String minuteString = String(timeMinute);
//Serial.println(hourString);
if(!show24Hours)
{
if(hourString.toInt() >= 12)
{
minuteString = minuteString + "PM";
}else{
minuteString = minuteString + "AM";
}
}
char timeSeconds[3];
strftime(timeSeconds,3, "%S", &timeinfo);
char timeDayofWeek[10];
strftime(timeDayofWeek, 10 , "%A", &timeinfo);
char timeMonth[10];
strftime(timeMonth, 10 , "%B", &timeinfo);
String Month = String(timeMonth);
if(showShortMonth)
{
for(int m=0; m <12; m++)
{
if(Month == months[m][0] )
{
Month = months[m][1];
//Serial.println(months[m][1]);
}
}
}
char timeDayofMonth[3];
strftime(timeDayofMonth,3 , "%d", &timeinfo);
char timeYear[5];
strftime(timeYear, 5 , "%Y", &timeinfo);
String time = String(timeHour) + ":" + minuteString ;
if(showSeconds) time = time +":" + String(timeSeconds);//add seconds if showSeconds=true
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(time);
lcd.print(" ");
lcd.print(String(timeDayofWeek));
//
lcd.setCursor(0, 1);
lcd.print(timeDayofMonth);
lcd.print(" ");
lcd.print(Month);
lcd.print(" ");
lcd.print(timeYear);
}
// Callback function (get's called when time adjusts via NTP)
void timeavailable(struct timeval *t)
{
Serial.println("Got time adjustment from NTP!");
printLocalTime();
}
void setup()
{
Serial.begin(115200);
lcd.init();// initialize the lcd
lcd.backlight(); // Turns on the LCD backlight.
lcd.print("Internet Clock");
delay(3000);//waif 3 seconds
// set notification call-back function
sntp_set_time_sync_notification_cb( timeavailable );
/**
* NTP server address could be aquired via DHCP,
*
* NOTE: This call should be made BEFORE esp32 aquires IP address via DHCP,
* otherwise SNTP option 42 would be rejected by default.
* NOTE: configTime() function call if made AFTER DHCP-client run
* will OVERRIDE aquired NTP server address
*/
sntp_servermode_dhcp(1); // (optional)
/**
* This will set configured ntp servers and constant TimeZone/daylightOffset
* should be OK if your time zone does not need to adjust daylightOffset twice a year,
* in such a case time adjustment won't be handled automagicaly.
*/
// configTime(gmtOffset_sec, daylightOffset_sec, ntpServer1, ntpServer2);
/**
* A more convenient approach to handle TimeZones with daylightOffset
* would be to specify a environmnet variable with TimeZone definition including daylight adjustmnet rules.
* A list of rules for your zone could be obtained from https://github.com/esp8266/Arduino/blob/master/cores/esp8266/TZ.h
*/
//configTzTime(TZ_America_Toronto, ntpServer1, ntpServer2);
configTzTime(TZ_America_Toronto, ntpServer1, ntpServer2);
//connect to WiFi
Serial.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" CONNECTED");
}
void loop()
{
delay(5000);
printLocalTime(); // it will take some time to sync time :)
}
Common Course Links
Common Course Files
நீங்கள் தேவைப்படும் எண்ணங்கள்
-
அமேசான்Purchase LCD1602-I2C from Amazonamzn.to
-
இபேய்Purchase LCD1602-I2C from eBayebay.us
-
பாங்குட்Purchase LCD1602 display from Banggoodbanggood.com
வளங்கள் மற்றும் மேற்கோள்கள்
-
வெளியுறுப்புPurchase LCD1602 display from Banggoodbanggood.com
கோப்புகள்📁
தேவையான கோப்பு (.h)
-
TZ.h
TZ.h0.02 MB