হঠাৎ একদিন ঘুম থেকে উঠে মনে হলো, স্বপ্নে তুমি মোবাইল ফোন দিয়ে সব ইলেকট্রনিক ডিভাইস কন্ট্রোল করছো!! তবে তোমার এই স্বপ্ন বাস্তবায়ন করা এখন কোনো অসাধ্য ব্যাপার নয়!
ESP32 ব্যবহার করে খুব সহজেই যেকোনো ইলেকট্রনিক ডিভাইসকে ইন্টারনেটের মাধ্যমে স্মার্টফোন দিয়ে নিয়ন্ত্রন করা সম্ভব। চাইলে ESP32 কে Web Server হিসাবে Run করে নিজের একটি IoT Dashboard ও তৈরি করে নিতে পারো। প্রতিদিন লেগে থাকলে NSPanel এর মত Home Control Device ডিভাইসও বিল্ড করা সম্ভব।
ব্রান্ড সাপ্লাইয়ার SONOFF দাবি করছে তাদের NSPanel এ ESP32 ব্যবহার করা হয়েছে। কিন্তু সার্কিট বোর্ডে সরাসরি কোন ESP32 Development Board DEVKIT V1 খুঁজে পাওয়া যাবে না! কারণ তোমরা প্রোজেক্টে যে ESP ব্যবহার করো, সেটি Fast Prototyping এর জন্য একটি কমপ্লিট ডেভেলপমেন্ট বোর্ড। যেখানে তোমার কাজকে সহজ করার জন্য একটি সম্পূর্ণ এনভায়রনমেন্ট তৈরি করে রাখা হয়েছে। কিন্তু যখন বানিজ্যিক উদ্দেশ্যে কোন প্রোডাক্ট ডেভেলপ করা হয়, তখন অপ্রয়োজনীয় হার্ডওয়্যার সেট-আপ বাদ দিয়ে সেখানে সরাসরি ESP Chip অথবা ESP32 Module এর ব্যবহার করা হয়। মূলত প্রোডাক্টের আকার ছোট এবং খরচ কমানোই এর মূল উদ্দেশ্য।
ESP-WROOM-32
তবে এই ESP এর জন্য Environment Setup সম্পর্কে যদি প্রয়োজনীয় জ্ঞান না থাকে তাহলে এই মিনিমাম হার্ডওয়্যার সেটাপ এবং প্রোগ্রামিং তোমার জন্য অসম্ভব হয়ে দাড়াতে পারে।
যেমন নিচের ছবিতে ESP WROOM 32 মডিউলের প্রকৃত আকার এবং পিন-আউট ডায়াগ্রামটি লক্ষ্য করতে পারো –
মডিউলটির পিন-আউট ডায়াগ্রাম দেখে মনে কিছু প্রশ্ন আসাটাই স্বাভাবিকঃ
১) 3.3V পাওয়ার কোথায় পাবো?
২) প্রোগ্রামার কোথায় এবং প্রোগ্রাম কিভাবে করবো?
প্রথম প্রশ্নের উত্তর তোমার পূর্বের টিউটরিয়্যালেই পেয়ে গিয়েছো। আজ আমরা ফোকাস করবো দ্বিতীয় সমস্যার সমাধান খুঁজবো।
ESP-WROOM-32 কে প্রোগ্রাম করতে প্রথমেই দুইটি Hardware Setup এর প্রয়োজন হবে।
২. একটি রিসেট সার্কিট্রি
USB to UART কনভার্টার
ছোট কম্পিউটার বা মাইক্রোকন্ট্রোলার আইসি গুলো সাধারণত ডেটা ট্রান্সফারের জন্য Serial Interface ব্যবহার করে থাকে। কিন্তু আমাদের আধুনিক কম্পিউটার গুলো থেকে এই RS232 Communication Port সরিয়ে নেওয়া হয়েছে! ফলে এখন Serial Communication এর জন্য অধিকাংশ কম্পিউটারে USB to Serial Converter ব্যবহারের প্রয়োজন পড়ে।
এই ধরণের কনভার্টারগুলো TX এবং RX পিন দিয়ে অন্য ডিভাইসের (যেমনঃ মাইক্রোকন্ট্রোলার) সাথে Serial Communication করে থাকে। আর এই ফিচারটি কাজে লাগিয়ে আমরা মাইক্রোকন্ট্রোলারের Flash Memory-তে প্রোগ্রাম আপলোড করতে পারি।
ESP32 Reset সার্কিট
ESP-WROOM-32 মাইক্রোকন্ট্রোলার মডিউলটি প্রয়োজনের উপর ভিত্তি করে দুইটি ভিন্ন মোডে অপারেট করা যায়।
১. এপ্লিকেশন মোড
২. বুটলোডার মোড
এপ্লিকেশন মোডে ESP32 তার প্রোগ্রাম মেমোরিতে থাকা প্রোগ্রাম Execution করে থাকে। অপরদিকে বুটলোডার মোড ব্যবহার করে Serial Interface-এর সাহায্যে Firmware আপলোড করা যায়।
নরমাল এবং বুডলোডার মোড দুইটি নির্ধারিত হয়ে থাকে মডিউলটির GPIO0 নম্বর পিনের Logical স্ট্যাটাসের উপর ভিত্তি করে। অর্থাৎ মাইক্রোকন্ট্রোলারটি অন হওয়ার সময় GPIO0 এর লজিক্যাল স্ট্যাটাস HIGH থাকলে ESP32 নরমাল মোডে Run করবে। অপরদিকে অন হওয়ার সময় GPIO0 এর লজিক্যাল স্ট্যাটাস LOW থাকলে, ESP32 মাইক্রোকন্ট্রোলার Bootloader মোডে নতুন প্রোগ্রাম আপলোডের জন্য রেডি হবে।
তবে বুটলোডার মোডে ESP32 মোটামুটি ৫ সেকেন্ড সময় অপেক্ষা করে Serial Data রিসিভ করার জন্য। যদি নির্দিষ্ট সময়ের মধ্যে Serial পিনে কোন ভ্যালিড ডেটা না আসে, তাহলে ESP32 আবার এপ্লিকেশন মোডে ফিরে যায়।
অর্থাৎ Programming Software (যেমন ESPRESSIF IDE, Arduino IDE) সোর্স-কোডটি Compile শেষ করার সাথে সাথে যখন Serial Port ওপেন করবে, ঠিক তার আগ মুহুর্তেই মাইক্রোক্ট্রোলারটিকে OFF থেকে ON হতে হবে এবং এসময় অবশ্যই GPIO0 এর লজিক্যাল স্ট্যাটাস LOW থাকতে হবে। বিষটি সুন্দর ভাবে Handle করার জন্য তোমরা নিচের ম্যানুয়্যাল-রিসেট সার্কিটটি অনুসরণ করতে পারো।
ম্যানুয়াল-Reset সার্কিট্রি
লক্ষ্য করো এখানে EN ও GPIO0 পিনকে Pull-Up করে রাখা হয়েছে এবং যখনই আমরা পুশ বাটনটি চেপে দিব, সাথে সাথে নির্দিষ্ট পিনে High to Low ট্রানজিশন হবে।
RESET এবং Program বাটন দুইটি চাপার Sequence বোঝার জন্য নিজের এনিমেনশনের দিকে মনোযোগ দিতে পারো। আশা করি বিষয়টি এখন আরো স্পষ্ট হবে।
ধাপ ১ঃ কম্পিউটার থেকে প্রোগ্রাম আপলোডের সময় মাইক্রোকন্ট্রোলারটিকে বন্ধ করা জন্য EN/RESET পুশ বাটনটি চেপে ধরে রাখতে হবে। এ সময় EN পিনটি Low এবং GPIO0 পিনটি High হবে। ফলে মাইক্রোকন্ট্রোলারটি RESET হবে। (RESET বাটনটি ছেড়ে দেবে না)
ধাপ ২ঃ পূর্বের ইন্সট্রাকশন অনুযায়ী RESET বাটন চেপে ধরা অবস্থায়, PROGRAM বাটনটি চেপে ধরবে এবং RESET বাটনটি Release করে দিবে। (PROGRAM বাটনটি ছেড়ে দেবে না)
এখানে RESET বাটন Release করার সাথে সাথেই মাইক্রোকন্ট্রোলারটি চালু হবে এবং PROGRAM বাটন চেপে ধরে রাখায় GPIO0 পিনটির LOW স্ট্যাটাসের কারণে ESP32 এখন Bootloader মোডে চালু হবে।
ধাপ ৩ঃ এ পর্যায়ে PRGORAM বাটনটি Release করে দিতে হবে। ফলে Program Upload শেষ হওয়ার সাথে সাথেই ESP32 অটোমেটিক ভাবে আবার এপ্লিকেশন মোডে ফেরত আসবে।
আশা করি এখন বুঝে নিয়েছো – কেন ডেভেলপমেন্ট বোর্ডে EN এবং Boot নামে দুইটি পুশ সুইচ ব্যবহার করা হয়েছে?
কিন্তু এভাবে Timing করে Serial Port ওপেন হওয়ার সাথে সাথেই GPIO0 কে LOW স্ট্যাটাসে রাখা একটু কঠিন হয়ে যেতে পারে এবং অনেক সময় প্রোগ্রাম আপলোড হওয়া মিস হতে পারে।
ESP32 Auto Reset সার্কিট্রি
পূর্বে আমরা যে রিসেট সার্কিট্রি সম্পর্কে জেনেছি, সেটি ছিলো ম্যানুয়্যাল রিসেট পদ্ধতি। কিন্তু আমরা যখন Firmware আপডেট করতে চাইবো তখন প্রত্যেকবার নিশ্চয় এই নির্দিষ্ট সময় ধরে EN এবং Program বাটন প্রেস করা সম্ভব হবে না!
তাই আমাদের এমন একটি হার্ডওয়্যার সেটাপ তৈরি করতে হবে, যাতে আমরা কোন নতুন Firmware আপডেট করতে চাইবো তখন যেন এটি এই Sequential Button Pressing এর কাজ নিজে থেকে করতে পারে। অর্থাৎ এটি তার প্রয়োজনমত যেন Application Mode বা Bootloader Mode এ Entry করতে পারে।
ESP32 Development Board এ তুমি এই ধরণের একটি সার্কিট লক্ষ্য করে থাকবে। প্রকৃতপক্ষে এইটি মূলত Auto Reset সার্কিট। যেখানে USB to Serial Converter এর DTR এবং RTS পিন দুইটিকে কাজে লাগিয়ে এই Intelligent সার্কিটটি তৈরি করা হয়েছে।
বিষয়টি আরো পরিষ্কার করার জন্য আমি USB to Serial Converter এর এই DTR এবং RTS পিন দুইটিকে Oscilloscope এর মাধ্যমে মনিটরিং করার চেষ্টা করেছি।
DTR ও RTS পিন সাধারণ অবস্থায় High হয়ে থাকে। যখনি আমরা সিরিয়াল কনভার্টারটি দিয়ে প্রোগ্রাম আপলোড করার চেষ্টা করি, তখন RTS পিনটিতে Low to High ট্রানজিশন হয় এবং এর পরপরই DRT পিনটি Low to High হয়।
ধাপ | DTR | RTS | EN | GPIO0 |
---|---|---|---|---|
১ | 1 | 1 | 1 | 1 |
২ | 1 | 0 | 0 | 1 |
৩ | 0 | 1 | 1 | 0 |
DTR এবং RTS পিনের এই Logic Voltage এর কারণে EN এবং GPIO0 এর অবস্থা Oscilloscope এ দেখলে হয়তো বিষয়টি আরো স্পষ্ট হবে।
Customized Development ও Auto Reset সার্কিট
আশাকরি ESP32 Auto Reset সার্কিটের এই Secret এখন তোমার কাছে স্পষ্ট হয়েছে। এখন যদি আমরা এই USB to Serial Converter, Transistor, এবং Resistor গুলোকে একসাথে জুড়ে দিয়ে একটি পিসিবি বোর্ড তৈরি করে নিতে পারি, তাহলেই তৈরি হয়ে যাবে আমাদের প্রোগ্রামার ইউনিট।
সুতরাং এখন থেকে আমরা যেকোন সার্কিট বোর্ডেই এই ESP32 Module টি ব্যবহার করে নিজেদের ইচ্ছামত যেকোন IoT Interface তৈরি করে নিতে পারবো। এক্ষেত্রে প্রোগ্রামিং এর জন্য নির্দিষ্ট Interface টিতে শুধুমাত্র GND, VCC, TX, RX, EN, এবং GPIO0 পিন গুলোর সাহায্যে একটি কানেক্টর বের করে রাখলেই চলবে।
ESP32 Auto Reset সার্কিট নিয়ে আজ এই পর্যন্তই, মাইক্রোকন্ট্রোলারে আদ্যোপান্ত টিউটোরিয়্যাল সিরিজে নতুন কোনো ইন্টারেস্টিং টপিক নিয়ে আবার হাজির হবো তোমাদের সামনে! ততক্ষণ ভালো থেকো!!
আল্লাহ হাফেজ!!!
FAQ:
Wifi এবং Bluetooth সাপোর্ট থাকা স্বত্তেও কেন USB to UART Converter কেন ব্যবহার করলাম?
উত্তরঃ ESP-WROOM-32 এর Wifi এবং Bluetooth ফিচারটি প্রথম অবস্থায় চালু থাকে না। সেক্ষেত্রে একদম বাজার থেকে কিনে আনা নতুন ESP-WROOM-32 কে প্রথমেই Wifi বা Bluetooth ব্যবহার করে কোড আপলোড করা সম্ভব না। তাই প্রথম প্রোগ্রামটি আপলোড করতে USB to UART Converter টি প্রয়োজন হবে। একবার Wifi বা Bluetooth ফিচারটি কোডের মাধম্যে এক্টিভ করে দিলে, তারপর তুমি ইচ্ছা করলে রিমোটলি Firmware আপডেট করতে পারবে।