NodeMCU Internet Clock

<![CDATA[বর্তমানে অধিকাংশ বাসাবাড়ির যন্ত্রপাতি নেটওয়ার্ক ভিত্তিক, যা মূলত ইন্টারনেটের সাথে যুক্ত থাকে। যেমন টিভি, কম্পিউটার, স্মার্টফোন, লাইট, ফ্যান ইত্যাদি। তেমনি একটি ইন্টারনেট ভিত্তিক ডিভাইস NodeMCU Internet Clock । এই ক্লক বা ঘড়িতে ইন্টারনেট থেকে সময় নিয়ে ডিসপ্লেতে দেখানো হয়েছে। এই ঘড়িতে দেখা যাবে আজকের তারিখ, সময় ও দিন। এর জন্য ব্যবহার করা হয়েছে বহুল পরিচিত Device “ESP8266 NodeMCU V2 Development Board with CP2102” এবং TFT LCD Display Module 1.8 inch. ইন্টারনেট ভিত্তিক হওয়াতে আলাদা করে কোন Clock Module প্রয়োজন নেই। শুধুমাত্র সঠিক কানেকশন নিশ্চিত করতে হবে। প্রোগ্রাম আপলোড দেওয়ার পূর্বে লাইব্রেরীগুলো ইন্সটল করে নিতে হবে। 

পিন ডায়াগ্রামঃ

TFT LCD Display Module 1.8 inch ডিসপ্লের দুইটি পিনে ভোল্টেজ সাপ্লাই দিতে হবে,  VCC এবং LED। উভয় পিনে ৩.৩ ভোল্ট সাপ্লাই দ্বারা ড্রাইভার আইসি ST7735 এবং ডিসপ্লে অন হবে। ডাটা পিনগুলোকে NodeMCU এর সাথে সঠিকভাবে কানেকশন সম্পন্ন করতে হবে। অতপর, SSID Name, Password দিয়ে প্রোগ্রাম আপলোড করলেই ইন্টারনেটের সাথে কানেক্ট হতে শুরু করবে।

প্রয়োজনীয় কম্পোনেন্টঃ

কম্পোনেন্টের তালিকা নিচে প্রদান করা হলো।

ক্রমিক নং  কম্পোনেন্টের নাম মডেল পরিমাণ লিংক
TFT LCD Display Module 1.8 inch DIS-00058 ১টি কম্পোনেন্ট লিংক
ESP8266 NodeMCU V2 Development Board with CP2102 WIR-00074 ১টি কম্পোনেন্ট লিংক
Micro USB Data Cable C&C-00259 ১টি কম্পোনেন্ট লিংক
Breadboard (830 Point) MIS-00002 ২টি কম্পোনেন্ট লিংক
Silicone Jumper Wire (Male to Male) C&C-00245  প্রয়োজনমত কম্পোনেন্ট লিংক

সার্কিট কানেকশনঃ

লাইব্রেরীঃ

NTPClient.h
TimeLib.h
Adafruit_GFX.h
Adafruit_ST7735.h

প্রোগ্রাম আপলোড দেওয়ার পূর্বে অবশ্যই লাইব্রেরীগুলো ইন্সটল করে নিতে হব। যদি পূর্বে থেকে একই লাইব্রেরী ইন্সটল করা থাকে, তাহলে Update করে নিতে হবে।

Library Manager এ সার্চ করলেই প্রতিটি লাইব্রেরী দেখাতে শুরু করবে। যদি পূর্বে ইন্সটল করা থাকে, তাহলে update দেখাবে। ইন্সটল করা না থাকলে install দেখাবে।

ডেমো কোডঃ

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <NTPClient.h>        // include NTPClient library
#include <TimeLib.h>          // Include Arduino time library
#include <Adafruit_GFX.h>     // include Adafruit graphics library
#include <Adafruit_ST7735.h>  // include Adafruit ST7735 TFT library

#define TFT_RST   D4     // TFT RST Pin is Connected to NodeMCU Pin D4 (GPIO2)
#define TFT_CS    D3     // TFT CS  Pin is Connected to NodeMCU Pin D3 (GPIO0)
#define TFT_DC    D2     // TFT DC  Pin is Connected to NodeMCU Pin D2 (GPIO4)

// SCK ---> NodeMCU Pin D5 (GPIO14)
// SDA ---> NodeMCU Pin D7 (GPIO13)

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

// set WiFi network SSID and password
const char *ssid     = "SSID Name";
const char *password = "SSID Password";

WiFiUDP ntpUDP;

// 'bd.pool.ntp.org' is used (default server) with +6 hour offset (21600 seconds) 60 seconds (60000 milliseconds) update interval
NTPClient timeClient(ntpUDP, "bd.pool.ntp.org", 21600, 360000);
unsigned long unix_epoch;

void setup(void)
{
  Serial.begin(9600);
  tft.initR(INITR_BLACKTAB);     // Initialize a ST7735S Chip, black tab
  tft.fillScreen(ST7735_BLACK);  // Fill screen with black color
  tft.drawFastHLine(0, 44,  tft.width(), ST7735_GREEN); // draw horizontal Green line at position (0, 44)
  tft.setTextColor(ST7735_WHITE, ST7735_BLACK);         // Set text color to white and black background
  tft.setTextSize(1);                 // text size = 1
  tft.setCursor(19, 10);              // Move cursor to position (43, 10) pixel
  tft.print("NodeMCU Internet");
  tft.setCursor(4, 27);               // Move cursor to position (4, 27) pixel
  tft.print("Clock using TFT LCD");

  WiFi.begin(ssid, password);
  Serial.print("Connecting.");
  tft.setCursor(0, 54);               // Move cursor to position (4, 27) pixel
  tft.print("Connecting..");
  while ( WiFi.status() != WL_CONNECTED ) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("connected");
  tft.print("connected");
  delay(2000);
  tft.fillRect(0, 54, tft.width(), 8, ST7735_BLACK);
  tft.drawFastHLine(0, 102, tft.width(), ST7735_GREEN);
  tft.setTextSize(2);
  tft.setTextColor(ST7735_WHITE, ST7735_BLACK);
  tft.setCursor(37, 112);
  tft.print("TIME:");

  timeClient.begin();
}

void RTC_display()
{
  char dow_matrix[7][10] = {"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"};
  byte x_pos[7] = {29, 29, 23, 11, 17, 29, 17};
  static byte previous_dow = 0;
  // print day of the week
  if( previous_dow != weekday(unix_epoch) )
  {
    previous_dow = weekday(unix_epoch);
    tft.fillRect(11, 55, 108, 14, ST7735_BLACK);     // draw rectangle (erase day from the display)
    tft.setCursor(x_pos[previous_dow-1], 55);
    tft.setTextColor(ST7735_RED, ST7735_BLACK);     // set text color to Red and Black background
    tft.print( dow_matrix[previous_dow-1] );
  }

 // Date
  tft.setCursor(4, 79);
  tft.setTextColor(ST7735_YELLOW, ST7735_BLACK);     // set text color to Yellow and Black background
  tft.printf( "%02u-%02u-%04u", day(unix_epoch), month(unix_epoch), year(unix_epoch) );
  // Time
  tft.setCursor(16, 136);
  tft.setTextColor(ST7735_YELLOW, ST7735_BLACK);     // set text color to Yellow and Black background
  tft.printf( "%02u:%02u:%02u", hour(unix_epoch), minute(unix_epoch), second(unix_epoch) );
}

void loop() // main loop
{
  timeClient.update();
  unix_epoch = timeClient.getEpochTime();   // get UNIX Epoch time
  RTC_display();
  delay(200);    // wait 200ms
} // end of code.

আউটপুটঃ

সতর্কতাঃ

১। TFT Display এর নির্ধারিত ভোল্টেজের অধিক ভোল্ট সাপ্লাই দেওয়া যাবেনা।

২। Breadboard এর ডিসপ্লে সাবধানে বসাতে হবে যেন, স্ক্রিনে প্রেসার না পরে।

৩। সম্পূর্ণ সংযোগ নিশ্চিত হয়ে, ভোল্টেজ সাপ্লাই দিতে হবে।]]>

Nur Mohammad
Nur Mohammad

Senior Research Engineer |
Techshop Bangladesh |
E-mail: nur@techshopbd.com

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.