ইন্টারনেট ক্লক

নিত্যব্যবহার্য সবকিছুই সংযুক্ত হয়ে যাবে ইন্টারনেটে। আইওটির অন্যতম মূলকথা এটি। টেবিলের বা হাতের ঘড়িটার কথাই ধরা যাক না। সারাক্ষন ইন্টারনেটের সাথে সংযুক্ত থেকে যদি নির্ভুল সময় দেখায়? এমনই একটা ঘড়ি আমরা তৈরী করব এই টিউটোরিয়ালে। ঘড়িটি ইন্টারনেটের সাথে সংযুক্ত থেকে আমাদেরকে স্থানীয়(ঢাকা,বাংলাদেশ) সময় দেখাবে। আবার ঘড়িটির সাথে সংযুক্ত একটি বাটন প্রেস করলে প্রোগ্রামের মাধ্যমে আগেই নির্ধারন করে দেওয়া অপর একটি স্থানের সময় দেখাবে। উদাহরনস্বরুপ আমরা আমেরিকার বোস্টনের সময় দেখিয়েছি। এই ধরনের ঘড়ি ব্যবহারের কিছু সুবিধা আছে।যেমন, ইন্টারনেট থেকে ডেটা নেবার কারনে এইসব ঘড়িতে আরটিসি ব্যবহারের কোনো প্রয়োজন নেই। কাজেই সার্কিট ছোট হয়ে যাবে। আরটিসির ব্যাটারি পরিবর্তনের ঝক্কিও আর থাকবে না। ইন্টারনেট থেকে রিয়েল টাইম ডেটা নেবার কারনে ঘড়ি পিছিয়ে যাবারও সম্ভাবনা নেই। আর অতিরিক্ত ফিচার হিসেবে যে বাটনটি যুক্ত করা হয়েছে তারও কিছু উপকারিতা আছে। আমরা যারা ব্যবসায়িক কাজে বিদেশী ক্লায়েন্টের সাথে বা চাকরিক্ষেত্রে দেশের বাইরে অবস্থিত হেড অফিসের সাথে যোগাযোগ রক্ষা করে চলি, তাদের প্রায়শই ‘ওদের দেশে এখন কয়টা বাজে’? এই কনফিউশনে পড়তে হয়। একটিমাত্র বাটন প্রেস করেই সম্পূর্ন ভিন্ন একটি দেশের ও শহরের সময় এক নজরে এই ঘড়িতে দেখে নেওয়া সম্ভব।

প্রয়োজনীয় যন্ত্রপাতি পরিমান প্রোডাক্ট লিংক
ESP8266 NodeMCU Lua WiFi with CP2102 1 http://bit.ly/2OO8CYN
OLED Display Blue I2C 128×64 0.96″   1 http://bit.ly/2Cb3WXO
Push button 1 http://bit.ly/2lPQ6SU
10K Ohm 1/4W Resistor – Pack of 20  1 http://bit.ly/2KXzOTf
Male To Male Jumper Wire – Single 7 http://bit.ly/2IkA1hy
Breadboard 1 http://bit.ly/2IjyUPg

সার্কিটঃ

NodeMCU এবং ওলেড ডিস্প্লের মধ্যে নিচের কানেকশনটি সম্পন্ন করুন।

ESP8266 NodeMCU Lua WiFi with CP2102 OLED Display Blue I2C 128×64 0.96″
3V3 VCC
GND GND
D1 SCL
D2 SDA

নিচের সার্কিট ডায়াগ্রাম অনুযায়ী NodeMCU এর সাথে পুশ বাটনের সংযোগ দিন।

প্রোগ্রামঃ

এই প্রোগ্রামটিতে বেশকিছু লাইব্রেরি ব্যবহার করা হয়েছে। কোড লেখার আগে অবশ্যই লাইব্রেরিগুলো ইন্সটল করে নিতে হবে।

লাইব্রেরিগুলোর নাম ও লিংক নিচে দেওয়া হল।

Time.h

Adafruit_GFX.h

Adafruit_SSD1306.h

এটি যদি NodeMCU নিয়ে আপনার প্রথম প্রোজেক্ট হয় তাহলে এই টিউটোরিয়াল অনুযায়ী বোর্ড ইনস্টল করে নিতে হবে। বোর্ড ও লাইব্রেরি ইন্সটল করা শেষ হয়ে গেলে নিচের কোডটি কম্পাইল করে NodeMCU তে আপলোড করুন।

#include <ESP8266WiFi.h>
#include <time.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>


Adafruit_SSD1306 display;

const char* ssid = "Techshop 2.4G";
const char* password = "og-wl-2012";


const int buttonpin=2;
int buttonstate=0;
int flag=0;

int timezone = 6 * 3600;//Time of Dhaka=GMT+6 Hours
int timezone2= -5 * 3600;//Time of Boston=GMT-5 Hours
int dst = 0;

void setup() {
  
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(buttonpin,INPUT);
  digitalWrite(LED_BUILTIN,HIGH);

  Serial.begin(115200);
  Serial.println();
  Serial.print("Wifi connecting to ");
  Serial.println( ssid );

  WiFi.begin(ssid,password);

  Serial.println();
  
  Serial.print("Connecting");

  while( WiFi.status() != WL_CONNECTED ){
      delay(500);
      Serial.print(".");        
  }

  
  Serial.println();

  Serial.println("Wifi Connected Success!");
  Serial.print("NodeMCU IP Address : ");
  Serial.println(WiFi.localIP() );


  configTime(timezone, dst, "pool.ntp.org","time.nist.gov"); 
  Serial.println("\nTime response....OK");   
}

void loop() {
  buttonstate=digitalRead(buttonpin);

  if(buttonstate==HIGH){
  if(flag==0) 
  { 
  configTime(timezone2, dst, "pool.ntp.org","time.nist.gov");
  Serial.println("Boston time");
  digitalWrite(LED_BUILTIN,LOW);
  flag=1;
  }
  
  else if(flag==1){
  configTime(timezone, dst, "pool.ntp.org","time.nist.gov");
  digitalWrite(LED_BUILTIN,HIGH);
  
  flag=0;
  }
  }
  //Serial.println("\nWaiting for Internet time");

  while(!time(nullptr)){
     Serial.print("*");
     delay(1000);
  }
  
  time_t now = time(nullptr);
  struct tm* p_tm = localtime(&now);
  Serial.print(p_tm->tm_mday);
  Serial.print("/");
  Serial.print(p_tm->tm_mon + 1);
  Serial.print("/");
  Serial.print(p_tm->tm_year + 1900);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

  // Clear the buffer.
  display.clearDisplay();
  display.display();

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.print(p_tm->tm_mday);
 
  display.print("/");
  display.print(p_tm->tm_mon + 1);
  display.print("/");
  display.println(p_tm->tm_year + 1900);
  display.print(p_tm->tm_hour);
  
  display.print(":");
  display.print(p_tm->tm_min);
  display.print(":");
  display.println(p_tm->tm_sec);

  if(flag==0)
  {
  display.setTextSize(2);
  display.setTextColor(WHITE);  
  display.print("Dhaka");
  }
   if(flag==1)
  {
  display.setTextSize(2);
  display.setTextColor(WHITE);  
  display.print("Boston");
  }
  display.display();
  
  Serial.print(" ");
  
  Serial.print(p_tm->tm_hour);
  Serial.print(":");
  Serial.print(p_tm->tm_min);
  Serial.print(":");
  Serial.println(p_tm->tm_sec);
  

  delay(1000);

}


বাই ডিফল্ট ঘড়িটি ঢাকার সময় দেখায়। বাটন প্রেস করলে বোস্টোনের সময় দেখায়।

প্রথম পাওয়ার দেবার পর এবং বাটন প্রেস করার পর সময় পরিবর্তন করতে ঘড়িটির কয়েক সেকেন্ড লাগতে পারে। আপনারা আপনাদের প্রয়োজনমতো টাইমজোনের জন্য কোডটি পরিবর্তন করে নিতে পারেন।

Leave a Reply

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