⚙️ برنامه‌نویسی رزبری پای پیکو با زبان آردوینو (C++ و هسته‌ی arduino-pico)

✍️ تیم ووکوی فارسی ·

رزبری پای پیکو معمولاً با میکروپایتون معرفی می‌شود، ولی اگر آردوینو را بلدی، لازم نیست زبان تازه یاد بگیری. با یک «هسته» (Core) در Arduino IDE می‌توانی رزبری پای پیکو را با زبان آردوینو، یعنی همان C++ با setup و loop و digitalWrite، برنامه‌نویسی کنی و از سرعت ۱۳۳ مگاهرتزی و ۲۶۴ کیلوبایت RAM آن استفاده کنی. در این آموزش هسته‌ی محبوب arduino-pico را نصب می‌کنیم، شماره‌گذاری پایه‌ها را یاد می‌گیریم و یک دیمر LED با چشمک‌زن غیرمسدود می‌نویسیم. کد را هم بدون برد در شبیه‌ساز امتحان می‌کنیم.

چرا پیکو با C++؟

مقایسه‌ی کامل دو زبان را در میکروپایتون یا C++ آردوینو؟ نوشته‌ایم.

نصب هسته‌ی arduino-pico در Arduino IDE

  1. Arduino IDE نسخه‌ی ۲ را باز کن و از File و Preferences به قسمت Additional boards manager URLs برو.
  2. این نشانی را اضافه کن (اگر نشانی ESP32 هم آن‌جاست، با ویرگول جدا کن): https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
  3. از Tools، Board و Boards Manager عبارت pico را جست‌وجو کن و بسته‌ی Raspberry Pi Pico/RP2040/RP2350 (نوشته‌ی Earle F. Philhower) را Install کن.
  4. از Tools و Board، برد Raspberry Pi Pico را انتخاب کن (یا Pico W و Pico 2 اگر برد تو آن است).

این مراحل خیلی شبیه نصب ESP32 است؛ اگر آن را انجام داده‌ای، در نصب ESP32 در آردوینو IDE همین منطق را دیده‌ای. نشانی Boards Manager از سرورهای GitHub دانلود می‌شود و روی بعضی اینترنت‌ها کند است؛ اگر نصب نیمه‌کاره ماند، دوباره تلاش کن.

اولین آپلود: یک بار با BOOTSEL

پیکوی نو (یا پیکویی که میکروپایتون رویش است) هنوز برنامه‌ی آردوینو را نمی‌شناسد. برای اولین آپلود، دکمه‌ی BOOTSEL را نگه دار، کابل USB را وصل کن و بعد رها کن. در Arduino IDE قسمت Port را روی UF2 Board بگذار و Upload را بزن. از دفعه‌ی بعد یک پورت سریال معمولی (مثلاً COM6) ظاهر می‌شود و IDE خودش برد را ری‌ست و برنامه‌ریزی می‌کند. یادت باشد آپلود برنامه‌ی آردوینو، میکروپایتون را پاک می‌کند؛ برای برگشت، فایل UF2 میکروپایتون را دوباره با BOOTSEL بریز (روشش در نصب میکروپایتون و Thonny آمده).

شماره‌گذاری پایه‌ها

در کدیعنی
15GP15 (پایه‌ی فیزیکی ۲۰)؛ همیشه شماره‌ی GP را بنویس، نه شماره‌ی فیزیکی
A0، A1، A2GP26، GP27، GP28؛ تنها پایه‌های آنالوگ در دسترس
LED_BUILTINGP25 روی پیکوی معمولی
Serialسریال USB برای سریال مانیتور
Serial1UART0 روی GP0 (TX) و GP1 (RX)

همه‌ی پایه‌ها ۳٫۳ ولتی‌اند و analogWrite روی همه‌ی GPها PWM می‌دهد، نه فقط چند پایه‌ی خاص مثل Uno. نقشه‌ی کامل در پین اوت رزبری پای پیکو است.

قطعه‌ها و سیم‌کشی

قطعهپایه‌ی پیکو
پایه‌ی وسط پتانسیومترGP26 (A0)، پایه‌ی فیزیکی ۳۱
دو پایه‌ی کناری پتانسیومتر3V3(OUT) و GND
آند LED از راه مقاومتGP15
کاتد LEDGND

کد کامل

// Raspberry Pi Pico + Arduino core (arduino-pico):
// the knob on GP26 (A0) dims the LED on GP15,
// and the on-board LED blinks without delay().

const int LED_PIN = 15;     // GP15
const int POT_PIN = A0;     // GP26

unsigned long lastBlink = 0;
bool boardLed = false;

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
  pinMode(LED_BUILTIN, OUTPUT);   // GP25 on the plain Pico
}

void loop() {
  int raw = analogRead(POT_PIN);          // 0..1023 by default
  analogWrite(LED_PIN, raw / 4);          // 0..255

  if (millis() - lastBlink >= 500) {
    lastBlink = millis();
    boardLed = !boardLed;
    digitalWrite(LED_BUILTIN, boardLed ? HIGH : LOW);
    Serial.print("pot: ");
    Serial.println(raw);
  }

  delay(20);
}

توضیح خط به خط

پیکو دو هسته‌ی پردازنده دارد. در هسته‌ی arduino-pico اگر توابع setup1() و loop1() را هم بنویسی، روی هسته‌ی دوم هم‌زمان اجرا می‌شوند. این قابلیت را روی برد واقعی امتحان کن؛ شبیه‌ساز فقط یک setup و loop را اجرا می‌کند.

اجرا در شبیه‌ساز

در تینکرکد فارسی پروژه‌ی آماده‌ی دیمر LED با رزبری پای پیکو همین مدار را با کد C++ دارد. شبیه‌ساز پیکو را به سبک arduino-pico اجرا می‌کند: GP0 تا GP28، A0 تا A2 روی GP26 تا GP28، LED_BUILTIN روی GP25، analogReadResolution و سریال مانیتور. پتانسیومتر را در صحنه بچرخان و نور LED و عددهای سریال را ببین. اگر همین دیمر را با میکروپایتون می‌خواهی، دیمر LED با MicroPython را باز کن و دو کد را کنار هم بگذار. برد پیکو جزو اشتراک پلاس است: مثال‌ها برای خواندن رایگان باز می‌شوند و برای اجرا پلاس لازم داری. اگر با آردوینو تازه‌کاری، درس‌های پایه روی Uno برای همیشه رایگان‌اند.

اشکال‌های رایج

اگر هنوز بین پیکو و بردهای دیگر مرددی، پیکو، ESP32 یا آردوینو؟ را بخوان. برای امکانات شبیه‌سازی این برد صفحه‌ی رزبری پای پیکو را ببین.

دیمر C++ پیکو را در شبیه‌ساز باز کن ⚙️

سؤال‌های رایج

در کد آردوینوی پیکو پایه را با چه عددی صدا بزنم؟

با شماره‌ی GP، نه شماره‌ی فیزیکی. یعنی برای GP15 می‌نویسی 15. پایه‌های آنالوگ هم A0 تا A2 هستند که همان GP26 تا GP28 است و LED_BUILTIN روی پیکوی معمولی GP25 است.

هسته‌ی arduino-pico بهتر است یا Arduino Mbed OS RP2040؟

هر دو کار می‌کنند، ولی هسته‌ی arduino-pico (از Earle Philhower) امکانات بیشتری مثل پشتیبانی کامل از Pico W و Pico 2 و استفاده‌ی ساده از هسته‌ی دوم دارد و بیشتر آموزش‌ها بر پایه‌ی آن‌اند.

analogRead روی پیکو چه عددی می‌دهد؟

به‌طور پیش‌فرض، برای سازگاری با آردوینو، عددی بین 0 تا 1023. ADC پیکو ۱۲ بیتی است و با analogReadResolution(12) بازه‌ی 0 تا 4095 را می‌گیری.

مقاله‌های مرتبط

⚖️

میکروپایتون یا C++ آردوینو؟ مقایسه‌ی کامل برای انتخاب زبان میکروکنترلر

🍓

اولین برنامه‌ی میکروپایتون روی رزبری پای پیکو: چشمک‌زن با machine.Pin

🔘

دکمه و وقفه (IRQ) با میکروپایتون روی رزبری پای پیکو

⏰

ماژول ساعت DS3231 با آردوینو: ساعت و تاریخی که با قطع برق هم گم نمی‌شود

همه‌ی آموزش‌های رزبری پای پیکو و میکروپایتون ← · همه‌ی مقاله‌ها