পাইথনের সাথে এমবেডেড সিস্টেমের বিশ্ব অন্বেষণ করুন। এই বিস্তৃত গাইডটিতে মাইক্রোপাইথন, সার্কিটপাইথন, হার্ডওয়্যার ইন্টিগ্রেশন এবং বাস্তব-বিশ্বের প্রকল্পগুলি একটি বিশ্বব্যাপী দর্শকদের জন্য অন্তর্ভুক্ত রয়েছে।
মেটালে পাইথন: এমবেডেড প্রোগ্রামিং এবং মাইক্রোকন্ট্রোলার ইন্টিগ্রেশনে গভীরভাবে ডুব
কয়েক দশক ধরে, এমবেডেড সিস্টেমের বিশ্ব—স্মার্টওয়াচ থেকে শুরু করে শিল্প যন্ত্রপাতি পর্যন্ত সবকিছু চালিত করে এমন ছোট কম্পিউটার—C, C++, এবং অ্যাসেম্বলির মতো নিম্ন-স্তরের ভাষার একচেটিয়া ডোমেইন ছিল। এই ভাষাগুলি অতুলনীয় নিয়ন্ত্রণ এবং কর্মক্ষমতা সরবরাহ করে, তবে এগুলি একটি কঠিন শেখার বক্ররেখা এবং দীর্ঘ বিকাশের চক্রের সাথে আসে। পাইথন প্রবেশ করুন, ভাষাটি তার সরলতা, পঠনযোগ্যতা এবং বিশাল বাস্তুতন্ত্রের জন্য বিখ্যাত। একবার ওয়েব সার্ভার এবং ডেটা বিজ্ঞানের মধ্যে সীমাবদ্ধ থাকলে, পাইথন এখন হার্ডওয়্যারের হৃদয়ে একটি শক্তিশালী ধাক্কা দিচ্ছে, বিশ্বব্যাপী নতুন প্রজন্মের ডেভেলপার, শখের এবং উদ্ভাবকদের জন্য ইলেকট্রনিক্সকে গণতান্ত্রিক করছে।
এই গাইডটি পাইথন এমবেডেড প্রোগ্রামিংয়ের উত্তেজনাপূর্ণ বিশ্বে আপনার বিস্তৃত পরিচিতি। আমরা অন্বেষণ করব কীভাবে পাইথনের মতো একটি উচ্চ-স্তরের ভাষা সরাসরি হার্ডওয়্যার নিয়ন্ত্রণ করতে পারে, এই সম্ভব করে তোলে এমন মূল প্ল্যাটফর্মগুলি তদন্ত করতে পারে এবং সফ্টওয়্যার থেকে সিলিকনে আপনার যাত্রা শুরু করার জন্য ব্যবহারিক উদাহরণগুলির মাধ্যমে হেঁটে যেতে পারে।
পাইথন এম্বেডেড ইকোসিস্টেম: শুধু CPython এর চেয়েও বেশি
আপনি আপনার ল্যাপটপে ব্যবহার করেন এমন স্ট্যান্ডার্ড পাইথন (CPython নামে পরিচিত) একটি সাধারণ মাইক্রোকন্ট্রোলারে ইনস্টল করতে পারবেন না। এই ডিভাইসগুলির অত্যন্ত সীমিত সংস্থান রয়েছে—আমরা কিলোবাইট RAM এবং মেগাহার্টজ প্রক্রিয়াকরণ শক্তি সম্পর্কে কথা বলছি, একটি আধুনিক কম্পিউটারের গিগাবাইট এবং গিগাহার্টজের একটি সম্পূর্ণ বিপরীত। এই ব্যবধান পূরণ করতে, পাইথনের বিশেষায়িত, চর্বিহীন বাস্তবায়ন তৈরি করা হয়েছিল।
মাইক্রোপাইথন: মাইক্রোকন্ট্রোলারের জন্য পাইথন
মাইক্রোপাইথন হল পাইথন 3 প্রোগ্রামিং ভাষার একটি সম্পূর্ণ পুনর্লিখন, যা সীমাবদ্ধ হার্ডওয়্যারে চালানোর জন্য অপ্টিমাইজ করা হয়েছে। ড্যামিয়েন জর্জ দ্বারা তৈরি, এটি হার্ডওয়্যারের সরাসরি, নিম্ন-স্তরের অ্যাক্সেস প্রদানের সময় স্ট্যান্ডার্ড পাইথনের সাথে যতটা সম্ভব সামঞ্জস্যপূর্ণ হওয়ার লক্ষ্য রাখে।
- মূল বৈশিষ্ট্য: এটির মধ্যে একটি ইন্টারেক্টিভ রিড-ইভাল-প্রিন্ট লুপ (REPL) অন্তর্ভুক্ত রয়েছে, যা আপনাকে একটি বোর্ডের সাথে সংযোগ স্থাপন করতে এবং একটি সংকলন পদক্ষেপ ছাড়াই লাইন-বাই-লাইন কোড কার্যকর করার অনুমতি দেয়। এটি অত্যন্ত দক্ষ, এটির একটি ছোট মেমরি পদচিহ্ন রয়েছে এবং সরাসরি হার্ডওয়্যার নিয়ন্ত্রণের জন্য (GPIO, I2C, SPI, ইত্যাদি)
machineএর মতো শক্তিশালী মডিউল সরবরাহ করে। - সেরা: ডেভেলপাররা যারা সর্বাধিক কর্মক্ষমতা, হার্ডওয়্যারের উপর সূক্ষ্ম-দানাযুক্ত নিয়ন্ত্রণ এবং মাইক্রোকন্ট্রোলারের বিস্তৃত পরিসরে সামঞ্জস্য চান তাদের জন্য। এটি "ধাতু" এর কাছাকাছি এবং প্রায়শই আরও কর্মক্ষমতা-সমালোচনামূলক অ্যাপ্লিকেশনগুলির জন্য পছন্দের।
সার্কিটপাইথন: শিক্ষানবিস-বান্ধব পাওয়ারহাউস
সার্কিটপাইথন হল মাইক্রোপাইথনের একটি কাঁটাচামচ যা ডু-ইট-ইয়োরসেল্ফ (DIY) ইলেকট্রনিক্স স্পেসে একটি শীর্ষস্থানীয় সংস্থা Adafruit দ্বারা তৈরি এবং রক্ষণাবেক্ষণ করা হয়। যদিও এটি মাইক্রোপাইথনের সাথে একটি কোর শেয়ার করে, তবে এর দর্শন ব্যবহারের সহজতা এবং শিক্ষার উপর কেন্দ্র করে।
- মূল বৈশিষ্ট্য: সবচেয়ে বিশিষ্ট বৈশিষ্ট্য হল এটি আপনার কম্পিউটারে মাইক্রোকন্ট্রোলারকে কীভাবে উপস্থাপন করে। আপনি যখন একটি সার্কিটপাইথন বোর্ড প্লাগ ইন করেন, তখন এটি একটি ছোট USB ড্রাইভ হিসাবে প্রদর্শিত হয়। আপনি কেবল এই ড্রাইভে আপনার
code.pyফাইলটি সম্পাদনা করুন এবং এটি সংরক্ষণ করুন; বোর্ডটি পুনরায় লোড হয় এবং স্বয়ংক্রিয়ভাবে আপনার নতুন কোড চালায়। এটি সমস্ত সমর্থিত বোর্ড জুড়ে একটি সমন্বিত API ও বৈশিষ্ট্যযুক্ত, যার অর্থ একটি বোর্ডে একটি সেন্সর পড়ার কোড ন্যূনতম পরিবর্তন সহ অন্যটিতে কাজ করবে। - সেরা: শিক্ষানবিস, শিক্ষাবিদ এবং দ্রুত প্রোটোটাইপিংয়ের উপর দৃষ্টি নিবদ্ধ করা যে কারও জন্য। শেখার বক্ররেখাটি মৃদু, এবং Adafruit দ্বারা প্রদত্ত বিস্তৃত লাইব্রেরি ইকোসিস্টেম সেন্সর, ডিসপ্লে এবং অন্যান্য উপাদানগুলিকে অবিশ্বাস্যভাবে সহজ করে তোলে।
মাইক্রোপাইথন বনাম সার্কিটপাইথন: একটি দ্রুত তুলনা
তাদের মধ্যে নির্বাচন করা প্রায়শই আপনার প্রকল্পের লক্ষ্য এবং অভিজ্ঞতার স্তরের উপর নির্ভর করে।
- দর্শন: মাইক্রোপাইথন হার্ডওয়্যার-নির্দিষ্ট বৈশিষ্ট্য এবং কর্মক্ষমতাকে অগ্রাধিকার দেয়। সার্কিটপাইথন সরলতা, ধারাবাহিকতা এবং শেখার সহজতাকে অগ্রাধিকার দেয়।
- কর্মপ্রবাহ: মাইক্রোপাইথনের সাথে, আপনি সাধারণত ডিভাইসের REPL এর সাথে সংযোগ করতে এবং ফাইল আপলোড করতে থোনির মতো একটি সরঞ্জাম ব্যবহার করেন। সার্কিটপাইথনের সাথে, আপনি USB ড্রাইভে একটি
code.pyফাইল টেনে আনুন এবং ফেলে দিন। - হার্ডওয়্যার সমর্থন: মাইক্রোপাইথন অনেক নির্মাতার থেকে বিস্তৃত বোর্ড সমর্থন করে। সার্কিটপাইথন প্রাথমিকভাবে Adafruit এবং নির্বাচিত তৃতীয় পক্ষের অংশীদারদের বোর্ড সমর্থন করে, তবে এর সমর্থন গভীর এবং ভালভাবে নথিভুক্ত।
- লাইব্রেরি: সার্কিটপাইথনের লাইব্রেরির একটি বিশাল, কিউরেটেড সেট রয়েছে যা ইনস্টল করা সহজ। মাইক্রোপাইথন লাইব্রেরিগুলিও উপলব্ধ তবে আরও খণ্ডিত হতে পারে।
এই গাইডের জন্য, ধারণা এবং অনেক কোড উদাহরণ সামান্য পরিবর্তনের সাথে উভয়ের জন্যই প্রযোজ্য হবে। যেখানে তারা তাৎপর্যপূর্ণ সেখানে আমরা পার্থক্যগুলি নির্দেশ করব।
আপনার হার্ডওয়্যার নির্বাচন করা: মাইক্রোকন্ট্রোলার যুদ্ধক্ষেত্র
মাইক্রোকন্ট্রোলারগুলির (MCUs) সংখ্যা যা পাইথন চালাতে পারে তা সাম্প্রতিক বছরগুলিতে বিস্ফোরিত হয়েছে। এখানে একটি বিশ্বব্যাপী দর্শকদের জন্য সর্বাধিক জনপ্রিয় এবং অ্যাক্সেসযোগ্য কয়েকটি বিকল্প রয়েছে।
রাস্পবেরি পাই পিকো এবং আরপি2040
পূর্ণাঙ্গ রাস্পবেরি পাই কম্পিউটারের সাথে বিভ্রান্ত হবেন না, পিকো হল কাস্টম RP2040 চিপের চারপাশে নির্মিত একটি কম খরচের, উচ্চ-কার্যকারিতা সম্পন্ন মাইক্রোকন্ট্রোলার বোর্ড। এটি হার্ডওয়্যারে পাইথনের জন্য একটি বিশ্বব্যাপী প্রিয় হয়ে উঠেছে।
- মূল বৈশিষ্ট্য: একটি শক্তিশালী ডুয়াল-কোর এআরএম কর্টেক্স-এম0+ প্রসেসর, 264KB RAM এর একটি উদার পরিমাণ এবং প্রোগ্রামযোগ্য I/O (PIO) নামক একটি অনন্য বৈশিষ্ট্য যা কাস্টম হার্ডওয়্যার ইন্টারফেস তৈরির অনুমতি দেয়। নতুন পিকো ডব্লিউ মডেল অন-বোর্ড Wi-Fi যোগ করে।
- পাইথনের জন্য এটি কেন দুর্দান্ত: এটির মাইক্রোপাইথনের জন্য অফিসিয়াল, প্রথম-শ্রেণীর সমর্থন রয়েছে এবং এটি সার্কিটপাইথন দ্বারাও ভালভাবে সমর্থিত। এর কম মূল্য (প্রায়শই $10 USD এর নিচে) এবং শক্তিশালী কর্মক্ষমতা এটিকে একটি অবিশ্বাস্য মান করে তোলে।
এসপ্রেসিফ ইএসপি32 এবং ইএসপি8266
সাংহাই-ভিত্তিক সংস্থা এসপ্রেসিফ সিস্টেমস দ্বারা তৈরি, ইএসপি চিপের পরিবার IoT এর অপ্রতিদ্বন্দ্বী চ্যাম্পিয়ন। তারা তাদের সমন্বিত Wi-Fi এবং ব্লুটুথ ক্ষমতাগুলির জন্য পরিচিত, যা তাদের সংযুক্ত প্রকল্পগুলির জন্য ডিফল্ট পছন্দ করে তোলে।
- মূল বৈশিষ্ট্য: শক্তিশালী একক বা ডুয়াল-কোর প্রসেসর, অন্তর্নির্মিত Wi-Fi এবং (ESP32 তে) ব্লুটুথ। এগুলি সারা বিশ্বের নির্মাতাদের থেকে হাজার হাজার বিভিন্ন ডেভেলপমেন্ট বোর্ডে উপলব্ধ।
- পাইথনের জন্য এগুলি কেন দুর্দান্ত: চমৎকার মাইক্রোপাইথন সমর্থন আপনাকে মাত্র কয়েকটি লাইনের পাইথন কোড দিয়ে সংযুক্ত ডিভাইস তৈরি করতে দেয়। তাদের প্রক্রিয়াকরণ ক্ষমতা ওয়েব সার্ভার চালানো বা একাধিক সেন্সর থেকে ডেটা পরিচালনা করার মতো জটিল কাজের জন্য যথেষ্ট।
Adafruit পালক, ইটসিব্যাটসি এবং ট্রিঙ্কেট ইকোসিস্টেম
Adafruit স্ট্যান্ডার্ডাইজড ফর্ম ফ্যাক্টরগুলিতে বিস্তৃত বোর্ড সরবরাহ করে। এগুলি নির্দিষ্ট চিপ নয় বরং সার্কিটপাইথন ইকোসিস্টেমের মধ্যে নির্বিঘ্নে কাজ করার জন্য ডিজাইন করা পণ্য পরিবার।
- মূল বৈশিষ্ট্য: পালক পরিবারের বোর্ডগুলি একটি সাধারণ পিনআউট শেয়ার করে, যা তাদের পরিবর্তনযোগ্য করে তোলে। অনেকগুলিতে অন্তর্নির্মিত ব্যাটারি চার্জিং সার্কিট এবং সংযোগকারী অন্তর্ভুক্ত রয়েছে। এগুলি RP2040, ESP32 এবং অন্যান্য সহ বিভিন্ন মাইক্রোকন্ট্রোলারের সাথে উপলব্ধ।
- পাইথনের জন্য এগুলি কেন দুর্দান্ত: এগুলি গ্রাউন্ড আপ থেকে সার্কিটপাইথনের জন্য ডিজাইন করা হয়েছে। এই টাইট ইন্টিগ্রেশন মানে শত শত লাইব্রেরি এবং টিউটোরিয়ালগুলিতে অ্যাক্সেসের সাথে একটি মসৃণ, প্লাগ-এন্ড-প্লে অভিজ্ঞতা।
শুরু করা: হার্ডওয়্যারে আপনার প্রথম "হ্যালো, ওয়ার্ল্ড"
আসুন তত্ত্ব থেকে অনুশীলনে যাই। এম্বেডেড প্রোগ্রামিংয়ের ঐতিহ্যবাহী "হ্যালো, ওয়ার্ল্ড" হল একটি LED ব্লিঙ্ক করা। এই সাধারণ কাজটি নিশ্চিত করে যে আপনার পুরো টুলচেইন—আপনার কোড সম্পাদক থেকে বোর্ডের ফার্মওয়্যার পর্যন্ত—সঠিকভাবে কাজ করছে।
পূর্বশর্ত
- একটি সমর্থিত মাইক্রোকন্ট্রোলার বোর্ড (যেমন, রাস্পবেরি পাই পিকো, ইএসপি32 বা একটি Adafruit বোর্ড)।
- একটি USB কেবল যা ডেটা স্থানান্তর সমর্থন করে (শুধু চার্জিং নয়)।
- একটি কম্পিউটার (উইন্ডোজ, ম্যাকওএস বা লিনাক্স)।
ধাপ 1: ফার্মওয়্যার ইনস্টল করুন
আপনার বোর্ডে মাইক্রোপাইথন বা সার্কিটপাইথন ইন্টারপ্রেটার ইনস্টল করা দরকার। একে বলা হয় "ফার্মওয়্যার ফ্ল্যাশিং"।
- সার্কিটপাইথনের জন্য: circuitpython.org এ যান, আপনার বোর্ড খুঁজুন এবং
.uf2ফাইলটি ডাউনলোড করুন। আপনার বোর্ডটিকে বুটলোডার মোডে রাখুন (এটিতে সাধারণত একটি "BOOT" বা "RESET" বোতাম টিপে রাখা জড়িত যখন আপনি এটি প্লাগ ইন করেন)। এটি একটি USB ড্রাইভ হিসাবে প্রদর্শিত হবে। ডাউনলোড করা.uf2ফাইলটি এটির উপর টেনে আনুন। ড্রাইভটি বের হয়ে আবার প্রদর্শিত হবে, এখন CIRCUITPY নামকরণ করা হয়েছে। - মাইক্রোপাইথনের জন্য: micropython.org এ যান, আপনার বোর্ড খুঁজুন এবং ফার্মওয়্যার ফাইলটি ডাউনলোড করুন (প্রায়শই একটি
.uf2বা.binফাইল)। প্রক্রিয়াটি একই রকম: বোর্ডটিকে বুটলোডার মোডে রাখুন এবং ফাইলটি কপি করুন।
ধাপ 2: আপনার সম্পাদক সেট আপ করুন
আপনি যেকোনো টেক্সট এডিটর ব্যবহার করতে পারেন, তবে একটি ডেডিকেটেড IDE ডেভেলপমেন্টকে অনেক সহজ করে তোলে। Thonny IDE নতুনদের জন্য অত্যন্ত সুপারিশ করা হয়। এটি বিনামূল্যে, ক্রস-প্ল্যাটফর্ম এবং মাইক্রোপাইথন এবং সার্কিটপাইথনের জন্য অন্তর্নির্মিত সমর্থন সহ আসে। এটি স্বয়ংক্রিয়ভাবে আপনার বোর্ড সনাক্ত করে, ডিভাইসের REPL এ অ্যাক্সেস সরবরাহ করে এবং ফাইল আপলোড করা সহজ করে তোলে।
ধাপ 3: ব্লিঙ্কিং LED কোড
এখন কোডের জন্য। মাইক্রোপাইথনের জন্য main.py নামের একটি নতুন ফাইল তৈরি করুন অথবা সার্কিটপাইথনের জন্য বিদ্যমান code.py সম্পাদনা করুন।
একটি রাস্পবেরি পাই পিকো ডব্লিউতে মাইক্রোপাইথনের উদাহরণ:
import machine
import utime
# একটি পিকো ডব্লিউতে অনবোর্ড LED একটি বিশেষ নামের মাধ্যমে অ্যাক্সেস করা হয়
led = machine.Pin("LED", machine.Pin.OUT)
while True:
led.toggle()
print("LED toggled!")
utime.sleep(0.5) # অর্ধেক সেকেন্ডের জন্য অপেক্ষা করুন
বেশিরভাগ Adafruit বোর্ডে সার্কিটপাইথনের উদাহরণ:
import board
import digitalio
import time
# অনবোর্ড LED সাধারণত 'LED' নামের একটি পিনের সাথে সংযুক্ত থাকে
led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = not led.value
print("LED toggled!")
time.sleep(0.5)
কোড ব্রেকডাউন:
import: আমরা হার্ডওয়্যার (machine,digitalio,board) নিয়ন্ত্রণ করতে এবং সময় পরিচালনা করতে (utime,time) লাইব্রেরি আমদানি করি।- পিন সেটআপ: আমরা সংজ্ঞায়িত করি কোন ফিজিক্যাল পিন আমরা নিয়ন্ত্রণ করতে চাই (অনবোর্ড LED) এবং এটিকে একটি আউটপুট হিসাবে কনফিগার করি।
- লুপ:
while True:লুপটি চিরকাল চলে। লুপের ভিতরে, আমরা LED এর অবস্থা টগল করি (চালু থেকে বন্ধ, বা বন্ধ থেকে চালু), সিরিয়াল কনসোলে একটি বার্তা প্রিন্ট করি (থোনিতে দৃশ্যমান), এবং তারপরে অর্ধেক সেকেন্ডের জন্য বিরতি দিই।
এই ফাইলটি আপনার ডিভাইসে সেভ করুন। অনবোর্ড LED অবিলম্বে ব্লিঙ্ক করা শুরু করা উচিত। অভিনন্দন, আপনি এইমাত্র একটি মাইক্রোকন্ট্রোলারে সরাসরি পাইথন চালালেন!
গভীর ডুব: মাইক্রোকন্ট্রোলারে পাইথনের মূল ধারণা
একটি LED ব্লিঙ্ক করা কেবল শুরু। আসুন সেই মৌলিক ধারণাগুলি অন্বেষণ করি যা আপনি আরও জটিল প্রকল্প তৈরি করতে ব্যবহার করবেন।
সাধারণ উদ্দেশ্য ইনপুট/আউটপুট (GPIO)
GPIO পিনগুলি হল ফিজিক্যাল সংযোগ যা আপনার মাইক্রোকন্ট্রোলারকে বিশ্বের সাথে ইন্টারঅ্যাক্ট করতে দেয়। এগুলি হয় ইনপুট (বোতাম বা সেন্সর থেকে ডেটা পড়তে) বা আউটপুট (LED, মোটর বা রিলে নিয়ন্ত্রণ করতে) হিসাবে কনফিগার করা যেতে পারে।
একটি বোতাম টিপুন (মাইক্রোপাইথন) পড়া:
import machine
import utime
button = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)
while True:
if button.value() == 1:
print("Button is pressed!")
utime.sleep(0.1)
এখানে, আমরা পিন 14 কে একটি অভ্যন্তরীণ পুল-ডাউন রেজিস্টর সহ একটি ইনপুট হিসাবে কনফিগার করি। লুপ ক্রমাগত পরীক্ষা করে দেখে যে বোতামের মান 1 (উচ্চ) কিনা, যা নির্দেশ করে যে এটি চাপানো হয়েছে।
সেন্সর নিয়ে কাজ করা
বেশিরভাগ আকর্ষণীয় প্রকল্পে সেন্সর জড়িত। পাইথন উভয় অ্যানালগ এবং ডিজিটাল সেন্সর থেকে পড়া সহজ করে তোলে।
- অ্যানালগ সেন্সর: এই সেন্সরগুলি, যেমন ফটোরেজিস্টর (আলো পরিমাপ করা) বা পোটেনশিওমিটার, একটি পরিবর্তনশীল ভোল্টেজ সরবরাহ করে। মাইক্রোকন্ট্রোলারের অ্যানালগ-টু-ডিজিটাল কনভার্টার (ADC) এই ভোল্টেজটি পড়ে এবং এটিকে একটি সংখ্যায় রূপান্তর করে।
- ডিজিটাল সেন্সর: এই আরও উন্নত সেন্সরগুলি (যেমন তাপমাত্রা/আর্দ্রতা সেন্সর, অ্যাক্সিলোমিটার) নির্দিষ্ট প্রোটোকল ব্যবহার করে যোগাযোগ করে। দুটি সবচেয়ে সাধারণ হল I2C (আন্তঃ-সংহত সার্কিট) এবং SPI (সিরিয়াল পেরিফেরাল ইন্টারফেস)। এই প্রোটোকলগুলি কয়েকটি পিন ব্যবহার করে একাধিক ডিভাইসকে মাইক্রোকন্ট্রোলারের সাথে যোগাযোগ করতে দেয়। ভাগ্যক্রমে, আপনাকে খুব কমই নিম্ন-স্তরের বিবরণ জানতে হবে, কারণ লাইব্রেরিগুলি আপনার জন্য যোগাযোগ পরিচালনা করে।
বিএমপি280 সেন্সর (সার্কিটপাইথন) দিয়ে তাপমাত্রা পড়া:
import board
import adafruit_bmp280
# একটি I2C বাস অবজেক্ট তৈরি করুন
i2c = board.I2C() # ডিফল্ট SCL এবং SDA পিন ব্যবহার করে
# একটি সেন্সর অবজেক্ট তৈরি করুন
bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
# তাপমাত্রা পড়ুন
temperature = bmp280.temperature
print(f"Temperature: {temperature:.2f} C")
পালস প্রস্থ মড্যুলেশন (PWM)
PWM হল একটি ডিজিটাল পিনে একটি অ্যানালগ আউটপুট অনুকরণ করতে ব্যবহৃত একটি কৌশল। দ্রুত একটি পিন চালু এবং বন্ধ করে, আপনি গড় ভোল্টেজ নিয়ন্ত্রণ করতে পারেন, যা একটি LED ডিম করা, একটি ডিসি মোটরের গতি নিয়ন্ত্রণ করা বা একটি সার্ভো মোটর পজিশনিংয়ের জন্য দরকারী।
সংযোগ এবং ইন্টারনেট অফ থিংস (IoT)
এইখানেই ESP32 এবং পিকো ডব্লিউ এর মতো বোর্ডগুলি সত্যই উজ্জ্বল। অন্তর্নির্মিত Wi-Fi এর সাথে, পাইথন এটিকে IoT ডিভাইস তৈরি করা আশ্চর্যজনকভাবে সহজ করে তোলে।
Wi-Fi এর সাথে সংযোগ স্থাপন করা
আপনার ডিভাইসটিকে একটি নেটওয়ার্কের সাথে সংযুক্ত করা প্রথম পদক্ষেপ। আপনার নেটওয়ার্কের শংসাপত্রগুলি নিরাপদে সংরক্ষণের জন্য আপনাকে একটি ফাইল তৈরি করতে হবে (প্রায়শই সার্কিটপাইথনে secrets.py বলা হয়)।
একটি ESP32 কে Wi-Fi এর সাথে সংযুক্ত করা (মাইক্রোপাইথন):
import network
SSID = "YourNetworkName"
PASSWORD = "YourNetworkPassword"
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(SSID, PASSWORD)
while not station.isconnected():
pass
print("Connection successful")
print(station.ifconfig())
ওয়েব অনুরোধ করা
একবার সংযুক্ত হয়ে গেলে, আপনি ইন্টারনেটের সাথে যোগাযোগ করতে পারেন। আপনি অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস (APIs) থেকে ডেটা আনতে পারেন, একটি ওয়েব পরিষেবাতে সেন্সর ডেটা পোস্ট করতে পারেন বা অনলাইন ক্রিয়া ট্রিগার করতে পারেন।
একটি API থেকে JSON ডেটা আনা (`urequests` লাইব্রেরি ব্যবহার করে):
import urequests
response = urequests.get("http://worldtimeapi.org/api/timezone/Etc/UTC")
data = response.json()
print(f"The current UTC time is: {data['datetime']}")
response.close()
MQTT: IoT এর ভাষা
HTTP দরকারী হলেও, IoT যোগাযোগের জন্য স্বর্ণের মান হল MQTT (মেসেজ কিউইং টেলিমেট্রি ট্রান্সপোর্ট)। এটি কম-ব্যান্ডউইথ, উচ্চ-বিলম্ব নেটওয়ার্কের জন্য ডিজাইন করা একটি হালকা ওজনের প্রকাশ-সাবস্ক্রাইব প্রোটোকল। একটি ডিভাইস একটি "বিষয়" এ সেন্সর ডেটা "প্রকাশ" করতে পারে এবং অন্য কোনও ডিভাইস (বা সার্ভার) সেই বিষয়ে "সাবস্ক্রাইব" করলে অবিলম্বে ডেটা পাবে। ক্রমাগত একটি ওয়েব সার্ভার পোল করার চেয়ে এটি অনেক বেশি দক্ষ।
উন্নত বিষয় এবং সেরা অনুশীলন
আপনার প্রকল্পগুলি বাড়ার সাথে সাথে আপনি একটি মাইক্রোকন্ট্রোলারের সীমাবদ্ধতাগুলির মুখোমুখি হবেন। এখানে শক্তিশালী এম্বেডেড পাইথন কোড লেখার জন্য কিছু সেরা অনুশীলন রয়েছে।
- মেমরি ম্যানেজমেন্ট: RAM আপনার সবচেয়ে মূল্যবান সংস্থান। লুপের ভিতরে তালিকা বা দীর্ঘ স্ট্রিংয়ের মতো বড় অবজেক্ট তৈরি করা এড়িয়ে চলুন। ম্যানুয়ালি আবর্জনা সংগ্রহ ট্রিগার করতে এবং মেমরি মুক্ত করতে
gcমডিউল (import gc; gc.collect()) ব্যবহার করুন। - পাওয়ার ম্যানেজমেন্ট: ব্যাটারি চালিত ডিভাইসগুলির জন্য, পাওয়ার দক্ষতা সমালোচনামূলক। বেশিরভাগ মাইক্রোকন্ট্রোলারের একটি "ডিপস্লিপ" মোড রয়েছে যা চিপের বেশিরভাগ অংশ বন্ধ করে দেয়, খুব কম শক্তি খরচ করে এবং একটি নির্দিষ্ট সময় পরে বা একটি বাহ্যিক ট্রিগার থেকে জেগে উঠতে পারে।
- ফাইল সিস্টেম: আপনি নিয়মিত কম্পিউটারের মতো অনবোর্ড ফ্ল্যাশ মেমরিতে ফাইল পড়তে এবং লিখতে পারেন। এটি ডেটা লগিং বা কনফিগারেশন সেটিংস সংরক্ষণের জন্য উপযুক্ত।
- ইন্টারাপ্ট: ক্রমাগত একটি লুপে একটি বোতামের অবস্থা পরীক্ষা করার পরিবর্তে (একটি প্রক্রিয়া যা পোলিং নামে পরিচিত), আপনি একটি ইন্টারাপ্ট ব্যবহার করতে পারেন। একটি ইন্টারাপ্ট রিকোয়েস্ট (IRQ) হল একটি হার্ডওয়্যার সিগন্যাল যা একটি বিশেষ ফাংশন চালানোর জন্য প্রধান কোডটিকে থামিয়ে দেয়, তারপর পুনরায় শুরু করে। এটি অনেক বেশি দক্ষ এবং প্রতিক্রিয়াশীল।
বাস্তব-বিশ্বের প্রকল্প আইডিয়া শোকেস
তৈরি করতে প্রস্তুত? এখানে কয়েকটি ধারণা রয়েছে যা আমরা আলোচনা করা ধারণাগুলিকে একত্রিত করে:
- স্মার্ট ওয়েদার স্টেশন: তাপমাত্রা, আর্দ্রতা এবং চাপ পরিমাপ করতে একটি BME280 সেন্সর সহ একটি ESP32 ব্যবহার করুন। একটি ছোট OLED স্ক্রিনে ডেটা প্রদর্শন করুন এবং Adafruit IO বা হোম সহকারীর মতো একটি ড্যাশবোর্ডে MQTT এর মাধ্যমে এটি প্রকাশ করুন।
- স্বয়ংক্রিয় উদ্ভিদ জল দেওয়ার সিস্টেম: একটি রাস্পবেরি পাই পিকোতে একটি মাটির আর্দ্রতা সেন্সর সংযুক্ত করুন। যখন মাটি শুকনো থাকে, তখন কয়েক সেকেন্ডের জন্য একটি ছোট জলের পাম্প চালু করে এমন একটি রিলে সক্রিয় করতে একটি GPIO পিন ব্যবহার করুন।
- কাস্টম USB ম্যাক্রো প্যাড: একটি সার্কিটপাইথন বোর্ড ব্যবহার করুন যা USB HID (হিউম্যান ইন্টারফেস ডিভাইস) সমর্থন করে, যেমন একটি পিকো বা অনেক Adafruit বোর্ড। জটিল কীবোর্ড শর্টকাট পাঠাতে বা পূর্বনির্ধারিত পাঠ টাইপ করতে বোতামগুলি প্রোগ্রাম করুন, আপনার উত্পাদনশীলতা বৃদ্ধি করুন।
উপসংহার: ভবিষ্যত পাইথনে এম্বেডেড
পাইথন মূলত এম্বেডেড ডেভেলপমেন্টের ল্যান্ডস্কেপ পরিবর্তন করেছে। এটি প্রবেশের বাধা কমিয়েছে, সফ্টওয়্যার ডেভেলপারদের হার্ডওয়্যার নিয়ন্ত্রণ করতে এবং হার্ডওয়্যার ইঞ্জিনিয়ারদের আগের চেয়ে দ্রুত প্রোটোটাইপ করতে সক্ষম করেছে। মাত্র কয়েকটি লাইনের পঠনযোগ্য কোডে একটি সেন্সর পড়া বা ইন্টারনেটের সাথে সংযোগ স্থাপনের সরলতা একটি গেম-চেঞ্জার।
একটি LED ব্লিঙ্ক করা থেকে শুরু করে একটি সম্পূর্ণ বৈশিষ্ট্যযুক্ত IoT ডিভাইসে যাত্রা একটি অবিশ্বাস্যভাবে ফলপ্রসূ। বিশ্ব সম্প্রদায় এবং ওপেন সোর্স লাইব্রেরির সম্পদ মানে আপনি যখন কোনও চ্যালেঞ্জের মুখোমুখি হন তখন আপনি কখনই একা নন। তাই একটি বোর্ড বেছে নিন, ফার্মওয়্যারটি ফ্ল্যাশ করুন এবং পাইথন এবং ফিজিক্যাল ওয়ার্ল্ডের উত্তেজনাপূর্ণ সংযোগস্থলে আপনার দুঃসাহসিক কাজ শুরু করুন। একমাত্র সীমা হল আপনার কল্পনা।