Time Scheduled Message with ESP8266
ESP8266 ব্যবহারের একটি বড় সুবিধা হল এটি ইন্টারনেটের সাথে যুক্ত হয়ে যেকোনো স্থানের সময় প্রদর্শন করতে পারে। এক্ষেত্রে অতিরিক্ত কোনো RTC ব্যবহারের প্রয়োজন হয় না। ইতোমধ্যে আমরা ESP8266 দিয়ে কিভাবে ইন্টারনেট ক্লক তৈরী করতে হয় তা দেখেছি। এই টিউটোরিয়ালে আমরা দেখব, কিভাবে কোনো একটি নির্দিষ্ট সময়ে ESP8266 কে দিয়ে কোনো নির্দিষ্ট কাজ করানো যায়। আমরা ESP8266 এর মাধ্যমে নির্ধারিত কিছু সময়ে কিছু মেসেজ একটি হোয়াটসঅ্যাপ নাম্বারে পাঠাব।
প্রজেক্টের মূলনীতিঃ
প্রজেক্টের মূল প্রসেসর হিসেবে আমরা ব্যবহার করব একটি ESP8266 । আমাদের এক্সপেরিমেন্টে ESP8266 একটি ওয়াইফাই নেটওয়ার্কে যুক্ত থাকবে। NIST server এর সাথে যুক্ত হয়ে ক্রমাগত সময় রেকর্ড করবে। আমাদের প্রোগ্রামের মাধ্যমে নির্ধারণ করে দেওয়া দুটি সময়ে দুটি মেসেজ পাঠাবে।
Whatsapp এ মেসেজ পাঠানোর জন্য আমরা ব্যবহার করব CallMeBot নামক একটি API ।
এই প্রজেক্ট থেকে আমরা শিখবঃ
- কিভাবে ESP8266 থেকে হোয়াটসঅ্যাপে মেসেজ পাঠানো
- কিভাবে একটি ESP8266 কে একটি নির্দিষ্ট সময়ে নির্দিষ্ট কোনো কাজের জন্য শিডিউল দিয়ে রাখা যায়।
প্রয়োজনীয় যন্ত্রপাতি | পরিমাণ | লিংক |
ESP8266 NodeMCU V2 Development Board with CP2102 | 1 | link |
Breadboard(830 point) | 1 | link |
Micro USB cable | 1 | link |
প্রয়োজনীয় অ্যাপ এবং API
- 2) CallMeBot
অ্যাপ ইন্সটলেশনঃ
আপনার মোবাইল ফোনে Whatsapp ইন্সটল করা না থাকলে এই লিংক থেকে ডাউনলোড এবং ইন্সটল করে নিন।
API Key generate করাঃ আগেই উল্লেখ করা হয়েছে, এই প্রজেক্টের জন্য CallMeBot API ব্যবহার করা হবে। CallMeBot ব্যবহার করতে নিচের প্রক্রিয়াগুলো অনুসরণ করুন।
আপনার ফোনের কন্টাক্ট লিস্টে +34 644 44 21 48 নাম্বারটি সেভ করে রাখুন। যেকোনো নাম দিয়েই সেভ করতে পারেন। উক্ত নাম্বারে হোয়াটসঅ্যাপ ব্যবহার করে এই মেসেজটি পাঠানঃ “I allow callmebot to send me messages” । আপনি নাম্বারটি থেকে একটি উত্তর পাবেন। উত্তরে আপনার API key উল্লেখ করা থাকবে। এই API key টি প্রোগ্রামে লিখতে হবে।
প্রোগ্রামঃ
এটিই যদি ESP8266 ব্যবহার করে আপনার কম্পিউটার থেকে করা প্রথম প্রজেক্ট হয়, তাহলে প্রথমে বেশকিছু কাজ করতে হবে। অনুগ্রহপূর্বক এই টিউটোরিয়ালে প্রদর্শিত নিয়ম অনুযায়ী Board installation সম্পন্ন করুন। লাইব্রেরি ইন্সটলেশনঃ Arduino IDE ওপেন করে লাইব্রেরি ম্যানেজারে গিয়ে UrlEncode লাইব্রেরিটি সার্চ করুন এবং ইন্সটল করুন।
নিচের প্রোগ্রামটি আরডুইনো আইডিইতে লিখুন।
#include <ESP8266WiFi.h> #include <time.h> #include <ESP8266HTTPClient.h> #include <WiFiClient.h> #include <UrlEncode.h> const char* ssid = "Your SSID"; const char* password = "Your password"; int timezone = 6 * 3600;//Time of Dhaka=GMT+6 Hours int dst = 0; int hour,minute,sec; String phoneNumber = "+Your phone number"; String apiKey = "API KEY"; void sendMessage(String message){ // Data to send with HTTP POST String url = "http://api.callmebot.com/whatsapp.php?phone=" + phoneNumber + "&apikey=" + apiKey + "&text=" + urlEncode(message); WiFiClient client; HTTPClient http; http.begin(client, url); // Specify content-type header http.addHeader("Content-Type", "application/x-www-form-urlencoded"); // Send HTTP POST request int httpResponseCode = http.POST(url); if (httpResponseCode == 200){ Serial.print("Message sent successfully"); } else{ Serial.println("Error sending the message"); Serial.print("HTTP response code: "); Serial.println(httpResponseCode); } // Free resources http.end(); } void setup() { // put your setup code here, to run once: 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() { // put your main code here, to run repeatedly: 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); Serial.print(" "); hour=p_tm->tm_hour; minute=p_tm->tm_min; sec=p_tm->tm_sec; //Serial.print(p_tm->tm_hour); Serial.print(hour); Serial.print(":"); Serial.print(p_tm->tm_min); Serial.print(":"); Serial.println(p_tm->tm_sec); if(hour==3&&minute==50&&sec==0) { sendMessage("Take your medicine,dear!"); } if(hour==4&&minute==3&&sec==0) { sendMessage("Hello sleeping beauty.Get ready for office!"); } }
যে পরিবর্তনগুলো প্রোগ্রামে অবশ্যই করতে হবেঃ
- Your SSID এর জায়গায় আপনার SSID অর্থ্যাৎ, আপনার ব্যবহৃত ওয়াইফাই নেটওয়ার্কের নামটি লিখবেন।
- Your password এর জায়গায় আপনার ওয়াইফাইয়ের পাসওয়ার্ড লিখবেন।
- Your phone number এর জায়গায় কান্ট্রি কোডসহ আপনার ফোন নাম্বার লিখবেন।
- API KEY এর জায়গায় আপনার API KEY লিখবেন।
কোডটি আপলোড করার সময় Board অপশন থেকে অবশ্যই NodeMCU 1.0 (ESP12E-Module) সিলেক্ট করবেন। কোডটি আপলোড করার পর 115200 baud rate সিলেক্ট করে সিরিয়াল মনিটর ওপেন করলে সময় দেখা যাবে।
প্রোগ্রামে নির্ধারন করে দেওয়া সময়ে আপনার হোয়াটসঅ্যাপ নাম্বারে প্রোগ্রামে লিখে দেওয়া মেসেজ আসবে। প্রোগ্রামের শেষের দুটি if লুপের কন্ডিশন বদলে দিয়ে আপনি আপনার ইচ্ছেমতো সময়ে মেসেজগুলো পাঠাতে পারবেন। আমাদের এক্সপেরিমেন্টে মেসেজগুলো পাঠানোর নির্দেশ দেওয়া হয়েছিল রাত ৩ টা ৫০ মিনিটে এবং ৪টা ৩ মিনিটে।
sendMessage()ফাংশনের আর্গুমেন্ট পরিবর্তন করে আপনি যেকোনো মেসেজ লিখে পাঠাতে পারবেন। একই নিয়মে, এই একই প্রোগ্রামের মাধ্যমে দুইয়ের অধিক মেসেজও পাঠানো সম্ভব। শুধু তা-ই নয়, এভাবে শিডিউল নির্ধারণ করে দিয়ে ESP8266 এর মাধ্যমে কোনো অ্যালার্ম বাজানো, কিংবা সুইচ অন-অফ করাও সম্ভব।