পাঠ ২৬ · ৫৭-এর মধ্যে · মডিউল ৬
Home / Courses / Microprocessors, Embedded Systems & IoT / প্রোটোকল বেছে নেওয়া

সঠিক কমিউনিকেশন প্রোটোকল বেছে নেওয়া

Choosing the right communication protocol
৮ মিনিট পড়া মধ্যম · Intermediate Python সিমুলেশনসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • UART/SPI/I2C/1-Wire-এর একটি সংক্ষিপ্ত পাশাপাশি তুলনা
  • ওয়েটেড-স্কোরিং সিদ্ধান্ত-কাঠামো কীভাবে কাজ করে
  • একটি সত্যিকারের কোড সেল যা চারটি দৃশ্যকল্পের জন্য স্কোর গণনা ও সেরা প্রোটোকল র‍্যাংক করে
  • কীভাবে নিজের প্রজেক্টের জন্য এই একই কাঠামো ব্যবহার করবেন

১ · চারটি প্রোটোকল, চারটি ট্রেডঅফ

গত চারটি পাঠে (L22-L25) UART, SPI, I2C ও 1-Wire দেখা হয়েছে -- প্রতিটির নিজস্ব শক্তি ও দুর্বলতা:

  • UART -- সরল, মাত্র ২ তার, কিন্তু পয়েন্ট-টু-পয়েন্ট (একাধিক ডিভাইস সমর্থন করে না)
  • SPI -- দ্রুততম, কিন্তু বেশি ডিভাইস মানে বেশি CS তার (পিন-খরচ বেশি)
  • I2C -- মাত্র ২ শেয়ার্ড তারে একাধিক ডিভাইস, কিন্তু SPI-এর চেয়ে ধীর
  • 1-Wire -- সর্বনিম্ন পিন (১টি ডেটা লাইন), কিন্তু সবচেয়ে ধীর ও টাইমিং-সংবেদনশীল

কোনো একটি প্রোটোকল "সবসময় সেরা" নয় -- সঠিক পছন্দ নির্ভর করে প্রজেক্টের নির্দিষ্ট চাহিদার উপর। এই সিদ্ধান্ত নেওয়ার একটি নিয়মতান্ত্রিক উপায় হলো ওয়েটেড স্কোরিং: প্রতিটি প্রোটোকলকে কয়েকটি মানদণ্ডে ১-৫ রেটিং দেওয়া হয়, তারপর নির্দিষ্ট দৃশ্যকল্পে কোন মানদণ্ড কতটা গুরুত্বপূর্ণ তার ভিত্তিতে ওজন দিয়ে গুণ করে যোগ করা হয়।

দৃশ্যকল্পের মানদণ্ড + ওজন (weights) প্রতিটি প্রোটোকলের score = Σ(rating × weight) র‍্যাংক করা (বেশি স্কোর = ভালো) সেরা পছন্দ
ওয়েটেড-স্কোরিং সিদ্ধান্ত-কাঠামো -- একই চারটি প্রোটোকল, ভিন্ন দৃশ্যকল্পে ভিন্ন ওজনে ভিন্ন বিজয়ী।

২ · সত্যিকারের স্কোরিং সিমুলেশন -- চারটি দৃশ্যকল্প

নিচের কোড সেলে প্রতিটি প্রোটোকলের বেসলাইন রেটিং (১-৫, বেশি = ভালো, কোর্সজুড়ে আলোচিত সাধারণ বৈশিষ্ট্যের উপর ভিত্তি করে একটি শিক্ষামূলক ইলাস্ট্রেটিভ স্কেল -- কোনো একক নির্দিষ্ট চিপ/ডেটাশিটের নিখুঁত মাপ নয়) এবং চারটি দৃশ্যকল্পের ওজন সংজ্ঞায়িত করা হয়েছে, তারপর প্রতিটি দৃশ্যকল্পে সত্যিই স্কোর গণনা করে প্রোটোকল র‍্যাংক করা হয়েছে।

Python
protocols = ["UART", "SPI", "I2C", "1-Wire"]

# প্রতিটি প্রোটোকলের বেসলাইন রেটিং (১-৫, বেশি = ভালো) -- ইলাস্ট্রেটিভ, শিক্ষামূলক স্কেল
ratings = {
    "UART":   {"pin_efficiency": 5, "speed": 3, "multi_device": 1, "wiring_simplicity": 5},
    "SPI":    {"pin_efficiency": 2, "speed": 5, "multi_device": 3, "wiring_simplicity": 2},
    "I2C":    {"pin_efficiency": 5, "speed": 3, "multi_device": 5, "wiring_simplicity": 4},
    "1-Wire": {"pin_efficiency": 5, "speed": 1, "multi_device": 3, "wiring_simplicity": 5},
}

# চারটি বাস্তব দৃশ্যকল্প -- প্রতিটি মানদণ্ডের গুরুত্ব (ওজন, ১-৫)
scenarios = {
    "একটি তাপমাত্রা সেন্সর, ন্যূনতম ওয়্যারিং":
        {"pin_efficiency": 3, "speed": 1, "multi_device": 1, "wiring_simplicity": 3},
    "হাই-স্পিড SD কার্ড/ডিসপ্লে ইন্টারফেস":
        {"pin_efficiency": 1, "speed": 5, "multi_device": 1, "wiring_simplicity": 1},
    "একই বাসে ১০টি সেন্সর যুক্ত করা":
        {"pin_efficiency": 3, "speed": 1, "multi_device": 5, "wiring_simplicity": 2},
    "PC-র সাথে ডিভাইসের সাধারণ ডিবাগ/লগ কানেকশন":
        {"pin_efficiency": 2, "speed": 2, "multi_device": 1, "wiring_simplicity": 4},
}


def score_protocol(protocol, weights):
    r = ratings[protocol]
    return sum(r[criterion] * weight for criterion, weight in weights.items())


print("দৃশ্যকল্পভিত্তিক ওয়েটেড স্কোরিং (বেশি স্কোর = ভালো পছন্দ):\n")
for scenario_name, weights in scenarios.items():
    print(f"দৃশ্যকল্প: {scenario_name}")
    print(f"  ওজন: {weights}")
    results = [(p, score_protocol(p, weights)) for p in protocols]
    results.sort(key=lambda item: item[1], reverse=True)
    for rank, (p, s) in enumerate(results, start=1):
        print(f"    #{rank}  {p:6s}  স্কোর={s}")
    print(f"  -> সেরা পছন্দ: {results[0][0]}\n")

    
লক্ষ্য করুন -- "হাই-স্পিড SD কার্ড" দৃশ্যকল্পে speed-এর ওজন সবচেয়ে বেশি, তাই SPI (speed rating ৫) জিতে যায়। "১০টি সেন্সর একই বাসে" দৃশ্যকল্পে multi_device-এর ওজন সবচেয়ে বেশি, তাই I2C (multi_device rating ৫) স্পষ্টভাবে এগিয়ে থাকে। একই রেটিং টেবিল, শুধু ওজন বদলানোয় বিজয়ী বদলে যাচ্ছে -- এটাই ওয়েটেড-স্কোরিং পদ্ধতির মূল শক্তি।
মূল কথা · Key takeaway

সঠিক সিরিয়াল প্রোটোকল বেছে নেওয়া মানে "কোনটা সবচেয়ে ভালো" প্রশ্নের উত্তর খোঁজা নয়, বরং "এই নির্দিষ্ট প্রজেক্টে কোন মানদণ্ড সবচেয়ে গুরুত্বপূর্ণ" প্রশ্নের উত্তর খোঁজা। এই একই ওয়েটেড-স্কোরিং কাঠামো পরে M10-এ IoT কানেক্টিভিটি (WiFi/BLE/Zigbee/LoRaWAN/Cellular) বেছে নিতেও (L45) আবার ব্যবহার করা হবে -- এটি এই কোর্সের একটি বারবার-ব্যবহৃত সিদ্ধান্ত-নেওয়ার প্যাটার্ন।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন -- তারপর "→ উত্তর" চাপুন।

প্র ০১ "PC-র সাথে ডিভাইসের সাধারণ ডিবাগ/লগ কানেকশন" দৃশ্যকল্পে UART ও I2C প্রায়ই স্কোরে কাছাকাছি বা সমান আসতে পারে। বাস্তবে এই কাজে প্রকৌশলীরা কোনটা বেশি ব্যবহার করেন, এবং কেন?

বাস্তবে UART -- কারণ প্রায় সব কম্পিউটারের USB-to-serial অ্যাডাপ্টার সরাসরি UART-ভিত্তিক "সিরিয়াল কনসোল" হিসেবে কাজ করে, আর সাধারণ ডিবাগ লগে মাল্টি-ডিভাইস অ্যাড্রেসিং লাগে না। এটি দেখায় যে স্কোরে কাছাকাছি থাকা অপশনগুলোর মধ্যে বাস্তব ইকোসিস্টেম/টুলিং সাপোর্টও (এই সরল মডেলে ধরা হয়নি এমন একটি বাস্তব ফ্যাক্টর) একটি গুরুত্বপূর্ণ বিবেচ্য বিষয়।

প্র ০২ যদি কোনো দৃশ্যকল্পে সব মানদণ্ডের ওজন সমান (প্রতিটি ১) রাখা হয়, তাহলে ফলাফল কী বোঝাবে?

সেটি একটি "সব দিক থেকে গড়পড়তা সবচেয়ে ভালো" প্রোটোকল বের করবে -- কোনো একটি নির্দিষ্ট চাহিদাকে প্রাধান্য না দিয়ে। বাস্তব প্রজেক্টে এটি খুব কমই ঘটে, কারণ প্রায় সবসময় কিছু না কিছু মানদণ্ড (যেমন পাওয়ার-সংবেদনশীল ডিভাইসে ওয়্যারিং সরলতা, বা হাই-স্পিড ডেটা লগারে গতি) অন্যগুলোর চেয়ে স্পষ্টভাবে বেশি গুরুত্বপূর্ণ।

প্র ০৩ কোড সেলের ratings ডিকশনারিতে 1-Wire-এর speed রেটিং সবচেয়ে কম (১) কেন যৌক্তিক, L25-এর সিমুলেশনের সাথে মিলিয়ে ব্যাখ্যা করুন।

L25-এর সিমুলেশনে দেখা গেছে প্রতিটি 1-Wire বিট পাঠাতে একটি পুরো টাইম-স্লট (উদাহরণে ৬৫µs) লাগে -- যেখানে SPI-তে (L23) একই ৮ বিট মাত্র কয়েক মাইক্রোসেকেন্ডে (এমনকি সাব-মাইক্রোসেকেন্ডেও, উচ্চ ক্লক ফ্রিকোয়েন্সিতে) পাঠানো সম্ভব। এই বাস্তব, আগের পাঠে সত্যিই গণনা করা টাইমিং পার্থক্যই এই রেটিং টেবিলের speed মানগুলোর পেছনের যুক্তি।

অনুশীলন

  1. চিন্তা করুন: "একটি তাপমাত্রা সেন্সর, ন্যূনতম ওয়্যারিং" দৃশ্যকল্পে UART, I2C ও 1-Wire-এর স্কোর হাতে গণনা করে দেখুন কে এগিয়ে থাকে বলে আপনার হিসাব বলে (ওজন: pin_efficiency=3, speed=1, multi_device=1, wiring_simplicity=3)।

    UART: $5(3)+3(1)+1(1)+5(3)=34$। I2C: $5(3)+3(1)+5(1)+4(3)=35$। 1-Wire: $5(3)+1(1)+3(1)+5(3)=34$। I2C সামান্য ব্যবধানে (৩৫) এগিয়ে থাকে -- মূলত এর multi_device রেটিং বেশি হওয়ায়, যদিও এই দৃশ্যকল্পে multi_device-এর ওজন কম। কোড সেল চালিয়ে এই হাতে-করা গণনা যাচাই করে নিন।

  2. পরীক্ষা করুন: scenarios ডিকশনারিতে একটি নতুন দৃশ্যকল্প যোগ করুন -- "ব্যাটারি-চালিত ওয়্যারলেস সেন্সর নোডের ভেতরে সেন্সর-টু-MCU লিংক" -- যেখানে wiring_simplicity ও pin_efficiency-এর ওজন বেশি (৪-৫), কিন্তু speed-এর ওজন কম (১), এবং Run চেপে দেখুন কোন প্রোটোকল জেতে।

    এই ওজন বিন্যাসে সাধারণত I2C বা 1-Wire শীর্ষে থাকবে -- দুটোরই pin_efficiency ও wiring_simplicity রেটিং বেশি (৫, ৪-৫), আর কম গুরুত্বপূর্ণ speed-এ তাদের কম রেটিং থাকলেও তেমন ক্ষতি হয় না, যেহেতু সেই মানদণ্ডের ওজনই কম। ঠিক কোনটা জিতবে নির্দিষ্ট সংখ্যার উপর নির্ভর করে -- কোড চালিয়ে দেখাই সবচেয়ে নির্ভরযোগ্য উপায়।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

  • কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ মাইক্রোপ্রসেসর আর্কিটেকচার, এমবেডেড C, GPIO, টাইমার/PWM/ADC, সিরিয়াল প্রোটোকল, RTOS, সেন্সর/অ্যাকচুয়েটর, IoT আর্কিটেকচার, ওয়্যারলেস প্রোটোকল, MQTT/CoAP ও IoT সিকিউরিটি -- বাকি পাঠগুলো শীঘ্রই যুক্ত হবে।
  • Computer Architecture & Digital Logic কোর্স সহোদর কোর্স সাধারণ বাস আর্কিটেকচারের ভিত্তি সেই কোর্সে -- এই মডিউল তার একধাপ নিচের ডিভাইস-লেভেল সিরিয়াল প্রোটোকলে গিয়েছে।
  • সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, DBMS, Discrete Mathematics, System Design, Cybersecurity, Cloud Computing & DevOps, Computer Networks, Operating Systems, Computer Architecture, Design and Analysis of Algorithms ও আরও অনেক কোর্স -- সব এক জায়গায়।
আগের পাঠ
1-Wire ও অন্যান্য লো-পিন-কাউন্ট প্রোটোকল