SIM800L খুঁটিনাটি ও ফোন কল
SIM800L GSM হল একটি জনপ্রিয় GSM/GPRS মডিউল, যা IoT প্রোজেক্ট, দূরবর্তীস্থানে ডেটা ট্রান্সমিশন এবং ওয়্যারলেস কমিউনিকেশনের জন্য ব্যাপকভাবে ব্যবহৃত হয়। এই মডিউলটি বিভিন্ন ডিভাইসকে ইন্টারনেটে যুক্ত করতে, এসএমএস পাঠাতে এবং ভয়েস কল করতে পারে।
SIM800L হল একটি কোয়াড-ব্যান্ড GSM/GPRS মডিউল, যা একাধিক ফ্রিকোয়েন্সি ব্যান্ডে (850/900/1800/1900MHz) কাজ করতে পারে। এটি বিশ্বব্যাপী বেশিরভাগ জিএসএম নেটওয়ার্কের সাথে সাপোর্ট করে। যদিও মডিউলটি ছোট, এটি বেশ কয়েকটি কাজে ব্যবহৃত হয়। আজ আমরা SIM800L মডিউলের বৈশিষ্ট্য, অ্যাপ্লিকেশন এবং ব্যবহারের পদ্ধতি নিয়ে আলোচনা করব। যে সকল কাজে মডিউলটি ব্যবহৃত হয়ে থাকে-
- এসএমএস পাঠানো এবং গ্রহণ করা
- ভয়েস কল
- ইন্টারনেট ডেটা ট্রান্সমিশন
- মাইক্রোকন্ট্রোলারের সাথে অটোমেশন
মূল বৈশিষ্ট্য
- কোয়াড-ব্যান্ড সাপোর্টঃ গ্লোবাল জিএসএম ফ্রিকোয়েন্সিতে কাজ করে।
- কমপ্যাক্ট ডিজাইনঃ ছোট ফর্ম ফ্যাক্টর, এটি এমবেডেড অ্যাপ্লিকেশনের জন্য বিশেষ চাহিদা সম্পন্ন।
- লো পাওয়ারঃ ব্যাটারি চালিত ডিভাইসের জন্য উপযোগী।
- TCP/IP স্ট্যাকঃ GPRS এর মাধ্যমে ইন্টারনেট সংযোগ এবং ডেটা ট্রান্সমিশন।
- সিরিয়াল কমিউনিকেশনঃ Arduino, ESP8266, এবং Raspberry Pi এর মতো মাইক্রোকন্ট্রোলারের সাথে সহজে ইন্টারফেস উপযোগী।
অ্যাপ্লিকেশন
SIM800L এর ব্যাপক কার্যক্ষমতা এটিকে বিভিন্ন অ্যাপ্লিকেশনের জন্য উপযুক্ত করে তোলে, যার মধ্যে অন্তর্ভুক্ত রয়েছে:
- হোম অটোমেশনঃ এসএমএস বা ওয়েব ইন্টারফেসের মাধ্যমে দূরবর্তী স্থানের হোম অ্যাপ্লায়েন্স নিয়ন্ত্রণ করা।
- নিরাপত্তা ব্যবস্থাঃ নিরাপত্তা ত্রুটি হলে এসএমএস বা কলের মাধ্যমে সতর্কতা এবং আপডেট পাঠানো।
- দূরবর্তী পর্যবেক্ষণঃ দূরবর্তী অবস্থান থেকে সেন্সর দিয়ে তথ্য গ্রহণ এবং পাঠানো।
- জিপিএস ট্রাকিংঃ যানবাহন ট্র্যাকিং।
- IoT প্রোজেক্টঃ ডেটা লগিং এবং বিভিন্ন IoT ডিভাইসকে নিয়ন্ত্রণের জন্য ইন্টারনেটে সংযুক্ত করা।
পিন ডায়াগ্রাম
NET: নেটওয়ার্কের সাথে কানেক্ট করার জন্য একটি অ্যান্টেনা প্রয়োজন। মডিউলটির সাথে একটি হেলিকাল অ্যান্টেনা রয়েছে যা সোল্ডার করে নেওয়া যাবে।
এছাড়াও মডিউলে একটি U.FL কানেক্টর রয়েছে যার মাধ্যমে অ্যান্টেনাকে বোর্ড থেকে দূরে রাখা যাবে। বোর্ডটির বিপরীত পাশে রয়েছে সিম স্লট। যেকোন 2G মাইক্রো সিম কার্ড সম্পূর্ণভাবে কাজ করবে। সিম কার্ড প্রবেশের সঠিক পদ্ধতি সাধারণ সিম সকেটের পৃষ্টে খোদাই করা থাকে।
VCC: পাওয়ার সাপ্লাই পিন। SIM800L চিপের অপারেটিং ভোল্টেজ ৩.৪ ভোল্ট থেকে ৪.২ ভোল্ট বলা থাকলেও এটি মূলত কাজ করে ৪.৮ ভোল্ট থেকে ৫ ভোল্টে। বর্তমানের স্টকে যেগুলো রয়েছে তা ৪.২ ভোল্টে কার্যকর করা যায়নি। আমরা প্রোডাক্টি টেস্ট করেই সিদ্ধান্ত নিয়েছি। আশা করবো পাওয়ার দেওয়ার ক্ষেত্রে অবশ্যই যাচাই করে নিবেন।
RST (Reset): যদি মডিউলকে মাইক্রোকন্ট্রোলার দিয়ে রিসেট করতে হয়, তাহলে এই পিনের সংযোগ প্রয়োজন রয়েছে।
RXD (Receiver): মডিউলে কমান্ড পাঠাতে ব্যবহৃত হয়। অর্থাৎ মাইক্রোকন্ট্রোলারের ডাটা এই পিন দিয়ে রিসিভ হবে।
TXD (Transmit): এই পিন দিয়ে মডিউল থেকে মাইক্রোকন্ট্রোলারে ডাটা পাঠানো হয়।
GND: মডিলের গ্রাউন্ড পিন।
Ring: এই পিনটি হলো একটি ইন্ডিকেটর। এটি মূলত মডিউলের “ইন্টারাপ্ট আউট” পিন। স্বাভাবিক অবস্থায় High থাকে, ফোন কল বা SMS আসলে এই পিনকে Low করার জন্য কনফিগার করা যাবে।
MIC±: এই দুইটি পিন মাইক্রোফোনের জন্য। আপনি এই দুটি পিনের সাথে একটি ইলেকট্রেট মাইক্রোফোন সংযোগ করতে পারেন।
SPK±: এই দুইটি পিন স্পিকারের জন্য। সরাসরি স্পিকার সংযোগ করতে পারবেন।
পাওয়ার সাপ্লাই
SIM800L মডিউলটির সবচেয়ে গুরুত্বপূর্ণ একটি ধাপ হলো এটিকে পর্যাপ্ত পাওয়ার সরবরাহ করা। মডিউলটির জন্য ৫ ভোল্ট ২ এম্পিয়ার কারেন্ট প্রয়োজন হবে। সেই ক্ষেত্রে একটি ভালো মানের পাওয়ার সাপ্লাই (এডাপ্টার) অবশ্যই ব্যবহার করতে হবে। মডিউলের ভোল্টেজ রেটিং ঠিক হলেও কারেন্ট তুলনা মূলক বেশি মনে হতে পারে। কিন্তু এই পরিমাণ কারেন্ট সব সময় প্রবাহিত হয়না। সাধারণত ফোন কলের সময় প্রায় 216mA বা নেটওয়ার্ক ট্রান্সমিশনের সময় 80mA এর কারেন্ট প্রয়োজন হতে পারে। এই রেটিং কম-বেশিও হতে পারে।
স্টেপ ডাউন
অনেকেই আমরা এডাপটার পাওয়ার সাপ্লাইয়ারের সাথে পরিচিত। এই ধরনের পাওয়ার সাপ্লাই কয়েক ধরনের রেটিং এর হয়ে থাকে। 5V, 2A লেখা দেখে এডাপ্টার ব্যবহার করতে হবে। গুণগত মান ঠিক আছে এমন এডাপ্টারই ব্যবহার করবো। অনেক ক্ষেত্রে ভোল্টেজ-কারেন্ট যা লিখা থাকে সেটি আশানুরূপ পাওয়া যায়না।
সচারচর ৫ ভোল্টের এডাপ্টারগুলো মার্কেটে পাওয়া যায়না। অন্যদিকে ব্যাটারীর ভোল্টেজ ৬ ভোল্ট অথবা ১২ ভোল্টেরও হয়ে থাকে। এই সকল ক্ষেত্রে, ১২ ভোল্ট এডাপ্টার বা ব্যাটারির সাথে Buck মডিউল ব্যবহার করে ভোল্টেজকে 5V সেট করে নিবো।
- Input Voltage: 3.2V – 40VDC
- Output Voltage: 1.25V – 35VDC
- Max. Output Current: 3A
পাওয়ার ব্যাংক থেকে ফিক্সড ৫ ভোল্ট আউটপুট পাওয়া যায়। পর্যাপ্ত কারেন্টও রয়েছে। ফলে নিশ্চিন্তে ব্যবহার করা যাবে।
নেটওয়ার্ক
SIM800L মডিউলটিতে ১টি মাত্র LED রয়েছে। যার জ্বলা-নিভার উপর নির্ভর করে মডিউলটি কি অবস্থায় রয়েছে তা বুঝা যাবে।
প্রতি ১ সেকেন্ডে LED একবার ব্লিংক করতেছে। অর্থাৎ চিপটি চলতেছে কিন্তু এখনও নেটওয়ার্কের সাথে কানেক্ট হয়নি।
প্রতি ৩ সেকেন্ডে LED একবার ব্লিংক করতেছে। অর্থাৎ মডিউলটি সেলুলার নেটওয়ার্কের সাথে কানেক্ট হয়েছে। এই অবস্থায় SMD এবং ফোন কল করা যাবে।
প্রয়োজনীয় কম্পোনেন্টঃ
এক্সপেরিমেন্ট করতে যে সকল কম্পোনেন্ট প্রয়োজন হবে, তার নাম পরিমাণ ও লিংকসহ তালিকা।
ক্রমিক নং | কম্পোনেন্টের নাম | পরিমাণ | লিংক |
১ | Arduino Uno R3 | ১টি | কম্পোনেন্ট লিংক |
২ | SIM800L GSM/GPRS Module | ১টি | কম্পোনেন্ট লিংক |
৩ | Breadboard (830 Point) | ১টি | কম্পোনেন্ট লিংক |
৪ | Silicone Jumper Wire (Male to Male) | প্রয়োজনমত | কম্পোনেন্ট লিংক |
সঠিক কানেক্টিভিটির জন্য সিলিকনের জাম্পার ওয়্যার অধিকগুণে ভালো। সব ধরণের Jumper Wire এই লিংকে পাওয়া যাবে।
সার্কিট কানেকশনঃ
Arduino Uno | SIM800L |
RX (2) | TX |
TX (3) | RST |
GND | GND |
5V/2A Adapter/Buck Module | SIM800L |
5V | VCC |
GND | GND |
Code
AT কমান্ড
AT কমান্ড পাঠাতে নিচের স্ক্যাচটি (কোড) ব্যবহার করবো। কোডটি কম্পাইল করে Arduino তে আপলোড দেওয়ার পর সিরিয়াল মনিটর ওপেন করতে হবে। সিরিয়াল মনিটর ওপেন করে সঠিক Baud Rate এবং “Both NL & CR” অপশনটি সিলেক্ট করতে হবে।
#include <SoftwareSerial.h> //Create software serial object to communicate with SIM800L SoftwareSerial mySerial(3, 2); //SIM800L Tx & Rx is connected to Arduino #3 & #2 void setup() { //Begin serial communication with Arduino and Arduino IDE (Serial Monitor) Serial.begin(9600); //Begin serial communication with Arduino and SIM800L mySerial.begin(9600); Serial.println("Initializing..."); delay(1000); mySerial.println("AT"); //Once the handshake test is successful, it will back to OK updateSerial(); mySerial.println("AT+CSQ"); //Signal quality test, value range is 0-31 , 31 is the best updateSerial(); mySerial.println("AT+CCID"); //Read SIM information to confirm whether the SIM is plugged updateSerial(); mySerial.println("AT+CREG?"); //Check whether it has registered in the network updateSerial(); } void loop() { updateSerial(); } void updateSerial() { delay(500); while (Serial.available()) { mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port } while(mySerial.available()) { Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port } }
কোডের অভ্যন্তরীণ Baud Rate 9600 দেওয়া রয়েছে। তাই সিরিয়াল মনিটরে 9600 সিলেক্ট করে নিতে হবে।
আরডুইনো কোড – SMS পাঠাই
এসএমএস (SMS) পাঠাতে হলে কিছু AT Command ব্যবহার করতে হবে। নিচের স্কেচটি (প্রোগ্রাম) আরডুইনোতে আপলোড করার পূর্বে আপনাকে ফোন নাম্বারটি পরিবর্তন করে নিতে হবে। যে ফোন নম্বরটিতে SMS পাঠাতে চান সেটি লিখতে হবে। 880xxxxxxxxxx দেখুন এবং 88 কান্ট্রি কোড এবং 0xxxxxxxxxx 11 সংখ্যার ফোন নম্বর দিয়ে কম্পাইল করে আপলোড করতে হবে।
#include <SoftwareSerial.h> //Create software serial object to communicate with SIM800L SoftwareSerial mySerial(3, 2); //SIM800L Tx & Rx is connected to Arduino #3 & #2 void setup() { //Begin serial communication with Arduino and Arduino IDE (Serial Monitor) Serial.begin(9600); //Begin serial communication with Arduino and SIM800L mySerial.begin(9600); Serial.println("Initializing..."); delay(1000); mySerial.println("AT"); //Once the handshake test is successful, it will back to OK updateSerial(); mySerial.println("AT+CMGF=1"); // Configuring TEXT mode updateSerial(); mySerial.println("AT+CMGS=\"+880xxxxxxxxxx\""); // Change xxxxxxxxxx with phone number to sms updateSerial(); mySerial.print("TechShopBD | techshopbd.com"); //text content updateSerial(); mySerial.write(26); } void loop() { } void updateSerial() { delay(500); while (Serial.available()) { mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port } while(mySerial.available()) { Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port } }
আরডুইনো কোড – ফোন কল
ফোন কল করতে হলে আরডুইনোর মধ্যে নিচের প্রোগ্রামটি কম্পাইল করে আপলোড করতে হবে। এখানেও একটা বিষয় লক্ষ্য রাখতে হবে, যে নাম্বারে কল করবো সেই নাম্বারটি +880xxxxxxxxxx; এখানে লিখে নিবো।
#include <SoftwareSerial.h> //Create software serial object to communicate with SIM800L SoftwareSerial mySerial(3, 2); //SIM800L Tx & Rx is connected to Arduino #3 & #2 void setup() { //Begin serial communication with Arduino and Arduino IDE (Serial Monitor) Serial.begin(9600); //Begin serial communication with Arduino and SIM800L mySerial.begin(9600); Serial.println("Initializing..."); delay(1000); mySerial.println("AT"); //Once the handshake test is successful, i t will back to OK updateSerial(); mySerial.println("ATD+ +880xxxxxxxxxx;"); // Change xxxxxxxxxx with phone number to dial updateSerial(); delay(20000); // wait for 20 seconds... mySerial.println("ATH"); //hang up updateSerial(); } void loop() { } void updateSerial() { delay(500); while (Serial.available()) { mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port } while(mySerial.available()) { Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port } }
প্রোগ্রাম আপলোড দেওয়ার পর, সিরিয়াল টার্মিনাল ওপেন করতে হবে। এরপর Arduino Uno এর রিসেট বাটন প্রেস করতে হবে। এবার মোবাইলে ফোন চলে আসবে।
SIM900A মডিউল নিয়ে বিস্তারিত রয়েছে SIM900A GSM মডিউলের খুঁটিনাটি ও ফোন কল ব্লগে।
এপ্লিকেশন
- রিমোট সিস্টেম মনিটরিং
- হোম এলার্ম সিস্টেম
- রিমোট কন্ট্রোলিং সিস্টেম
- সিকিউরিটি অ্যাক্সেস কন্ট্রোল
- ভেহিক্যাল ট্র্যাকিং
- এসএমএস গেটওয়ে
- প্রি-পেইড মিটারিং সিস্টেম