⚖️ میکروپایتون یا C++ آردوینو؟ مقایسهی کامل برای انتخاب زبان میکروکنترلر
هر کس رزبری پای پیکو یا ESP32 میخرد، زود به این سؤال میرسد: میکروپایتون یا آردوینو؟ یعنی برنامه را با پایتونِ مخصوص میکروکنترلرها بنویسم یا با C++ آردوینو؟ هر دو زبان روی یک برد اجرا میشوند، هر دو رایگاناند و هر دو طرفدار زیاد دارند. در این مقاله این دو را بیطرفانه مقایسه میکنیم، یک برنامهی یکسان را به هر دو زبان مینویسیم و در آخر بر اساس هدفت پیشنهاد میدهیم. بهترین قسمت ماجرا این است که میتوانی هر دو را در یک شبیهساز، شبیه آنچه در Wokwi دیدهای، کنار هم امتحان کنی و بعد تصمیم بگیری.
دو زبان در یک جمله
- C++ آردوینو: کد روی کامپیوتر کامپایل میشود، یعنی به زبان ماشین ترجمه میشود، و بعد روی برد ریخته میشود. سریع و بیواسطه است.
- میکروپایتون: یک مفسر پایتون کوچک روی خود برد نصب است و کد تو را خط به خط میخواند و اجرا میکند. کامپایل لازم ندارد و میتوانی دستورها را همان لحظه در REPL امتحان کنی.
جدول مقایسه
| معیار | میکروپایتون | C++ آردوینو |
|---|---|---|
| سرعت اجرا | کندتر؛ در حلقههای تنگ چند ده برابر | سریع؛ نزدیک به حداکثر توان پردازنده |
| چرخهی «بنویس و ببین» | چند ثانیه؛ بدون کامپایل، با REPL | کامپایل و آپلود، از چند ثانیه تا یک دقیقه |
| یادگیری برای تازهکار | سادهتر؛ بدون نقطهویرگول، نوع متغیر و آکولاد | کمی سختتر؛ ولی آموزش فارسی خیلی زیاد |
| پیام خطا | واضح، با شمارهی خط، موقع اجرا | خطای کامپایل گاهی گیجکننده؛ خطای زمان اجرا معمولاً بیصدا |
| مصرف حافظه | خود مفسر بخشی از فلش و RAM را میگیرد | بهینه؛ حتی روی ۲ کیلوبایت RAM اونو کار میکند |
| دقت زمانبندی | برای بیشتر کارها کافی؛ جمعآوری زباله گاهی مکث کوتاه میاندازد | دقیق تا حد میکروثانیه |
| کتابخانهها | کمتر، ولی برای ماژولهای رایج هست | بسیار زیاد، تقریباً برای هر ماژولی |
| بردها | پیکو، ESP32، ESP8266 و چند برد دیگر؛ نه اونو و نانو | تقریباً همه، از اونو تا پیکو و ESP32 |
یک برنامه، دو زبان
برای اینکه فرق را با چشم ببینی، یک دیمر ساده را روی رزبری پای پیکو به هر دو زبان مینویسیم: پتانسیومتر روی GP26 نور LED روی GP15 را تنظیم میکند و عدد خواندهشده در سریال مانیتور چاپ میشود. اول میکروپایتون:
from machine import Pin, ADC, PWM
import time
pot = ADC(26) # GP26 = ADC0
led = PWM(Pin(15))
led.freq(1000)
while True:
raw = pot.read_u16() # 0..65535
led.duty_u16(raw) # 0..65535
print(raw)
time.sleep_ms(50)
و همین برنامه با C++ آردوینو (هستهی arduino-pico):
const int LED_PIN = 15; // GP15
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
int raw = analogRead(A0); // GP26, 0..1023
analogWrite(LED_PIN, raw / 4); // 0..255
Serial.println(raw);
delay(50);
}
چند فرق که به چشم میآید:
- ساختار: میکروپایتون یک حلقهی
while Trueدارد؛ آردوینو دو تابع ثابتsetupوloop. منطق دقیقاً یکی است. - نوع متغیر: در C++ باید بگویی
rawاز نوعintاست؛ در پایتون نه. - بازهی عددها: میکروپایتون ADC و PWM را همیشه ۱۶ بیتی (۰ تا ۶۵۵۳۵) نشان میدهد، پس عدد ADC را مستقیم به PWM میدهی. آردوینو از بازههای سنتی ۱۰ و ۸ بیتی استفاده میکند و تقسیم بر ۴ لازم است.
- واحد زمان:
time.sleep_ms(50)در برابرdelay(50)؛ دقت کن کهtime.sleepبدون ms بر حسب ثانیه است.
هر دو مدار در تینکرکد فارسی آمادهاند: دیمر LED با MicroPython روی پیکو و دیمر LED با رزبری پای پیکو به زبان C++. هر دو را باز کن و کدها را کنار هم بخوان.
کِی میکروپایتون بهتر است؟
- در مدرسه یا دانشگاه پایتون خواندهای و میخواهی سریع به نتیجه برسی.
- پروژهات پر از منطق، رشته، فهرست و محاسبه است و سرعت خام مهم نیست: ایستگاه هواشناسی، ثبت داده، بازی ساده روی نمایشگر.
- میخواهی تند تند امتحان کنی؛ REPL اجازه میدهد یک پایه را همان لحظه روشن کنی، بدون هیچ کامپایلی.
- برای کلاس درس با دانشآموزانی که پایتون میخوانند، یک زبان مشترک بین کامپیوتر و سختافزار جذاب است.
کِی C++ آردوینو بهتر است؟
- برد تو آردوینو Uno، نانو یا مگاست؛ این بردها میکروپایتون را اجرا نمیکنند.
- زمانبندی دقیق مهم است: موتور پلهای سریع، تولید صدا، خواندن سیگنالهای پرسرعت، ربات تعقیب خط با واکنش سریع.
- برای ماژولت فقط کتابخانهی آردوینو پیدا میکنی؛ که برای ماژولهای کمیابتر زیاد پیش میآید.
- پروژه برای مسابقه یا محصول است و هر میلیثانیه و هر کیلوبایت حافظه حساب میشود.
پیشنهاد ما بر اساس هدف
| اگر… | شروع کن با |
|---|---|
| تازهکار کامل هستی و هنوز برد نداری | C++ آردوینو روی Uno در شبیهساز، که رایگان است |
| پایتون بلدی و رزبری پای پیکو داری | میکروپایتون |
| پروژهی اینترنت اشیا با ESP32 میسازی | C++ آردوینو؛ آموزش و کتابخانهی وب و MQTT بیشتری دارد |
| پروژهی سرعتبالا یا رباتیک رقابتی داری | C++ آردوینو |
| معلمی و دانشآموزانت پایتون میخوانند | میکروپایتون روی پیکو |
هر دو را در شبیهساز امتحان کن
در تینکرکد فارسی رزبری پای پیکو را هم با میکروپایتون (فرمور واقعی میکروپایتون که در مرورگر اجرا میشود) و هم با C++ به سبک arduino-pico میتوانی اجرا کنی؛ کافی است کد را عوض کنی، خود شبیهساز تشخیص میدهد کدام زبان است. آردوینو Uno و Nano با زبان C++ و همهی درسها برای همیشه رایگاناند. پیکو، میکروپایتون و ESP32 جزو اشتراک پلاساند: مثالهای آماده رایگان باز میشوند و برای اجرا پلاس لازم است. مقالهی میکروپایتون روی رزبری پای پیکو در تینکرکد فارسی هم مقدمهی خوبی است.
اشتباههای رایج در انتخاب
- انتخاب زبان فقط بر اساس سرعت: برای چشمکزدن LED یا خواندن دما هر ده ثانیه، فرق سرعت هیچ اهمیتی ندارد. راحتی خودت مهمتر است.
- کپی کردن کد آردوینو در Thonny: دو زبان جدا هستند؛ کد C++ در مفسر میکروپایتون خطای SyntaxError میدهد و برعکس.
- خرید Uno برای میکروپایتون: روی Uno اجرا نمیشود. برای پایتون، پیکو بخر.
- رها کردن یکی چون «سخت» بود: بیشتر سختیها مال مفهومهای الکترونیک است، نه زبان. با زبان دیگر هم همانها را خواهی دید.
برای قدم بعد: اگر میکروپایتون را انتخاب کردی، آموزش میکروپایتون از صفر و نصب میکروپایتون روی پیکو را بخوان. اگر C++ را انتخاب کردی، برنامهنویسی پیکو با زبان آردوینو منتظرت است. مقایسهی خود بردها هم در پیکو، ESP32 یا آردوینو؟ آمده، و صفحههای میکروپایتون و آردوینو نمای کلی هر کدام را دارند.
هر دو زبان را روی پیکو امتحان کن ⚖️سؤالهای رایج
میکروپایتون روی آردوینو Uno اجرا میشود؟
نه. Uno فقط ۲ کیلوبایت RAM و ۳۲ کیلوبایت فلش دارد که برای مفسر میکروپایتون خیلی کم است. برای میکروپایتون به بردهایی مثل رزبری پای پیکو، ESP32 یا ESP8266 نیاز داری.
میکروپایتون چقدر از C++ کندتر است؟
در حلقههای تنگ مثل روشن و خاموش کردن پشت سر هم یک پایه، معمولاً چند ده برابر. ولی در بیشتر پروژههای آموزشی که برنامه منتظر سنسور یا انسان است، این فرق اصلاً حس نمیشود.
اگر میکروپایتون یاد بگیرم، بعداً رفتن به آردوینو سخت است؟
نه. مفهومها (پایه، ورودی و خروجی، PWM، ADC، وقفه، تایمر) یکیاند و فقط شکل نوشتن عوض میشود. خیلیها با یکی شروع میکنند و هر دو را یاد میگیرند.
مقالههای مرتبط
اولین برنامهی میکروپایتون روی رزبری پای پیکو: چشمکزن با machine.Pin
دکمه و وقفه (IRQ) با میکروپایتون روی رزبری پای پیکو
نمایشگر OLED و نئوپیکسل با میکروپایتون روی رزبری پای پیکو
استپر موتور 28BYJ-48 با درایور ULN2003 و آردوینو: چرخش دقیق به درجه
همهی آموزشهای رزبری پای پیکو و میکروپایتون ← · همهی مقالهها