# IoT এর আরো গভীরে ![A sketchnote overview of this lesson](../../../../sketchnotes/lesson-2.jpg) >স্কেচনোটটি তৈরী করেছেন [Nitya Narasimhan](https://github.com/nitya). বড় সংস্করণে দেখার জন্য ছবিটিতে ক্লিক করতে হবে। ## লেকচার পূর্ববর্তী কুইজ [লেকচার পূর্ববর্তী কুইজ](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/3) ## সূচনা এই অংশে আমাদের আগের পাঠ্যের আলোচিত কিছু বেসিক ধারণাগুলির আরও গভী্রে যাব আমরা। এই পাঠে আমরা কভার করব: * [আইওটি উপাদানসমূহ](#আইওটি-উপাদানসমূহ) * [মাইক্রোকন্ট্রোলারের আরো গভীরে](#মাইক্রোকন্ট্রোলারের-আরো-গভীরে) * [সিংগেল বোর্ড কম্পিউটারের আরো গভীরে](#সিংগেল-বোর্ড-কম্পিউটারের-আরো-গভীরে) ## আইওটি উপাদানসমূহ আইওটি অ্যাপ্লিকেশনের দুটি উপাদান হলো *ইন্টারনেট* এবং *থিংস* । এই দুটি উপাদানকে আরও কিছুটা বিস্তারিতভাবে দেখা যাক। ### থিংস ![A Raspberry Pi 4](../../../../images/raspberry-pi-4.jpg) **থিংস** বলতে আইওটির এই অংশটি এমন একটি ডিভাইসকে বোঝায় যা চারপাশের জগতের সাথে যোগাযোগ করতে পারে। এই ডিভাইসগুলি সাধারণত ছোট, কম দামের কম্পিউটার, কম গতিতে চলমান এবং কম শক্তি ব্যবহার করে। উদাহরণস্বরূপ সাধারণ মাইক্রোকন্ট্রোলারগুলি কিলোবাইট র‍্যামের (অথচ একটি পিসিতে তা গিগাবাইটের) চালিত হয় মাত্র কয়েক শতাধিক মেগাহার্টজ (অথচ একটি পিসিতে তা গিগাহার্টজের)। তবে কখনও কখনও এত অল্প শক্তি ব্যবহার করে তারা ব্যাটারিতে সপ্তাহ, মাস বা কয়েক বছর ধরে চলতে পারে। এই যন্ত্রগুলো আমাদের চারপাশের পৃথিবীর সাথে সংযুক্ত থাকে; হয় সেন্সর ব্যবহার করে তথ্য সংগ্রহ করে অথবা একচুয়েটরের আউটপুট নিয়ন্ত্রণ করে কোন কাজ করার মাধ্যমে। এর সাধারণ একটি উদাহরণ হল স্মার্ট থার্মোস্ট্যাট -এমন একটি ডিভাইস যার মধ্যে তাপমাত্রা সেন্সর থাকে। এছাড়াও এতে থাকে একটি পছন্দসই তাপমাত্রা সেট করার উপায় যেমন ডায়াল বা টাচস্ক্রিন ব্যবহার করে এবং একটি তাপীকরণ বা শীতলকরণ ব্যবস্থার সাথে সংযুক্ত থাকে। ব্যবহারকারীর নির্ধারিত সীমার বাইরে গেলেই এই যন্ত্রগুলো চালু হয় । এখানে উদাহরণস্বরূপ, তাপমাত্রা সেন্সর সনাক্ত করে যে ঘরটি খুব শীতল এবং একটি একচুয়েটর তখন হিটিং চালু করে। ![A diagram showing temperature and a dial as inputs to an IoT device, and control of a heater as an output](../../../../images/basic-thermostat.png) বিভিন্ন জিনিস রয়েছে যা আইওটি ডিভাইস হিসাবে কাজ করতে পারে, সংবেদনশীল ডেডিকেটেড হার্ডওয়্যার থেকে শুরু করে , জেনারেল পারপাস ডিভাইস এমনকি আমাদের স্মার্টফোন পর্যন্ত! একটি স্মার্টফোন চারপাশের বিভিন্ন তথ্য সংগ্রহের জন্য সেন্সর ব্যবহার করে এবং বাস্তব জগতের সাথে যোগাযোগ করে একচুয়েটর - উদাহরণস্বরূপ আমাদের অবস্থান সনাক্ত করতে জিপিএস সেন্সর এবং কোন গন্তব্যে আমাদেরকে নির্দেশনা দেওয়ার জন্য স্পিকার রয়েছে। ✅ আমাদের চারপাশের অন্যান্য সিস্টেমগুলির কথা চিন্তা করি যা সেন্সর থেকে ডেটা সংগ্রহ করে এবং সিদ্ধান্ত নিতে তা ব্যবহার করে। একটি উদাহরণ হতে পারে, ওভেনের উপর রাখা থার্মোস্ট্যাট। চারপাশে আরও কিছু কী খুঁজে পাওয়া যাবে ? ### ইন্টারনেট আইওটি অ্যাপ্লিকেশনটির **ইন্টারনেট** অংশে বোঝান হয় এমন সব অ্যাপ্লিকেশন যার সাথে আইওটি ডিভাইসে সংযুক্ত থেকে ডেটা প্রেরণ এবং গ্রহণ করতে পারে। পাশাপাশি অন্যান্য অ্যাপ্লিকেশনগুলিও এর অংশ যা আইওটি ডিভাইস থেকে প্রাপ্ত ডেটা বিশ্লেষণ করতে পারে এবং আইওটি ডিভাইস একচুয়েটরকে কী কী নির্দেশ পাঠাতে হবে সেই সিদ্ধান্ত নেয়। একটি সাধারণ সেটআপে আইওটি ডিভাইসটি সংযুক্ত হওয়ার সাথে কিছু ধরণের ক্লাউড সেবা থাকবে এবং এই ক্লাউড পরিষেবাগুলো সুরক্ষা, আইওটি ডিভাইস থেকে বার্তা গ্রহণ এবং ডিভাইসে বার্তা প্রেরণের মতো বিষয়গুলি পরিচালনা করে। এই ক্লাউড সার্ভিসটি তখন এমন অন্যান্য অ্যাপ্লিকেশনগুলির সাথে সংযুক্ত হবে যা সেন্সর ডেটা প্রক্রিয়া করতে বা স্টোর করতে পারে। এছাড়াও সিদ্ধান্ত নিতে অন্যান্য যেকোন সিস্টেমের ডেটার সেন্সর থেকে প্রাপ্ত ডেটা ক্লাউড সার্ভিস ব্যবহার করে থাকে। ডিভাইসগুলো সবসময় যে ক্যাবল বা ওয়াইফাই দ্বারা সরাসরি ইন্টারনেটে সংযুক্ত থাকবে তাও কিন্তু নয়। কিছু যন্ত্র মেশ নেটওয়ার্ক ব্যবহার করে ব্লুটুথ বা এইধরণের কোন টেকনলজির সাহায্যে অন্য ডিভাইসের সাথে যুক্ত থাকে, আর এই সংযুক্তি ঘটায় হাব যা নিজে ইন্টারনেটের সাথে যুক্ত । ইন্টারনেট সংযোগে কাজের উদাহরণস্বরূপ, একটি থার্মোস্ট্যাট নিই, যা কিনা ক্লাউডে হোম ওয়াইফাই ব্যবহার করে সংযুক্ত হয়েছে। এটি এই ক্লাউড পরিষেবায় তাপমাত্রার ডেটা প্রেরণ করে এবং সেখান থেক তা কোন ডাটাবেইস বা তথ্যভান্ডারে সংরক্ষিত থাকে এবং বাড়ির মালিককে কোন একটি মোবাইল অ্যাপ্লিকেশন ব্যবহার করে বর্তমান এবং অতীত তাপমাত্রা যাচাই করার সুযোগ দেয়। ক্লাউডের অন্য একটি আগে থেকেই জেনে নেয় যে বাড়ির মালিক কত তাপমাত্রা পছন্দ করেন এবং সেই পছন্দের ভিত্তিতে ক্লাউড সার্ভিসের মাধ্যমে আইওটি ডিভাইসে বার্তা প্রেরণ করে হিটিং সিস্টেমটি চালু বা বন্ধ করতে বলে। ![A diagram showing temperature and a dial as inputs to an IoT device, the IoT device with 2 way communication to the cloud, which in turn has 2 way communication to a phone, and control of a heater as an output from the IoT device](../../../../images/mobile-controlled-thermostat.png) আরও উন্নত কোন ভার্সন, যা আইওটি ডিভাইসে সংযুক্ত অন্যান্য ডিভাইসের সেন্সরগুলির সাথে যেমন অকুপেন্সি সেন্সর থেকে বিভিন্ন তথ্য ( যেমন সেই সময়ের আবহাওয়া বা আপনার ব্যক্তিগত ক্যালেন্ডারে কী কী তথ্য রয়েছে) এর ভিত্তিতে সিদ্ধান্ত নিতে পারে যে তাপমাত্রা কত হওয়া উচিত। উদাহরণস্বরূপ আপনার ক্যালেন্ডারে বলা রয়েছে আজ আপনি ভ্রমণে গিয়েছেন। সেক্ষেত্রে শীতকালে আপনার রুমে হিটার চালানোর কোন দরকার নেই আর, আইওটি এই স্মার্ট ডিসিশনটি নিতে পারবে। এছাড়াও আপনি কোন রুম কখন কীভাবে ব্যবহার করেন, তার ভিত্তিতেও আর্টিফিশিয়াল ইন্টেলিজেন্স মডেলগুলি সিদ্ধান্ত নিতে পারে আর সময়ের সাথে সাথে প্রাপ্ত ডেটার কারণে এই সিদ্ধান্তগুলি আরো বেশি সঠিক হতে থাকে। ![A diagram showing multiple temperature sensors and a dial as inputs to an IoT device, the IoT device with 2 way communication to the cloud, which in turn has 2 way communication to a phone, a calendar and a weather service, and control of a heater as an output from the IoT device](../../../../images/smarter-thermostat.png) ✅ ইন্টারনেট সংযুক্ত থার্মোস্ট্যাটকে আরও স্মার্ট করে তুলতে অন্য কোন কোন ধরণের ডেটা সাহায্য করতে পারে? ### Edge চালিত IoT যদিও আইওটিতে **I** বলতে ইন্টারনেট বোঝায়, এই ডিভাইসগুলি যে অবশ্যই ইন্টারনেটে সংযুক্ত থাকতে হবে - তা পুরোপুরি সত্য নয়। কিছু ক্ষেত্রে আইওটি যন্ত্রগুলো 'এজ' ডিভাইসগুলির সাথে সংযোগ স্থাপন করতে পারে - যেগুলো হলো লোকাল নেটওয়ার্কে চালিত গেটওয়ে ডিভাইস যেখানে ইন্টারনেটে কোন সংযোগ না করেই ডেটা প্রক্রিয়া করতে পারবো। আমাদের যখন প্রচুর ডেটা ট্রান্সফার বা ধীর ইন্টারনেট সংযোগ থাকে তখন এটির মাধমে সম্পূর্ণ কাজ আরও দ্রুততর হতে পারে যা অফলাইনে চালানো যাবে এমনকি যখন কোন মানবিক সংকটের সময় কোন জাহাজে বা দুর্যোগ অঞ্চলে ইন্টারনেট সংযোগ সম্ভব হয়না, তখন সেখানে কার্যক্রম পরিচালনা করা যায়; সাথে সাথে আমাদের ব্যক্তিগত তথ্যের গোপনীয়তা রক্ষা করাও সম্ভব । কিছু ডিভাইসে ক্লাউড সুবিধা ব্যবহার করে তৈরি প্রসেসিং কোড থাকে এবং কোনও সিদ্ধান্ত নেওয়ার জন্য কোনও ইন্টারনেট সংযোগ ব্যবহার না করেই ডেটা সংগ্রহ ও প্রতিক্রিয়া জানাতে লোকাল নেটওয়ার্কে এটি চালানো যাবে। উদাহরণস্বরূপ, আমাদের স্মার্ট হোম ডিভাইস যেমন অ্যাপল হোমপড, অ্যামাজন অ্যালেক্সা বা গুগল হোম যা প্রশিক্ষিত এআই মডেলগুলি ব্যবহার করে আমাদের ভয়েস শুনতে পাবে এবং নির্দিষ্ট শব্দ বা বাক্যাংশ বললে চালু হয় বা 'wake up' করে এবং তারপরই আমরা আমাদের কথাগুলো ইন্টারনেটে প্রসেসিং এর জন্য পাঠাই অথচ বাকি সময়ের নির্দেশগুলো প্রাইভেট থাকে। বিস্তারিত বলতে গেলে, ডিভাইসটি উপযুক্ত সময়ে আমাদের ভয়েস প্রেরণ বন্ধ করবে যেমন এটি যখন আমাদের কথায় কোন বিরতি সনাক্ত করে, তখন বন্ধ হয়ে যায়। এটিকে'wake up' করার আগে এবং ডিভাইসটি বন্ধ করার পরে আমরা যা কিছু বলছি, তা ইন্টারনেটের মাধ্যমে ডিভাইস সরবরাহকারীর বা প্রস্তুতকারকের কাছে প্রেরণ করা হবে না এবং তাই এটি ব্যক্তিগত গোপনীয়তা বজায় রাখবে। ✅ এমন কিছু পরিস্থিতির কথা চিন্তা করি যেখানে গোপনীয়তা গুরুত্বপূর্ণ, তাই ডেটা প্রক্রিয়াকরণটি ক্লাউডের চেয়ে 'Edge' এ করা তুলনামূলকভাবে ভালো । ছোট্ট একটি ইঙ্গিত দিই - ক্যামেরা বা অন্যান্য ইমেজিং ডিভাইস সম্বলিত আইওটি সার্ভিসকে এক্ষেত্রে ভাবা যেতে পারে । ### IoT নিরাপত্তা যেকোন ইন্টারনেট সংযোগের সাথে, সুরক্ষা একটি গুরুত্বপূর্ণ বিষয়। বেশ পরিচিত একটি কৌতুক রয়েছে যেখানে বলা হয়, IoT তে S মানে হলো Security - কিন্তু আইওটির পূর্ণরূপে কোথাও S নেই, যার মানে Security বা নিরাপত্তা নেই। উদাহরণস্বরূপ, [Stuxnet worm](https://wikipedia.org/wiki/Stuxnet) নামক ক্ষতিকারক 'কীট' বা worm অনেকগুলো সেন্ট্রিফিউজের ভাল্ভকে ভুলভাবে নিয়ন্ত্রণ করে কাজে ব্যাঘাত ঘটায়। হ্যাকাররাও তখন [baby monitor গুলোর নিম্নমানের নিরাপত্তার](https://www.npr.org/sections/thetwo-way/2018/06/05/617196788/s-c-mom-says-baby-monitor-was-hacked-experts-say-many-devices-are-vulnerable) সুযোগ নেয়। > 💁 কখনও কখনও আইওটি ডিভাইস এবং Edge ডিভাইসগুলি ব্যক্তিগত তথ্য ও নিরাপত্তাকে সুরক্ষিত রাখতে ইন্টারনেট থেকে সম্পূর্ণ বিচ্ছিন্ন কোন নেটওয়ার্কে চালিত হয়। এটিকে বলা হয় [এয়ার গ্যাপিং](https://wikipedia.org/wiki/Air_gap_(networking))। ## মাইক্রোকন্ট্রোলারের আরো গভীরে গত লেসনে আমরা মাইক্রোকন্ট্রোলারদের পরিচিত হয়েছিলাম। এখন তাদেরকে আরও গভীরভাবে জানবো। ### সিপিইউ সিপিইউ হল মাইক্রোকন্ট্রোলারের 'মস্তিষ্ক'। এটি মূলত প্রসেসর যা আপনার কোড রান করে এবং কোন সংযুক্ত ডিভাইসে ডেটা প্রেরণ এবং তা থেকে ডেটা গ্রহণ করতে পারে। সিপিইউতে এক বা একাধিক কোর থাকতে পারে - যা মূলত এক বা একাধিক সিপিইউ যা কোড রান করার জন্য একসাথে কাজ করতে পারে। সিপিইউগুলি একধরণের ঘড়ির উপর নির্ভর করে যা প্রতি সেকেন্ডে বহু মিলিয়ন বা বিলিয়ন বার টিক দেয়। প্রতিটি টিক বা সাইকেলে, সিপিইউর তার ক্ষমতানুসারে কাজগুলো করে। প্রতিটি টিকের সাথেই সিপিইউ কোন প্রোগ্রামের একটি নির্দেশনা কার্যকর করতে পারে, যেমন কোন বাহ্যিক ডিভাইস থেকে ডেটা পুনরুদ্ধার করা বা গাণিতিক গণনা সম্পাদন করা। এই নিয়মিত চক্রটি পরবর্তী নির্দেশাবলী প্রক্রিয়া করার আগেই আগের সব কাজ করে ফেলে। ক্লক সাইকেল যত দ্রুত হবে, প্রতি সেকেন্ডে সিপিইউ তত বেশি কাজও করতে পারবে অর্থাৎ দ্রুততর সিপিইউ হবে। এদের গতি পরিমাপ করা হয়ে থাকে [হার্টজ (Hz)](https://wikipedia.org/wiki/Hertz) এককে, যেখানে ১ হার্টজ বলতে বোঝান হয়, প্রতি সেকেন্ডে একটি চক্র বা টিক সম্পাদন করা। > 🎓 বেশিরভাগ সময় সিপিইউ স্পীড লেখা হয় MHz অথবা GHz দিয়ে। ১ মেগাহার্টজ হলো ১ মিলিয়ন হার্টজ এবং ১ গিগাহার্টজ হলো ১ বিলিয়ন হার্টজ । > 💁 সিপিইউগুলো [fetch-decode-execute cycle](https://wikipedia.org/wiki/Instruction_cycle) ব্যবহার করে প্রোগ্রাম এক্সেকিউট করে। প্রতি টিক এর সাথে সিপিইউ পরবর্তী নির্দেশনা গ্রহণ করবে, তা ডিকোড করবে এবং পরিশেষে এক্সেকিউট করবে যেমনঃ Arithmetic Logic Unit (ALU) ব্যবহার করে ২ যোগ করা। কিছু কিছু এক্সেকিউশন এর জন্য একাধিক টিক বা সাইকেল দরকার হয়। কাজ হয়ে যাওয়ার পর, পরবর্তী টিক আসলে তবেই পরের সাইকেলটি রান করবে। ![The fetch decode execute cycles showing the fetch taking an instruction from the program stored in RAM, then decoding and executing it on a CPU](../../../../images/fetch-decode-execute.png) মাইক্রোকন্ট্রোলারগুলির ক্লক স্পীড ডেস্কটপ বা ল্যাপটপ কম্পিউটার, এমনকি বেশিরভাগ স্মার্টফোনের চেয়ে অনেক কম। উদাহরণস্বরূপ, Wio টার্মিনালের একটি সিপিইউ রয়েছে যা 120MHz বা সেকেন্ডে 120,000,000 সাইকেল চালায়। ✅ একটি গড়পড়তা পিসি বা ম্যাক এর গিগাহার্টজে চলমান একাধিক কোর থাকে অর্থাৎ সেকেন্ডে কয়েক বিলিয়ন বার টিক দেয় বা সাইকেল সম্পাদন করে। আমাদের কম্পিউটারের ক্লক স্পীড কত তা জেনে নিয়ে Wio টার্মিনালের চেয়ে তা কতগুণ দ্রুত সেই হিসেব করি। প্রতিটি সাইকেল রান করতে প্রয়োজন হয় শক্তি যা কিনা তাপ বা হিট তৈরী করে। যত দ্রুত ক্লকস্পীড, তত বেশি পাওয়ার প্রয়োজন হবে এবং তাপ উৎপন্ন হবে। পিসির তাপ অপসারণ করত 'হিট সিংক' এবং ফ্যান ব্যবহৃত হয় যা ছাড়া প্রচণ্ড উত্তাপের সাথে কয়েক সেকেন্ডের মধ্যেই কম্পিউটার বন্ধ হয়ে যাবে। মাইক্রোকন্ট্রোলারে এরকম তাপ অপসারণের কোন সুযোগ দরকার হয়না কেননা এরা অনেক কম গতিসম্পন্ন ক্লকস্পীডে চলে এবং তাই ততটা তাপ তৈরী করেনা। > 💁 কিছু পিসি বা ম্যাক দ্রুত গতির হাই-পাওয়ার কোর এবং ধীর গতির লো-পাওয়ার কোর ব্যবহার শুরু করছে যাতে ব্যাটারি পাওয়ার বাঁচানো যায়। উদাহরণস্বরূপ, লেটেস্ট অ্যাপল ল্যাপটপে M1 চিপ ব্যবহার করে হচ্ছে, যা ৪টি পার্ফম্যান্স কোর এবং ৪টি ইফিশিয়েন্ট কোর এর মধ্যে কাজ ভাগ করতে পারে,যাতে করে পরিমিত ব্যাটারি লাইফ পাওয়া যায় আবার কাজের গতিও ঠিক থাকে। ✅ ছোট্ট একটা কাজ করিঃ সিপিইউ সম্পর্কে আরো একটু বিষদভাবে জানার চেষ্টা করি, এই [Wikipedia CPU article](https://wikipedia.org/wiki/Central_processing_unit) থেকে। #### কাজ Wio Terminal পর্যালোচনা করা । এই লেসনের জন্য আমরা Wio Terminal ব্যবহার করলে, এটার সিপিইউ কী খুঁজে দেখতে পারি ? [Wio Terminal প্রোডাক্ট পেইজ](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) এ গিয়ে, একটু নিচে গেলেই *Hardware Overview* নামে একটি অংশ পাওয়া যাবে যেখানে Wio Terminal এর ভেতরের সব দেখা যায় - সিপিইউ আমরা সেখান থেকেই দেখতে পাবো। ### মেমোরি মাইক্রোকন্ট্রোলারে সাধারণত ২ ধরণের মেমোরি থাকে - প্রোগ্রাম মেমোরি এবং র‍্যান্ডম একসেস মেমোরি (র‍্যাম) প্রোগ্রাম মেমোরি অপরিবর্তনশীল, যার অর্থ এটিতে যা লেখা থাকে তা যখন ডিভাইসে পাওয়ার (ইলেক্ট্রিক সংযোগ) না থাকলেও, এটি ডিভাইসে স্টোর করা থাকে । আমাদের প্রোগ্রাম কোড মূলত এই মেমোরিতেই সংরক্ষিত থাকে । র‍্যাম ব্যবহার করে প্রোগ্রামগুলো চালানো হয় যা সেই সময়কালীন ভ্যারিয়েবল এবং প্রাপ্ত ডেটা স্টোর করে। র‍্যাম পরিবর্তনশীল, পাওয়ার (ইলেক্ট্রিক সংযোগ) বিচ্ছিন্ন হয়ে গেলে, এতে থাকা সব তথ্যও হারিয়ে যায় - বলতে গেলে পুরো প্রোগ্রামটাই প্রাথমিক অবস্থায় চলে আসে। > 🎓 প্রোগ্রাম মেমোরি আমাদের কোড গুলো সংরক্ষণ করে থাকে যা পাওয়ার (ইলেক্ট্রিক সংযোগ) না থাকলেও, ডিভাইসে থেকে যায়। > 🎓 র‍্যাম মূলত প্রোগ্রামকে রান করায় এবং পাওয়ার না থাকলে সবকিছু একদম শুরুর অবস্থায় চলে আসে। মাইক্রোকন্ট্রোলারের মেমোরি, পিসি বা ম্যাকের তুলনায় নিতান্তই ক্ষুদ্র । একটা সাধারণ পিসি তে ৮ গিগাবাইট (জিবি) অর্থাৎ ৮০০০০০০০০০০ বাইট র‍্যাম থাকে, যার প্রতি বাইটে একটি অক্ষর বা ০ থেকে ২৫৫ এর মধ্যে কোন সংখ্যা রাখা যায়। সেই তুলনায়, মাইক্রোকন্ট্রোলারে কিলোবাইট পর্যায়ের র‍্যাম থাকে, যা প্রায় ১০০০ বাইটের সমান। এখানে আমরা যে Wio terminal ব্যবহার করছি, তার র‍্যাম ১৯২ কিলোবাইট অর্থাৎ ১৯২০০০ বাইট - গড়পড়তা পিসির তুলনায় ৪০,০০০ গুণ কম। নীচের চিত্রটি 192KB এবং 8GB এর মধ্যে আপেক্ষিক আকারের পার্থক্য দেখায় - কেন্দ্রের ছোট ডটটি 192KB উপস্থাপন করে। ![A comparison between 192KB and 8GB - more than 40,000 times larger](../../../../images/ram-comparison.png) প্রোগ্রাম মেমোরিও পিসির তুলনায় কম। একটি সাধারণ পিসিতে প্রোগ্রাম স্টোরেজের জন্য 500 গিগাবাইটের হার্ড ড্রাইভ থাকতে পারে, অন্যদিকে মাইক্রোকন্ট্রোলারের কাছে কেবল কিলোবাইট পর্যায়ের বা কয়েক মেগাবাইট (এমবি) স্টোরেজ থাকতে পারে (1 এমবি হলো 1000KB বা 1,000,000 বাইট এর সমান)। উইও টার্মিনালে 4MB প্রোগ্রাম স্টোরেজ রয়েছে। ✅ ছোট্ট একটা গবেষণা করা যাক : এই লেখা পড়তে যে কম্পিউটারটি ব্যবহার করছি তার র‍্যাম এবং কত স্টোরেজ ব্যবহার করে ত জানার চেষ্টা করি। কোন মাইক্রোকন্ট্রোলারের সাথে এটিকে কীভাবে তুলনা করা যায়? ### ইনপুট/আউটপুট মাইক্রোকন্ট্রোলার সেন্সর থেকে ডেটা পড়তে এবং অ্যাকচুয়েটর দিয়ে নিয়ন্ত্রণ সংকেত প্রেরণের জন্য ইনপুট এবং আউটপুট সংযোগ প্রয়োজন। মাইক্রোকন্ট্রোলারে সাধারণত বেশ কয়েকটি জেনারেল-পারপাস ইনপুট / আউটপুট (জিপিআইও) পিন থাকে। এই পিনগুলিকে ইনপুট (সংকেত গ্রহণ) বা আউটপুট (সংকেত প্রেরণ) পিন হিসেবে কাজ করার জন্য সফ্টওয়্যারে কনফিগার করতে হবে । 🧠⬅️ ইনপুট পিন দিয়ে সেন্সর থেকে তথ্য নেয়া হয়। 🧠➡️ আউটপুট পিন দিয়ে অ্যাকচুয়েটরে সংকেত পাঠানো হয়। ✅ পরবর্তী পাঠে এসব নিয়ে আমরা আরো বিস্তারিত জানতে পারবো। #### কাজ Wio Terminal পর্যালোচনা করি। এই লেসনের জন্য আমরা Wio Terminal ব্যবহার করলে, এটার জিপিআইও পিনগুলো কী খুঁজে দেখতে পারি ? [Wio Terminal প্রোডাক্ট পেইজে](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) একটু নিচে গেলেই *Pinout diagram* নামে একটি অংশ পাওয়া যাবে যেখানে আমরা সহজেই পিনগুলো দেখতে পারি। Wio Terminal এ পিন নাম্বার দেয়ার জন্য, স্টিকার দেয়া হয়ে থাকে - এগুলো ব্যবহার না করে থাকলে, দেরি না করে এখনই করে ফেলা যাক। ### বাস্তবিক আকার মাইক্রোকন্ট্রোলার আকারে বেশ ছোট হয়, যেমন [Freescale Kinetis KL03 MCU ](https://www.edn.com/tiny-arm-cortex-m0-based-mcu-shrinks-package/) এর কথাই ধরা যাক - এতই ছোট যে গলফ বলের ডিম্পলের সমান। কোন পিসিতে থাকা সিপিইউ 40 মিমি x 40 মিমি আকারের এবং এটি (অতিরিক্ত গরম হয়ে কয়েক সেকেন্ডের বন্ধ হয়ে যাওয়া ঠেকাতে প্রয়োজনীয়) হিট-সিংক ও ফ্যান বাদ দিয়ে তারপরের হিসেব। বোঝাই যাচ্ছে, মাইক্রোকন্ট্রোলারের চেয়ে সিপিইউ কত বড়! মাইক্রোকন্ট্রোলার বাহ্যিক কেস, স্ক্রিন এবং বিভিন্ন সংযোগ এবং উপাদানগুলির সাথে থাকা Wio Terminal Developer kits একটি Intel i9 এর শুধুমাত্র সিপিইউয়ের চেয়ে তেমন একটা বড় নাহ - এবং হিট সিঙ্ক এবং ফ্যান সহ হিসেব করলে সিপিইউর চেয়ে অনেক ছোট ! | যন্ত্র | আকার | | ------------------------------- | --------------------- | | Freescale Kinetis KL03 | 1.6mm x 2mm x 1mm | | Wio terminal | 72mm x 57mm x 12mm | | Intel i9 CPU, Heat sink and fan | 136mm x 145mm x 103mm | ### ফ্রেমওয়ার্ক এবং অপারেটিং সিস্টেম গতি এবং মেমরির আকারের কারণে, মাইক্রোকন্ট্রোলার ডেস্কটপ অর্থে কোন অপারেটিং সিস্টেম (ওএস) চালায় না। আমাদের কম্পিউটার (উইন্ডোজ, লিনাক্স বা ম্যাক-ওএস) চালিত অপারেটিং সিস্টেমের কাজগুলি চালনার জন্য প্রচুর মেমরি এবং প্রসেসিং পাওয়ার প্রয়োজন - মাইক্রোকন্ট্রোলারের জন্য যা সম্পূর্ণ অপ্রয়োজনীয় । মনে রাখতে হবে যে, মাইক্রোকন্ট্রোলার সাধারণত এক বা একাধিক নির্দিষ্ট কাজ সম্পাদনের জন্য প্রোগ্রাম করা হয়; যা পিসি বা ম্যাকের মতো জেনারেল পারপাস যন্ত্র নাহ। পিসি বা ম্যাক এ এমন ইন্টারফেস রাখতে হয় যা সঙ্গীত বা সিনেমা চালাতে পারে, ডকুমেন্টেশন বা কোড লেখার সরঞ্জাম সরবরাহ করতে পারে, গেম খেলতে পারে বা ইন্টারনেট ব্রাউজ করতে পারে - যা কিনা মাইক্রোকন্ট্রোলারের কাজের ধরণের তুলনায় অনেক আলাদা। কোন ওএস ছাড়াই একটি মাইক্রোকন্ট্রোলার প্রোগ্রাম করার জন্য আমাদেরকে কোন ধরণের কোডিং করতে হবে যাতে মাইক্রোকন্ট্রোলার চলতে পারে বা API ব্যবহার করে যে কোনও পার্শ্ববর্তী কিছুর সাথে সংযোগ রাখতে পারে। প্রতিটি মাইক্রোকন্ট্রোলার আলাদা হয়, তাই নির্মাতারা সাধারণত স্ট্যান্ডার্ড ফ্রেমওয়ার্কগুলিকে সমর্থন করে যা আপনাকে আমাদের কোড তৈরির জন্য একটি স্ট্যান্ডার্ড 'রেসিপি' অনুসরণ করার সুযোগ করে এবং সেই ফ্রেমওয়ার্কটিকে সাপোর্ট করে এমন কোনও মাইক্রোকন্ট্রোলারে প্রোগ্রাম রান করে। আমরা কোন একটি ওএস ব্যবহার করে মাইক্রোকন্ট্রোলারগুলিকে প্রোগ্রাম করতে পারি - প্রায়শই এগুলোকে রিয়েল-টাইম অপারেটিং সিস্টেম (আরটিওএস) হিসাবে উল্লেখ করা হয়, কারণ এগুলি রিয়েল টাইমে পেরিফেরিয়ালগুলিতে এবং পাঠানো ডেটা হ্যান্ডেল করার জন্য তৈরি করা হয়। এই অপারেটিং সিস্টেমগুলি খুব লাইটওয়েট এবং এদের বৈশিষ্ট্যগুলি হলো- * মাল্টি থ্রেডিং, আপনার কোডগুলি একই সাথে একাধিক কোর বা একটি কোর পর্যায়ক্রমে ব্যবহার করে একাধিক ব্লক কোড চালানোর অনুমতি দেয়। * নেটওয়ার্কিং - নিরাপদে ইন্টারনেটের মাধ্যমে যোগাযোগের অনুমতি দেওয়ার জন্য * স্ক্রিন রয়েছে এমন ডিভাইসে ব্যবহারকারীর ইন্টারফেস (ইউআই) তৈরির জন্য গ্রাফিকাল ইউজার ইন্টারফেস (জিইউআই) এর উপস্থিতি। ✅ বিভিন্ন RTOS এর ব্যপারে জানতে এসব পড়তে পারি : [Azure RTOS](https://azure.microsoft.com/services/rtos/?WT.mc_id=academic-17441-jabenn), [FreeRTOS](https://www.freertos.org), [Zephyr](https://www.zephyrproject.org) #### আরডুইনো ![The Arduino logo](../../../../images/arduino-logo.svg) [আরডুইনো](https://www.arduino.cc) খুব সম্ভবত সবচেয়ে জনপ্রিয় মাইক্রোকন্ট্রোলার ফ্রেমওয়ার্ক, বিশেষতঃ শিক্ষার্থী, শখের বশে আইওটিতে কাজ করতে আগ্রহীদের মাঝে। আরডুইনো একটি ওপেন সোর্স ইলেক্ট্রনিক্স প্ল্যাটফর্ম যা সফ্টওয়্যার এবং হার্ডওয়্যার সমন্বিত। আরডুইনো থেকে বা অন্য নির্মাতাদের কাছ থেকে আমরা আরডুইন সম্বলিত বোর্ড কিনে সেই ফ্রেমওয়ার্ক ব্যবহার করে কোড করতে পারবো। আরডুইনো বোর্ডগুলি সি বা সি ++ এ কোড করা হয়। এই ভাষায় আমরা কোডগুলো খুব ছোট করে সংকলন করতে পারি এবং দ্রুত রান করতে পারি, যা একটি সীমাবদ্ধ ডিভাইসে যেমন মাইক্রোকন্ট্রোলারের জন্য বেশ গুরুত্বপূর্ণ। আরডুইনো অ্যাপ্লিকেশনটির মূল বিষয়কে স্কেচ হিসাবে উল্লেখ করা হয় এবং তা সি/সি++ এ কোড করা হয় মূলত ২টি ফাংশনে - `setup` এবং `loop`। বোর্ড চালু হয়ে গেলে, আরডুইনো ফ্রেমওয়ার্ক কোডটি একবার `setup` ফাংশনটি পরিচালনা করবে, তারপরে এটি `loop` ফাংশনটি বারবার রান করবে, পাওয়ার বন্ধ না হওয়া অবধি এটি অবিচ্ছিন্নভাবে চালিত হবে। আমরা সেটআপ কোডটি `setup` ফাংশনে লিখবো, যেমন ওয়াইফাই এবং ক্লাউড সার্ভিসের সাথে সংযুক্ত হওয়া বা ইনপুট এবং আউটপুট জন্য পিন চালু হওয়া। আমাদের লুপ কোডটিতে তখন প্রসেসিং কোড থাকবে যেমন সেন্সর থেকে ডেটা নেয়া এবং ক্লাউডে তা পাঠানো । প্রতিটি লুপে সাধারণত একটি বিলম্ব (delay) অন্তর্ভুক্ত করতে হবে, উদাহরণস্বরূপ যদি আমরা কেবল 10 সেকেন্ড পরপর সেন্সর ডেটা প্রেরণ করতে চাই, তবে লুপের শেষে 10 সেকেন্ডের বিলম্ব যুক্ত করতে হবে, যাতে মাইক্রোকন্ট্রোলার তখন বিশ্রামে থাকে, শক্তি সঞ্চয় করে এবং তারপরে আবার 10 সেকেন্ড পরে যখন ডেটা প্রয়োজন হবে, তখন ল্যুপ চলবে। ![An arduino sketch running setup first, then running loop repeatedly](../../../../images/arduino-sketch.png) ✅ এই প্রোগ্রাম আর্কিটেকচারকে বলা হয় *event loop* অথবা *message loop*. অনেক অ্যাপ্লিকেশন এটি ব্যবহার করে এবং উইন্ডোজ, ম্যাক-ওএস বা লিনাক্সের মতো ওএসে চালিত বেশিরভাগ ডেস্কটপ অ্যাপ্লিকেশনগুলির জন্য এটি স্ট্যান্ডার্ড। `loop` এখানে বাটনের মতো ব্যবহারকারী বা ইন্টারফেস উপাদান বা কীবোর্ডের মতো ডিভাইসগুলির নির্দেশনা গ্রহণ করে এবং সেই অনুযায়ে সাড়া দেয়। আরো বিস্তারিত জানতে [ইভেন্ট ল্যুপ](https://wikipedia.org/wiki/Event_loop) সংক্রান্ত লেখাটি পড়তে পারি। আরডুইনো মাইক্রোকন্ট্রোলার এবং আই/ও পিনের সাথে সংযোগের জন্য স্ট্যান্ডার্ড লাইব্রেরি সরবরাহ করে, বিভিন্ন মাইক্রোকন্ট্রোলারগুলিতে চালনার যা সহায়তা করে। উদাহরণস্বরূপ, [`delay` function](https://www.arduino.cc/reference/en/language/functions/time/delay/) কোন প্রোগ্রামকে নির্দিষ্ট সময়ের জন্য বন্ধ রাখবে, [`digitalRead` function](https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/) বোর্ডের পিনগুলি থেকে `HIGH` অথবা `LOW` ডেটা সংগ্রহ করে, তা যে বোর্ডেই কোড রান করা হোক না কেন। এই স্ট্যান্ডার্ড লাইব্রেরিগুলির অর্থ একটি বোর্ডের জন্য লিখিত আরডুইনো কোড অন্য যে কোন আরডুইনো বোর্ডের জন্য পুনরায় ব্যবহার করা যেতে পারে এবং চলবে (পিনগুলি একই ধরে নিয়ে এবং বোর্ডগুলি একই বৈশিষ্ট্যগুলিকে সমর্থন কর - এমন হলে) থার্ড-পার্টি আরডুইনো লাইব্রেরির একটি বড় সংগ্রহ রয়েছে যা আরডুইনো প্রকল্পগুলিতে অতিরিক্ত বৈশিষ্ট্য যুক্ত করার অনুমতি দেয় যেমন সেন্সর এবং অ্যাকচুয়েটর ব্যবহার করে বা ক্লাউড আইওটি সার্ভিসগুলিতে সংযুক্ত করা। #### কাজ Wio Terminal পর্যালোচনা করি। এই লেসনের জন্য আমরা Wio Terminal ব্যবহার করলে, গত লেসনের কোডগুলো আবার একটু দেখি। [Wio Terminal প্রোডাক্ট পেইজে](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) একটু নিচে গেলেই *Pinout diagram* নামে একটি অংশ পাওয়া যাবে যেখানে আমরা সহজেই পিনগুলো দেখতে পারি। Wio Terminal এ পিন নাম্বার দেয়ার জন্য, স্টিকার দেয়া হয়ে থাকে - এগুলো ব্যবহার না করে থাকলে, দেরি না করে এখনই করে ফেলা যাক। ## সিংগেল-বোর্ড কম্পিউটারের আরো গভীরে শেষ লেসনে আমরা সিংগেল-বোর্ড কম্পিউটার এর সাথে পরিচিত হয়েছিলাম। এখন তাদের আরও গভীরভাবে জানবো। ### রাস্পবেরি পাই ![The Raspberry Pi logo](../../../../images/raspberry-pi-logo.png) [Raspberry Pi Foundation](https://www.raspberrypi.org) হলো মূলত স্কুল পর্যায়ে কম্পিউটার বিজ্ঞানের অধ্যয়নের প্রচারের জন্য ২০০৯ সালে প্রতিষ্ঠিত যুক্তরাজ্যের একটি দাতব্য সংস্থা। এই মিশনের অংশ হিসাবে তারা সিংগেল-বোর্ড কম্পিউটার তৈরী করে, যার নাম রাস্পবেরি পাই। এটি বর্তমানে ৩টি ভেরিয়েন্টে পাওয়া যা - একটি পূর্ণ আকারের সংস্করণ, ছোট পাই জিরো এবং একটি চূড়ান্ত মডিউল যা দিয়ে আমাদের আইওটি ডিভাইসে তৈরি করা যেতে পারে। ![A Raspberry Pi 4](../../../../images/raspberry-pi-4.jpg) পূর্ণ আকারের রাস্পবেরি পাইয়ের সর্বশেষ ভার্সন হল Raspberry Pi 4B । এটিতে একটি কোয়াড-কোর (4 কোর) সিপিইউ রয়েছে যা 1.5GHz এবং 2, 4, বা 8 জিবি র‍্যাম, গিগাবিট ইথারনেট, ওয়াইফাই, 2টি এইচডিএমআই পোর্ট 4K স্ক্রিন সমর্থন করে, একটি অডিও এবং মিশ্রিত ভিডিও আউটপুট পোর্ট, ইউএসবি পোর্টস (USB 2.0, 2 USB 3.0 ভার্সন), 40টি জিপিআইও পিন, রাস্পবেরি পাই ক্যামেরা মডিউলটির জন্য একটি ক্যামেরা সংযোজক এবং একটি এসডি কার্ড স্লট। এই সমস্ত বোর্ড যা রয়েছে সব মিলিয়ে 88mm x 58mm x 19.5mm সাইজ এবং এটি একটি 3A USB-C পাওয়ার সাপ্লাই দ্বারা চালিত। রাস্পবেরি পাইয়ের দাম 35 মার্কিন ডলার থেকে শুরু হয়, যা পিসি বা ম্যাক এর তুলনায় অনেক কম। > 💁 Pi400 নামে একটি "একের-ভিতর-সব" কম্পিউটার রয়েছে, যার কীবোর্ডে Pi4 বিল্ট-ইন রয়েছে। ![A Raspberry Pi Zero](../../../../images/raspberry-pi-zero.jpg) পাই জিরো এর আকার অনেক ছোট , যার পাওয়ার অনেক কম। এটিতে একটি একক কোর 1GHz সিপিইউ, 512 এমবি র‍্যাম, ওয়াইফাই (Zero W model এ ), একটি এইচডিএমআই পোর্ট, একটি মাইক্রো-ইউএসবি পোর্ট, 40টি জিপিআইও পিন, রাস্পবেরি পাই ক্যামেরা মডিউলটির সাথে একটি ক্যামেরা সংযোগকারী এবং একটি এসডি কার্ড স্লট রয়েছে।পাই এর আকার 65 মিমি x 30 মিমি x 5 মিমি এবং খুব অল্প পাওয়ার নিয়েই কাজ করতে পারে। পাই জিরো এর মূল্য 5 মার্কিন ডলার, আর ওয়াইফাই সহ , W ভার্সনটির দাম 10 মার্কিন ডলার। > 🎓 এখানের সিপিইউ গুলো ARM processor এর, যা আমাদের পিসি বা ম্যাক এর রেগুলার Intel/AMD x86 বা x64 প্রসেসরের মতো নয়। তবে মাইক্রোকন্ট্রোলারের পাশাপাশি প্রায় সমস্ত মোবাইল ফোন, মাইক্রোসফ্ট সারফেস এক্স এবং নতুন অ্যাপল সিলিকন ভিত্তিক অ্যাপল ম্যাক এর সিপিইউগুলির সাথে এদের মিল রয়েছে। রাস্পবেরি পাই এর সমস্ত ভ্যারিয়েন্ট রাস্পবেরি পাই ওএস নামে ডিবিয়ান লিনাক্সের একটি ভার্সন রান করে। এটি কোনও ডেস্কটপ ছাড়াই একটি ছোট ভার্সন হিসেবে পাওয়া যায় যা 'হেডলেস' প্রজেক্টগুলোর জন্য উপযুক্ত যেখানে ওয়েব ব্রাউজার, অফিস অ্যাপ্লিকেশন, কোডিং সরঞ্জাম এবং গেম চালানোর জন্য একটি স্ক্রিন বা একটি পূর্ণ ডেস্কটপ পরিবেশের কোন প্রয়োজনই নেই। এই ওএস হল ডেবিয়ান লিনাক্সের একটি সংস্করণ, যেটিতে আমরা ডেবিয়ানে চালিত কোন অ্যাপ্লিকেশন বা ট্যুল ইনস্টল করতে পারবো এবং এটি ARM প্রসেসরের জন্যই তৈরি। #### কাজ রাস্পবেরি পাই পর্যালোচনা যদি এই লেসনটির জন্য আমরা রাস্পবেরি পাই ব্যবহার করি, তাহলে বোর্ডের বিভিন্ন হার্ডওয়্যার উপাদানগুলি সম্পর্কে ভালোভাবে জানতে হবে। * প্রসেসর সম্পর্কিত ডিটেইলস [Raspberry Pi hardware documentation page](https://www.raspberrypi.org/documentation/hardware/raspberrypi/) এ পাওয়া যাবে। আমাদের ব্যবহার করা পাই এর প্রসেসর সম্পর্কে ঐ পেইজটি থেকে জানতে পারবো। * GPIO পিনগুলো খুঁজে বের করি। [Raspberry Pi GPIO documentation](https://www.raspberrypi.org/documentation/hardware/raspberrypi/gpio/README.md)থেকে এদের ব্যাপারে আরো বিস্তারিত জানতে পারবো। [GPIO Pin Usage guide](https://www.raspberrypi.org/documentation/usage/gpio/README.md) টি পড়লে পাই এর বিভিন্ন পিন সম্পর্কে আমরা বিস্তারিত জানবো। ### সিংগেল-বোর্ড কম্পিউটারে প্রোগ্রামিং সিংগেল-বোর্ড কম্পিউটারগুলিকে সম্পূর্ণ কম্পিউটার বলা যা্য, যা একটি সম্পূর্ণ ওএস এ রান করে। এর অর্থ হল যে অনেকগুলো প্রোগ্রামিং ভাষা, ফ্রেমওয়ার্ক এবং ট্যুল ব্যবহার করে কোডিং করা যাবে যা কিনা মাইক্রোকন্ট্রোলার যেমনঃ আরডুইনো তে সচরাচর করা যায়না কারণ বোর্ড থেকে সাপোর্টেড রয়েছে কিনা - এরকম বিষয়গুলি এখানে প্রভাব রাখে। বেশিরভাগ প্রোগ্রামিং ভাষার লাইব্রেরি রয়েছে যা সেন্সর এবং অ্যাকচুয়েটর থেকে যথাক্রমে ডেটা গ্রহণ এবং প্রেরণ করতে GPIO পিনগুলিতে ব্যবহার করতে পারে। ✅ আমরা কোন কোন প্রোগ্রামিং ভাষার সাথে পরিচিত? তারা কি লিনাক্স এ সাপোর্টেড ? রাস্পবেরি পাইতে আইওটি অ্যাপ্লিকেশন তৈরির সর্বাধিক সাধারণ প্রোগ্রামিং ল্যাঙ্গুয়েজ হল পাইথন। পাইয়ের জন্য বানানো একটি হার্ডওয়ারের এক বিশাল ইকোসিস্টেম রয়েছে এবং এগুলির প্রায় সবগুলিতেই পাইথন লাইব্রেরি হিসাবে তাদের ব্যবহার করার জন্য প্রয়োজনীয় প্রাসঙ্গিক কোড অন্তর্ভুক্ত রয়েছে। এর মধ্যে কিছু ইকোসিস্টেম হল 'হ্যাট' এর উপর ভিত্তি করে - টুপির মতো একটি লেয়ার যা পাইয়ের উপরে বসে 40টি জিপিআইও পিনের একটি বড় সকেটের সাথে সংযুক্ত থাকে। এই টুপিগুলি অতিরিক্ত কিছু সুবিধা দেয় যেমনঃ স্ক্রিন, সেন্সর, রিমোট কন্ট্রোল কার অথবা অ্যাডাপ্টারগুলিকে সেন্সর যুক্ত করা যায় স্ট্যান্ডার্ড ক্যাবল ব্যবহার করেই। ### প্রফেশনাল পর্যায়ে আইওটি তৈরীর ক্ষেত্রে সিংগেল-বোর্ড কম্পিউটারের ব্যবহার সিংগেল-বোর্ড কম্পিউটারগুলি কেবলমাত্র ডেভলাপার কিট হিসাবে নয়,বরং প্রফেশনাল পর্যায়ে আইওটি তৈরীর ক্ষেত্রেও ব্যবহৃত হয়। তারা হার্ডওয়্যার নিয়ন্ত্রণ এবং মেশিন লার্নিং মডেলগুলি চালানোর মতো জটিল কাজগুলি চালনার শক্তিশালী উপায় সরবরাহ করতে পারে। উদাহরণস্বরূপ, একটি [রাস্পবেরি পাই-4 কম্পিউট মডিউল](https://www.raspberrypi.org/blog/raspberry-pi-compute-module-4/) রয়েছে যা রাস্পবেরি পাই-4 এর সমস্ত পাওয়ার সরবরাহ করে, তবে তা বেশ কমপ্যাক্ট এবং কম মানের ফর্ম ফ্যাক্টরে যা কাস্টম হার্ডওয়্যারে ইনস্টল করার জন্য নকশাকৃত যাতে বেশিরভাগ পোর্ট নেই। --- ## 🚀 চ্যালেঞ্জ গত লেসনের চ্যালেঞ্জটি ছিল বাড়ি, স্কুল বা কর্মক্ষেত্রে যতগুলি আইওটি ডিভাইস রয়েছে তার তালিকা করা। এই তালিকার প্রতিটি ডিভাইসের জন্য কী মাইক্রোকন্ট্রোলার বা সিংগেল-বোর্ড কম্পিউটার ব্যবহৃত হয় ? নাকি উভয়ের মিশ্রণের ফলেই এরা নির্মিত? ## লেকচার পরবর্তী কুইজ [লেকচার পরবর্তী কুইজ](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/4) ## রিভিউ এবং স্ব-অধ্যয়ন * [Arduino getting started guide](https://www.arduino.cc/en/Guide/Introduction) টি পড়ে আরডুইনো প্লাটফর্ম সম্পর্কে আরো জানতে হবে। * [introduction to the Raspberry Pi 4](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/) পড়ে রাস্পবেরি পাই সম্পর্কে আরো জানতে হবে। * বিভিন্ন কনসেপ্ট এবং সংক্ষিপ্ত শব্দ এর ব্যাপারে জানতে [What the FAQ are CPUs, MPUs, MCUs, and GPUs article in the Electrical Engineering Journal](https://www.eejournal.com/article/what-the-faq-are-cpus-mpus-mcus-and-gpus/) আর্টিকেল টি উপকারী হবে। ✅ কোন হার্ডওয়্যার প্ল্যাটফর্মটি ব্যবহার করলে ভালো হবে বা শুধুমাত্র ভার্চুয়াল ডিভাইস ব্যবহার করবো কিনা তবে সিদ্ধান্ত নেওয়ার জন্য [হার্ডওয়্যার গাইডের](../../../../translations/hardware.bn.md) লিংকগুলোতে প্রদত্ত খরচ এর তুলনা করতে হবে। ## এসাইনমেন্ট [মাইক্রোকন্ট্রোলার এবং সিংগেল-বোর্ড কম্পিউটারের তুলনা করে পার্থক্য দাঁড় করানো](assignment.bn.md)।