মনে করো, কোডিং করে ESP32 মাইক্রোকন্ট্রোলারটির মধ্যে ছোট্ট একটি প্রোগ্রামিং জগৎ তৈরি করলে, কিন্তু এর ভিতরে ঘটতে থাকা ঘটনাগুলো কি বাইরে থেকে দেখা বা বোঝা সম্ভব? অবশ্যই না!!! যেহেতু সব ধরণের প্রোজেক্টে Display ব্যবহারের প্রয়োজন হয় না, তাই এসব ক্ষেত্রে আপলোড করা প্রোগ্রামটি বাস্তবে সঠিকভাবে কাজ করছে কি না – সেটা বোঝা কিছুটা কঠিন হয়ে দাঁড়াতে পারে। অনেকটা অন্ধকার ঘরে বসে, রোবট তৈরির মতোই কঠিন!
তবে ঘাবড়াবার কিছু নেই! সমাধানের জন্য Espressif IDE তে রয়েছে Serial Monitor নামক চমৎকার একটি ফিচার! যেখানে খুব সহজেই ডেটা Print করে, প্রোগ্রামের Output মনিটরিং করতে পারবে। তাহলে, চলো আজ তোমাদেরকে Serial Printing নিয়ে In Depth ধারণা দেয়ার চেষ্টা করব। পাশাপাশি আলোচনা করব Embedded System এ সিরিয়াল প্রিন্টিং এর অসাধারণ সব ব্যবহার সম্পর্কে!!
কেন প্রয়োজন?
Embedded Systems-এ ডিসপ্লে’র ব্যবহার করে প্রোজেক্টের ধরনের উপর। ইন্টারফেসিং মেথডের উপর নির্ভর করে ডিসপ্লে অপারেট করতে মাইক্রোকন্ট্রোলারের ২ থেকে ১০টি পিন ব্যবহারের প্রয়োজন হতে পারে। অপ্রয়োজনে ডিসপ্লে avoid করে, একই সাথে Power Saving এর পাশাপাশি প্রোগ্রামকেও অনেক বেশি simple করা সম্ভব।
কিন্তু তারপরও কাজের সুবিধার্থে Display এর প্রয়োজনীয়তা অপুরণীয় একটি বিষয়। যেমনঃ সেন্সরের ডেটা মনিটরিং, ক্যালিব্রেশন বা Run Time এ প্রোগ্রামের Execution Flow বোঝার চেষ্টা – সকল ক্ষেত্রেই ডিসপ্লে একটি অপরিহার্য্য অংশ।
একদিকে যেমন মাইক্রোকন্ট্রোলারের পিন সংরক্ষণ করতে হবে, অপরদিকে Display ছাড়া কোনো Output দেখা সম্ভব নয়! আর এ কারণেই Espressif IDE তে Serial Monitor বা Terminal ইন্ট্রিগেট করা হয়েছে। যার মাধ্যমে মাইক্রোকন্ট্রোলারে যেকোনো Output খুব সহজে কম্পিউটারের ডিসপ্লে বা মনিটরে দেখানো সম্ভব!
চলো এখন জানবো, কিভাবে মাইক্রোকন্ট্রোলার থেকে কম্পিউটারে ডেটা প্রিন্ট হয়?
UART এবং সিরিয়াল প্রিন্টিং
পূর্বে ESP32 অটো প্রোগ্রাম রিসেট সার্কিট টিউটোরিয়ালে আমরা UART Serial Communication নিয়ে আলোচনা করেছি। সাধারণত, কম্পিউটারগুলো অন্য ইলেকট্রনিক্স ডিভাইসের সাথে USB প্রোটোকল ব্যবহারের মধ্যমে (D+ এবং D– লাইন ব্যবহার করে) কমিউটনিকেশন Established করে। তবে ESP32’র মতো অনেক মাইক্রোকন্ট্রোলার রয়েছে যাদের D+ এবং D– পিন নেই! এসব ক্ষেত্রে মাইক্রোকন্ট্রোলার গুলো UART ব্যবহার করে ডেটা পাঠায় এবং অতঃপর এই ডেটাকে USB to Serial Converter ব্যবহারের মধ্যমে কম্পিউটারের USB Port এ পৌঁছে দেওয়া হয়।
এ কারণেই, আমরা কম্পিউটার থেকে মাইক্রোকন্ট্রোলারে প্রোগ্রাম আপলোড করতে USB to UART কনভার্টার ব্যবহার করে ছিলাম। একইভাবে, মাইক্রোকন্ট্রোলার থেকে Data Read করতেও কনভার্টারটি প্রয়োজন হবে।
প্রাইশ আমরা মাইক্রোকন্ট্রোলারে আপলোড করা প্রোগ্রামের আউটপুট, কিংবা সংযুক্ত সেন্সর বা অন্যান্য মডিউলের ডেটা কম্পিউটারের মনিটরে দেখতে চাই। আজ আমরা দেখবো: কীভাবে Espressif-IDE তে প্রোগ্রাম লিখে ESP32 এর Serial Print ফাংশনালিটি ব্যবহার করে Terminal এ ডেটা দেখা যায়?
তার আগে একটি বিষয় নিশ্চিত হওয়া দরকার—আমি আগের টিউটোরিয়ালে Espressif IDE ইন্সটল করার সম্পূর্ণ গাইডলাইন দিয়েছি। যদি তুমি সেই গাইডলাইন অনুসরণ করে তোমার কম্পিউটারে Espressif IDE ইন্সটল করে থাকো, তবে দারুণ! আর যদি এখনো ইন্সটল না করে থাকো, তাহলে আমার আগের টিউটোরিয়ালটি দেখে ধাপে ধাপে IDE ইন্সটল করে নাও।
কিভাবে সিরিয়াল প্রিন্ট করব?
সিরিয়াল প্রিন্ট কীভাবে করবে তা জানার আগে, একটু নড়ে চড়ে বসো! গত চারটি টিউটোরিয়ালে আমি তোমাদের সফওয়্যার থেকে হার্ডওয়্যার পর্যন্ত প্রতিটি বিষয়ে In-Depth গাইড করেছি।
আজ সেই পরিশ্রমের ফল—তুমি প্রথমবারের মতো ESP32 এর জন্য প্রোগ্রাম লিখবে এবং আপলোড করবে! ইন্টারেস্টিং তাই না? তাহলে আর দেরি না করে, চলো শুরু করা যাক!
সিরিয়াল প্রিন্ট Environment Setup
সিরিয়াল প্রিন্ট করার জন্য প্রথমেই তোমার কম্পিউটারে একটি ছোট সফটওয়্যার বা ড্রাইভার ডাউনলোড করতে হবে। যেহেতু ESP32 কম্পিউটারের সাথে UART Serial Communication ব্যবহার করে ডেটা পাঠায়, এই ড্রাইভারটি ডেটাগুলোকে কম্পিউটারের জন্য বোধ্যগম্য করে তুলবে।
এ নিয়ে চিন্তার কিছু নেই! এই প্রোসেসটি একটি কম্পিউটারের জন্য মাত্র একবারই করতে হবে, এবং একবার সেট-আপ হয়ে গেলে ভবিষ্যতে আর কোনো সমস্যা হবে না।
তোমার কোন ড্রাইভার ইন্সটল করতে হবে, তা নির্ভর করবে ডেভেলপমেন্ট বোর্ডের USB to UART সিরিয়াল কনভার্টার চিপের মডেলের ওপর। নিচের ছবিতে লক্ষ্য করলে সহজেই মডেল চিহ্নিত করার বিষয়টি বুঝতে পারবে।
যেমন, আমরা আগের কয়েকটি টিউটোরিয়্যালে ESP32 Development Board DEVKIT V1 নিয়ে আলোচনা করেছি। এই বোর্ডে UART Communication এর জন্য CP2102 মডেলের USB to UART Bridge Controller ব্যবহার করা হয়েছে। সেক্ষেত্রে CP210x USB to UART Bridge VCP Drivers ইন্সটল করতে হবে, যাতে ESP32 কম্পিউটারের সঙ্গে সঠিকভাবে যোগাযোগ করতে পারে।
ESP32 Development Board DEVKIT V1 এর জন্য ডাউনলোড লিংক এবং ESP32 Development Board DEVKIT V1 USB Type C এর জন্য ডাউনলোড লিংক থেকে সফটওয়্যারটি ডাউনলোড করে নাও।
ফাইলটি আনজিপ করে .exe ইন্সটলার Run করে ড্রাইভারটি নিচের এনিমেশন অনুযায়ী ইন্সটল করে নাও!
ইনস্টলেশন প্রক্রিয়া শেষ হলে, প্রথমে কম্পিউটারের Device Manager এ যাও। (Start Menu তে গিয়ে Device Manager লিখে সার্চ করলেই তুমি অপশনটি পেয়ে যাবে।)
এরপর Ports (COM & LPT) অপশনটি ডাবল ক্লিক করে Expand করো।
এবার ESP32 কানেক্ট করো। দেখবে, নতুন একটি ডিভাইস যুক্ত হয়েছে—Silicon Labs CP210x USB to UART Bridge। এটাই তোমার ESP32! এর পাশে COM লেখা থাকবে, সঙ্গে একটি সংখ্যা (যেমন COM4)।
এই সংখ্যা প্রতিটি কম্পিউটারে ভিন্ন হতে পারে—COM1, COM2, COM3, …, COM8 ইত্যাদি যেকোনো কিছু হতে পারে। তোমার কাজ হলো সংখ্যাটি মনে রাখা, কারণ এটি পরবর্তী ধাপে কাজে লাগবে!
Espressif IDE ও সিরিয়াল প্রিন্ট
প্রথমেই Espressif IDE টি ওপেন করো। ওপেন হওয়ার পর, নিচের মতো একটি ইন্টারফেস দেখতে পাবে।
এখন Menubar-এর একদম বামে File অপশনটি খুঁজে পাবে। সেখানে ক্লিক করে New > Espressif IDF Project সিলেক্ট করো। (কিছুক্ষণ অপেক্ষা করো…)
New IDF Project নামে একটি ডায়ালগ বক্স ওপেন হবে, যেখানে Project name ফিল্ডে তোমার প্রোজেক্টের একটি নাম দিতে হবে। আমি এখানে helloWorld নামটি ব্যবহার করেছি, তবে চাইলে তুমি নিজের পছন্দের নামও দিতে পারো। নাম লিখে Finish বাটনে ক্লিক করো।
(কিছুক্ষণ অপেক্ষা করো…)
দেখবে, Window-এর বাম পাশে Project Explorer সেকশনে helloWorld নামে একটি প্রোজেক্ট ফোল্ডার তৈরি হয়েছে।
এখন helloWorld ফোল্ডারের উপর ডাবল ক্লিক করে Expand করো, দেখবে সেখানে অনেকগুলো Sub-Folder রয়েছে।
Sub-Folder গুলোর মধ্যে main নামের ফোল্ডারটি খুঁজে বের করে ডাবল ক্লিক করে Expand করো।
Expand করার পর দেখবে, সেখানে main.c নামে একটি ফাইল রয়েছে। এই ফাইলের উপর ডাবল ক্লিক করলে এটি Open হবে।
ফাইলটি খুললে দেখবে, এর মধ্যে কিছু কোড আগে থেকেই লেখা আছে। এখন Ctrl + A চাপ দিয়ে সব কোড সিলেক্ট করে Backspace বা Delete প্রেস করে মুছে ফেলো।
এখন তোমার কোড লিখার পালা! নিচের C প্রোগ্রামটি লিখে ফেলো, অথবা সময় বাঁচাতে চাইলে কপি-পেস্ট করেও ব্যবহার করতে পারো। এটি একটি Simple C প্রোগ্রাম, যা Hello, World! প্রিন্ট করবে।
CODE:
#include <stdio.h> void app_main() { printf("Hello, World!\n"); }
এখন Toolbar-এর বাম দিকে থাকা Build আইকনটি প্রেস করো।
এরপর Save and Launch নামে একটি ডায়ালগ বক্স ওপেন হবে। সেখানে OK ক্লিক করলেই Build প্রক্রিয়া শুরু হয়ে যাবে।
(বিল্ড হতে কিছুটা সময় লাগবে, তাই ধৈর্য ধরে অপেক্ষা করো…)
বিল্ড শেষ হলে, Toolbar থেকে নিচে দেখানো আইকনটি প্রেস করো। তখন New ESP Target নামে একটি উইন্ডো ওপেন হবে।
এখান থেকে Serial Port অপশনটি ক্লিক করে, তোমার ESP32-এর জন্য নির্ধারিত COM পোর্ট সিলেক্ট করো। আগের আলোচনায় আমরা যেমন দেখেছি, আমার ESP32-এর জন্য COM4 নির্ধারিত ছিল, তবে তোমার ক্ষেত্রে এটি COM1, COM2, COM3,… যে কোনোটি হতে পারে। সঠিক COM পোর্ট সিলেক্ট করে Finish বাটনে ক্লিক করো।
এখন Toolbar-এর বাম দিক থেকে দ্বিতীয় আইকন অর্থাৎ Run বাটন চাপলেই কোড আপলোড প্রক্রিয়া শুরু হয়ে যাবে! এবং আপলোড চলাকালীন IDE-এর নিচে Console সেকশনে বিভিন্ন ইনস্ট্রাকশন রান হতে থাকবে।
যখনই আপলোড শেষ হবে, সাথে সাথেই Terminal-এ COM পোর্ট ওপেন হয়ে “Hello, World!” লেখা দেখাবে! অর্থাৎ, তোমার ESP32-তে আপলোড করা প্রোগ্রামের আউটপুট সফলভাবে প্রদর্শিত হয়েছে!
বিশ্বাস হচ্ছে না? তাহলে এবার ESP32 কম্পিউটার থেকে খুলে ফেলো! দেখবে “Waiting for the device to reconnect…” লেখা উঠেছে। অর্থাৎ, তোমার ESP32 এখন পুনরায় সংযোগের জন্য অপেক্ষা করছে!
এবার যখন আবার ESP32 কানেক্ট করবে, তখন কিছু ইনস্ট্রাকশনের আউটপুট প্রিন্ট হওয়ার পর “Hello, World!” লেখা দেখাবে। কিন্তু লক্ষ্য করো, এবার তোমাকে নতুন করে কোড আপলোড করতে হয়নি! তাহলে মাইক্রোকন্ট্রোলার সংযোগ দেওয়া মাত্রই এটি প্রিন্ট হলো কীভাবে?
এর উত্তর খুব সহজ—মাইক্রোকন্ট্রোলার কানেক্ট করামাত্র পাওয়ার পায় এবং এর মধ্যে প্রথমবারে আপলোড করা কোডটি পাওয়ার পেতেই এক্সিকিউশন শুরু করে দেয় অর্থাৎ সেই কোডটির আউটপুট Terminal এ দেখা যায়!
আজকের মতো এই পর্যন্তই, সামনের টিউটোরিয়্যালে সিরিয়াল প্রিন্টের জন্য আরো অ্যাডভান্স ফিচার Logging Library নিয়ে আলোচনা করব। সে পর্যন্ত তোমার মনের যত প্রশ্ন আছে সবগুলো কমেন্ট এ লিখে ফেলো। অবশ্যই চেষ্টা করব তোমার সকল প্রশ্নের উত্তর দিতে। ততক্ষণ ভালো থেকো!!
আল্লাহ হাফেজ!!!