কিভাবে একটি ESP32 এর সাথে DS3231 রিয়েল-টাইম ক্লক (RTC) মডিউল ব্যবহার করবেন

Kibhabe Ekati Esp32 Era Sathe Ds3231 Riyela Ta Ima Klaka Rtc Madi Ula Byabahara Karabena



ESP32 হল একটি স্মার্ট মাইক্রোকন্ট্রোলার বোর্ড যেখানে অন্তর্নির্মিত Wi-Fi এবং ব্লুটুথ ক্ষমতা রয়েছে। ESP32 একটি অভ্যন্তরীণ RTC সহ আসে, তবে এর কাজ ক্ষমতার উপর নির্ভরশীল। তাই আপনি যদি এমন প্রজেক্ট বা সার্কিট ডিজাইন করতে চান যেগুলো পাওয়ার না থাকা সত্ত্বেও আপনি চালাতে চান, তাহলে আপনাকে অবশ্যই DS1307 বা DS3231 এর মত যেকোন বাহ্যিক RTC মডিউল ব্যবহার করতে হবে।

আমরা ইতিমধ্যে একটি টিউটোরিয়াল করেছি DS1307 ESP32 মডিউলের সাথে ইন্টারফেস করছে . আজ আমরা DS3231 RTC সেন্সরের মূল বিষয়গুলি নিয়ে আলোচনা করব এবং কীভাবে এটি ESP32 বোর্ডের সাথে ইন্টারফেস করতে পারে তা পরীক্ষা করব।

সুচিপত্র:







1. DS3231 RTC মডিউল কি?



2. ESP32 এর সাথে DS3231 কিভাবে ইন্টারফেস করবেন



3. হার্ডওয়্যার





4. কোড

5. আউটপুট



6. ESP32 ব্যবহার করে কীভাবে একটি OLED স্ক্রিনে RTC DS3231 সময় প্রদর্শন করবেন

উপসংহার

1. DS3231 RTC মডিউল কি?

DS3231 মডিউল অত্যন্ত সঠিক টাইমকিপিং প্রদান করে। এটি একটি সমন্বিত তাপমাত্রা-ক্ষতিপূরণকারী ক্রিস্টাল অসিলেটর (TCXO) আমাদেরকে দুর্দান্ত নির্ভুলতার সাথে সময় দেওয়ার জন্য অন্তর্ভুক্ত করে। মডিউলটি মাস্টার-স্লেভ কনফিগারেশন ব্যবহার করে I2C প্রোটোকলের উপর কাজ করে। কোনো প্রধান ইনপুট পাওয়ার না থাকলেও এটি একটি ব্যাকআপ ব্যাটারির সাথে সময় এবং তারিখ রাখতে পারে। এটি সাধারণত সময় এবং তারিখ-নির্ভর ডিভাইসগুলিতে ব্যবহৃত হয়।

DS3231 সেকেন্ড, মিনিট এবং ঘন্টার উপর ট্যাব রাখে। এটি তারিখ এবং সপ্তাহের দিনগুলির একটি রেকর্ডও রাখতে পারে। অধিবর্ষের সাথে কাজ করার সময়, এটি স্বয়ংক্রিয়ভাবে সেই অনুযায়ী সময় সামঞ্জস্য করে। এছাড়াও, এটি 12-ঘন্টা বা 24-ঘন্টা উভয় ফর্ম্যাটে সময় প্রদর্শন করতে পারে, একটি AM/PM সূচকের সাথে সম্পূর্ণ।

1.1। DS3231 বনাম DS1307

DS3231 এবং DS1307 উভয়ই ব্যাটারি ব্যাকআপ সমর্থন সহ টাইম-কিপিং মডিউল। যাইহোক, DS3231 DS1307 এর চেয়ে বেশি নির্ভুল। প্রধান কারণ হল যে DS1307 টাইমকিপিংয়ের জন্য বাহ্যিক 32kHz ক্রিস্টালের উপর নির্ভর করে।

যাইহোক, RTC DS3231 একটি অভ্যন্তরীণ টেম্পারেচার কমপেনসেটেড ক্রিস্টাল অসিলেটর (TCXO) বৈশিষ্ট্যযুক্ত। এটি এটিকে বাহ্যিক তাপমাত্রার দ্বারা কম প্রভাবিত করে এবং ফলস্বরূপ, এটি DS1307 এর তুলনায় প্রতি বছর কয়েক মিনিটের নির্ভুলতার সুবিধা রয়েছে।

1.2। DS3231 পিনআউট

DS3231 I2C প্রোটোকল ব্যবহার করে কাজ করে। এই RTC মডিউলের কেন্দ্রস্থলে, আমাদের কাছে ম্যাক্সিম দ্বারা ডিজাইন করা সঠিক RTC চিপ রয়েছে। এই চিপটি সব সময় ফাংশন পরিচালনা করে এবং ESP32 বা Arduino বোর্ডের সাথে I2C ব্যবহার করে যোগাযোগ করে।

RTC DS3231 মডিউলগুলির প্রধান পিনগুলি হল:

  • ভিসিসি: এই পিনটিকে আপনার পাওয়ার উত্সের ইতিবাচক টার্মিনালে সংযুক্ত করুন।
  • জিএনডি: স্থল সংযোগ।
  • SDA: সিরিয়াল ডেটা পিন (I2C যোগাযোগের জন্য ব্যবহৃত)।
  • SCL: সিরিয়াল ক্লক পিন (এছাড়াও I2C ইন্টারফেসের অংশ)।
  • QW: স্কয়ার ওয়েভ আউটপুট পিন (একটি পর্যায়ক্রমিক সংকেত তৈরি করতে পারে, যেমন, অ্যালার্ম বা অন্যান্য সময়ের উদ্দেশ্যে)।
  • 32K: 32KHz অসিলেটর আউটপুট (সুনির্দিষ্ট সময় অ্যাপ্লিকেশনের জন্য দরকারী)।

RTC DS3231 মডিউলের প্রধান অনবোর্ড উপাদানগুলি নিম্নরূপ:

  • ব্যাটারি ধারক: বাহ্যিক শক্তি অনুপস্থিত থাকলে এটি মডিউলটিকে চলমান রাখার অনুমতি দেয়।
  • আরটিসি চিপ: এই চিপটি সময় এবং তারিখ বজায় রাখে।
  • AT24C32 EEPROM: এটি 1,000,000 লেখার চক্র সহ ডেটা লগিং এবং অন্যান্য উদ্দেশ্যে অ-উদ্বায়ী সঞ্চয়স্থান সরবরাহ করে।
  • TCXO: তাপমাত্রার বিভিন্ন পরিসরের জন্য সঠিক সময় প্রদান করতে তাপমাত্রা-ক্ষতিপূরণ দোলক।
  • তাপমাত্রা সেন্সর: এটি তাপমাত্রা রিডিং নেয় এবং মডিউলের বৈশিষ্ট্যের অংশ হিসাবে সেগুলি সরবরাহ করে।

2. ESP32 এর সাথে DS3231 কিভাবে ইন্টারফেস করবেন

DS3231 কে ESP32 এর সাথে ইন্টারফেস করতে, আপনাকে ইনস্টল করতে হবে RTClib লাইব্রেরি প্রথম এই Adafruit RTC লাইব্রেরি ইনস্টল করার পরে, আপনি I2C প্রোটোকল ব্যবহার করে আপনার ESP32 বোর্ডকে DS3231 এর সাথে সংযুক্ত করতে পারেন। RTC DS3231 মডিউলের সাথে ESP32 I2C সংযোগ করতে, আপনি ESP32 D21 এবং D22 পিন ব্যবহার করতে পারেন।

2.1। RTC DS3231 এর সাথে ESP32 এর তারের ডায়াগ্রাম

প্রথমত, আপনাকে আপনার I2C RTC DS3231 মডিউলের সাথে ESP32-এর ওয়্যার করতে হবে। তারের জন্য নীচের দেওয়া পিন কনফিগারেশন অনুসরণ করুন:

RTC DS3231 এর সাথে ESP32 কানেক্ট করার পর, আপনার ওয়্যারিং ডায়াগ্রামটি এইরকম হওয়া উচিত। এছাড়াও আপনি ESP32 এর VIN পিন থেকে DS3231 কে পাওয়ার করতে পারেন। DS3231 এর অপারেটিং ভোল্টেজ 3.3 থেকে 5.5 VDC।

2.2। প্রয়োজনীয় লাইব্রেরি ইনস্টল করা হচ্ছে

সার্কিট প্রস্তুত হয়ে গেলে, পরবর্তী ধাপটি হল Arduino IDE দিয়ে আপনার ESP32 বোর্ড কনফিগার করুন . DS3231 ইন্টারফেস করার জন্য, আপনাকে ইনস্টল করতে হবে RTClib লাইব্রেরি . আপনি Arduino IDE লাইব্রেরি ম্যানেজার ব্যবহার করে এটি ইনস্টল করতে পারেন।

3. হার্ডওয়্যার

ESP32 এর সাথে DS3231-ভিত্তিক RTC ঘড়ি ডিজাইন করার জন্য আপনার নিম্নলিখিত হার্ডওয়্যারের প্রয়োজন হবে:

  • ESP32 উন্নয়ন বোর্ড
  • RTC DS3231 মডিউল
  • CR2032 ব্যাটারি
  • জাম্পার তারের
  • ব্রেডবোর্ড

4. কোড

RTC লাইব্রেরি ইনস্টল করার পর, পরবর্তী অংশটি DS3231-এর জন্য কোড লিখতে হবে এবং এটি ESP32 বোর্ডে আপলোড করতে হবে। প্রথমত, আপনাকে আপনার বর্তমান সময় সেট করতে কোডটি লিখতে হবে। আপনি DS3231-এ সময় সেট করার পরে, এটি সময় মনে রাখবে এবং আপনার ESP32 বোর্ড বন্ধ হয়ে গেলেও চলতে থাকবে।

এখন Arduino IDE খুলুন, কম্পাইল করুন এবং কোডটি ESP32 বোর্ডে বার্ন করুন।

# অন্তর্ভুক্ত করুন
#include

RTC_DS3231 rtc ; // RTC_DS3231 ক্লাসের একটি উদাহরণ শুরু করুন

অকার্যকর সেটআপ ( ) {
সিরিয়াল। শুরু ( 115200 ) ;
তার। শুরু ( ) ;

যদি ( ! আরটিসি শুরু ( ) ) {
সিরিয়াল। println ( 'RTC সনাক্ত করা যায়নি' ) ;
যখন ( 1 ) ; // আরটিসি না পাওয়া গেলে অনির্দিষ্টকালের জন্য ঝুলিয়ে রাখুন
}

//প্রাথমিক তারিখ এবং সময় সেট করতে নীচের লাইনটি আনকমেন্ট করুন
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

অকার্যকর লুপ ( ) {
// সেন্সর থেকে বর্তমান সময় পড়ুন (DS3231)
তারিখ সময় এখন = আরটিসি এখন ( ) ;

// ঘন্টা, মিনিট এবং সেকেন্ডের জন্য দুই অঙ্কের সাথে একই লাইনে তারিখ এবং সময় মুদ্রণ করুন
সিরিয়াল। ছাপা ( 'বর্তমান তারিখ: ' ) ;
সিরিয়াল। ছাপা ( এখন বছর ( ) , ডিইসি ) ;
সিরিয়াল। ছাপা ( '/' ) ;
প্রিন্ট টু ডিজিট ( এখন মাস ( ) ) ;
সিরিয়াল। ছাপা ( '/' ) ;
প্রিন্ট টু ডিজিট ( এখন দিন ( ) ) ;
সিরিয়াল। ছাপা ( ' বর্তমান সময়: ' ) ;
প্রিন্ট টু ডিজিট ( এখন ঘন্টা ( ) ) ;
সিরিয়াল। ছাপা ( ':' ) ;
প্রিন্ট টু ডিজিট ( এখন মিনিট ( ) ) ;
সিরিয়াল। ছাপা ( ':' ) ;
প্রিন্ট টু ডিজিট ( এখন দ্বিতীয় ( ) ) ;
সিরিয়াল। println ( ) ;

বিলম্ব ( 1000 ) ; // প্রতি 1 সেকেন্ডে আপডেট করুন
}

অকার্যকর প্রিন্ট টু ডিজিট ( int সংখ্যা ) {
যদি ( সংখ্যা < 10 ) {
সিরিয়াল। ছাপা ( '0' ) ; // একক-সংখ্যা সংখ্যার জন্য একটি অগ্রণী শূন্য যোগ করুন
}
সিরিয়াল। ছাপা ( সংখ্যা ) ;
}

4.1। কোড ব্যাখ্যা

কোডটি একটি ওয়্যার লাইব্রেরির সাহায্যে সিরিয়াল I2C যোগাযোগ শুরু করে শুরু হয়। এর পরে, আমরা DS3231 মডিউলের সাথে ইন্টারফেস করার জন্য Adafruit-এর RTC লাইব্রেরি অন্তর্ভুক্ত করেছি। এই লাইব্রেরি RTC DS3231 মডিউলের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি ফাংশন প্রদান করে।

মধ্যে সেটআপ অংশ, I2C বাস চালু করা হয়েছে এবং উপলব্ধ I2C ডিভাইসগুলির জন্য পরীক্ষা করা হয়েছে। না পাওয়া গেলে, প্রোগ্রাম অনির্দিষ্টকালের জন্য স্তব্ধ. বড রেটটিও সংজ্ঞায়িত করা হয়েছে যাতে আপনি Arduino IDE সিরিয়াল মনিটরে আউটপুট পরীক্ষা করতে পারেন।

প্রথমবারের জন্য ঘড়ি সেট করা হচ্ছে

DS3231 প্রোগ্রামিং করার সময়, আপনাকে করতে হবে এই লাইনটি মন্তব্য করুন . এটি আপনার সিস্টেমের সময় পাবে এবং এটি RTC মেমরির মধ্যে সংরক্ষণ করবে। এটি করার মাধ্যমে, RTC মডিউল ঘড়িটি আপনার সিস্টেম ঘড়ির সাথে সিঙ্ক্রোনাইজ হয়ে যায়।

//rtc.adjust(DateTime(__DATE__, __TIME__));

সময় সেট করার পরে আপনাকে উপরের কোডটি পুনরায় আপলোড করতে হবে তবে এবার আপনাকে করতে হবে rtc.adjust() ফাংশন লাইন মন্তব্য করুন . অন্যথায়, এটি আপনার আগের সেট করা সময়কে ওভাররাইট করবে এবং যখন আপনার ESP32 বন্ধ হয়ে যাবে, আপনি কোড আপলোড করার সময় থেকে RTC আবার শুরু হবে।

এটি করার মাধ্যমে, আপনার সময় RTC মডিউল ব্যাকগ্রাউন্ডে উপস্থিত থাকবে যতক্ষণ না RTC মডিউলটির CR2032 ঘরে শক্তি থাকবে।

মধ্যে লুপ অংশ, বর্তমান তারিখ এবং সময় rtc.now() ফাংশন ব্যবহার করে DS3231 মডিউল থেকে পড়া হয়। তারিখ এবং সময়ের উপাদানগুলি বের করা হয় এবং ফর্ম্যাট করা তারিখটি Arduino IDE সিরিয়াল মনিটরে প্রতি এক সেকেন্ডে মুদ্রিত হয়।

5. আউটপুট

কোডটি ESP32 বোর্ডে আপলোড করার পর, আপনি দেখতে পাবেন সময় Arduino IDE সিরিয়াল মনিটরে প্রিন্ট করা শুরু হবে।

6. ESP32 ব্যবহার করে OLED স্ক্রিনে RTC DS3231 সময় কীভাবে প্রদর্শন করবেন

আপনি আরও এক ধাপ এগিয়ে যেতে পারেন এবং DS3231 থেকে পড়ার পরে আপনার OLED স্ক্রিনে সময় প্রদর্শন করতে পারেন। এই জন্য, আপনি ইনস্টল করতে হবে Adafruit GFX SSD1306 লাইব্রেরি Arduino IDE-তে।

একবার ইনস্টল হয়ে গেলে, নিম্নলিখিত কনফিগারেশনে OLED এবং RTC মডিউলের সাথে ESP32 সংযোগ করুন।

আপনার সেন্সর সংযোগ করার পরে, আপনি নীচের পরিকল্পিত চিত্রের মত সার্কিট দেখতে পাবেন।

এখন নিচের DS3231 কোডটি ESP32 বোর্ডে আপলোড করুন।

# অন্তর্ভুক্ত করুন
#অন্তর্ভুক্ত
#include
# 'RTClib.h' অন্তর্ভুক্ত করুন

RTC_DS3231 rtc ;

চর দিন [ 7 ] [ 12 ] = { 'রবিবার' , 'সোমবার' , 'মঙ্গলবার' , 'বুধবার' , 'বৃহস্পতিবার' , 'শুক্রবার' , 'শনিবার' } ;

Adafruit_SSD1306 ডিসপ্লে = Adafruit_SSD1306 ( 128 , 64 , এবং তার , - 1 ) ;

অকার্যকর সেটআপ ( ) {
সিরিয়াল। শুরু ( 115200 ) ;

প্রদর্শন শুরু ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

যদি ( ! আরটিসি শুরু ( ) ) {
সিরিয়াল। println ( 'আরটিসি খুঁজে পাওয়া যায়নি! সার্কিট চেক করুন।' ) ;
যখন ( 1 ) ;
}
//প্রথমবারের জন্য সময় নির্ধারণ করার সময় নীচের লাইনটি আনকমেন্ট করুন
//rtc.adjust(DateTime(__DATE__, __TIME__));
প্রদর্শন পরিষ্কার প্রদর্শন ( ) ;
প্রদর্শন setTextColor ( সাদা ) ;
প্রদর্শন setTextSize ( 2 ) ;
প্রদর্শন সেট কার্সার ( 0 , বিশ ) ;
প্রদর্শন ছাপা ( 'RTC ঘড়ি' ) ;
প্রদর্শন প্রদর্শন ( ) ;
বিলম্ব ( 5000 ) ;
}

অকার্যকর লুপ ( ) {
তারিখ সময় এখন = আরটিসি এখন ( ) ;

প্রদর্শন পরিষ্কার প্রদর্শন ( ) ;
প্রদর্শন setTextSize ( 2 ) ;
প্রদর্শন সেট কার্সার ( 75 , 0 ) ;
প্রদর্শন println ( এখন দ্বিতীয় ( ) , ডিইসি ) ;
প্রদর্শন setTextSize ( 2 ) ;
প্রদর্শন সেট কার্সার ( 25 , 0 ) ;
প্রদর্শন println ( ':' ) ;
প্রদর্শন setTextSize ( 2 ) ;
প্রদর্শন সেট কার্সার ( 65 , 0 ) ;
প্রদর্শন println ( ':' ) ;
প্রদর্শন setTextSize ( 2 ) ;
প্রদর্শন সেট কার্সার ( 40 , 0 ) ;
প্রদর্শন println ( এখন মিনিট ( ) , ডিইসি ) ;
প্রদর্শন setTextSize ( 2 ) ;
প্রদর্শন সেট কার্সার ( 0 , 0 ) ;
প্রদর্শন println ( এখন ঘন্টা ( ) , ডিইসি ) ;
প্রদর্শন setTextSize ( 2 ) ;
প্রদর্শন সেট কার্সার ( 0 , 25 ) ;
প্রদর্শন println ( এখন দিন ( ) , ডিইসি ) ;
প্রদর্শন ছাপা ( দিন [ এখন সপ্তাহের দিন ( ) ] ) ;
প্রদর্শন setTextSize ( 2 ) ;
প্রদর্শন সেট কার্সার ( বিশ , 25 ) ;
প্রদর্শন println ( '-' ) ;
প্রদর্শন setTextSize ( 2 ) ;
প্রদর্শন সেট কার্সার ( 35 , 25 ) ;
প্রদর্শন println ( এখন মাস ( ) , ডিইসি ) ;
প্রদর্শন setTextSize ( 2 ) ;
প্রদর্শন সেট কার্সার ( 60 , 25 ) ;
প্রদর্শন println ( '-' ) ;
প্রদর্শন setTextSize ( 2 ) ;
প্রদর্শন সেট কার্সার ( 75 , 25 ) ;
প্রদর্শন println ( এখন বছর ( ) , ডিইসি ) ;
প্রদর্শন প্রদর্শন ( ) ;
}

কোড ব্যাখ্যা

কোডটি কিছু গুরুত্বপূর্ণ লাইব্রেরি দিয়ে শুরু হয়েছিল যা RTC এবং OLED স্ক্রিনের জন্য প্রয়োজনীয়। OLED ডিসপ্লে Adafruit SSD1306 লাইব্রেরি ব্যবহার করে সেট আপ করা হয়েছে।

লুপ অংশে, বর্তমান তারিখ এবং সময় rtc.now() ব্যবহার করে পাওয়া যায়। এর পরে, OLED স্ক্রিনটি সাফ করা হয় এবং সময়ের উপাদানগুলি একটি ডিজিটাল ঘড়ি বিন্যাসে প্রদর্শিত হয়। আপনি তারিখ এবং সময় বিন্যাস সামঞ্জস্য করতে কোড পরিবর্তন করতে পারেন.

কোডটি আপনার বোর্ডে আপলোড হয়ে গেলে, আপনি OLED স্ক্রিনে বর্তমান সময় পাবেন।

বিঃদ্রঃ: উপরের কোডটি ব্যবহার করে 0x3C OLED এর জন্য I2C ঠিকানা। এটি SSD1306 OLED ডিসপ্লেতে পাওয়া সবচেয়ে সাধারণ I2C ঠিকানা। আপনি যদি আপনার OLED স্ক্রিনের জন্য I2C ঠিকানা খুঁজে পেতে চান তবে আপনি চালাতে পারেন I2C স্ক্যানার কোড .

উপসংহার

DS3231 হল একটি RTC সেন্সর যা টাইমকিপিংয়ের জন্য ব্যবহার করা যেতে পারে। এটিতে একটি ব্যাটারি ব্যাকআপ রয়েছে যা আপনার মাইক্রোকন্ট্রোলার বোর্ড বন্ধ থাকলেও সময় সঠিক রাখতে পারে। DS3231 এর সাথে ESP2 ইন্টারফেস করতে, আপনাকে অবশ্যই আপনার Arduino IDE-তে RTClib লাইব্রেরি ইনস্টল করতে হবে। এর পরে, আপনাকে ESP32 এর ডিজিটাল পিন ব্যবহার করে I2C প্রোটোকলের উপর RTC মডিউল সংযোগ করতে হবে। একবার সংযুক্ত হয়ে গেলে, কেবল কোড আপলোড করুন এবং সময় সামঞ্জস্য করুন। এখন আরটিসি সেন্সর সময় রাখবে, এবং আপনি ডিজাইন সময়-ভিত্তিক প্রকল্পগুলিতে আপনার সিরিয়াল মনিটরে এটি পড়তে পারেন।