Raspberry Pi Pico 2 که به تازگی منتشر شده است با دو CPU مختلف عرضه می شود. یا یک پردازنده دو هسته ای Arm cortex M33 یا یک پردازنده Dual Core RISC-V Hazard3، بله اولین محصول RISC-V از یک Raspberry Pi! پردازنده دوم عملکردی بین پردازنده دو هسته ای Arm Cortex M0+ در Raspberry Pi Pico قدیمی و پردازنده جدیدتر Arm Cortex M33 دارد. CPU RISC-V توسط کارمند Raspberry Pi Luke Wren به عنوان یک پروژه جانبی جالب توسعه داده شد.
ویژگی | رزبری پای پیکو 2 | رزبری پای پیکو |
---|---|---|
سیستم روی یک تراشه | RP2350، دو هستهای Arm Cortex M33 یا پردازنده دو هستهای RISC-V Hazard3 که تا 150 مگاهرتز کار میکند | RP2040، پردازنده دو هستهای Arm Cortex M0+ با سرعت 133 مگاهرتز |
Sram | 520 کیلوبایت | 264 کیلوبایت |
حافظه فلش | 4 مگابایت QSPI | 2 مگابایت QSPI |
حفاظت | Arm TrustZone، 8 کیلوبایت OTP، بوت امن | هیچ کس |
Wi-Fi/Bluetooth | هیچ کس | نه (Pico W این را دارد) |
پشتیبانی از زبان | MicroPython، CircuitPython، C، C++ | MicroPython، CircuitPython، C، C++ |
رابط USB | دستگاه و هاست USB 1.1 | دستگاه و هاست USB 1.1 |
سطح منطق GPIO | 3.3 ولت | 3.3 ولت |
درگاه ورودی/خروجی عمومی (GPIO) | 26 x ورودی و خروجی دیجیتال | 26 x ورودی و خروجی دیجیتال |
4 x 12 بیت ADC (پین های آنالوگ) | 3 x 12 بیت ADC (پین های آنالوگ) | |
2 x UART، 2 x I2C، 2 x SPI، 24 x PWM | 2 x UART، 2 x I2C، 2 x SPI، 16 x PWM | |
ورودی و خروجی قابل برنامه ریزی | 12 دستگاه PIO حالت | 8 دستگاه PIO حالت |
لامپ LED روی برد | پورت ورودی و خروجی عمومی 25 | پورت ورودی و خروجی عمومی 25 |
قدرت | 1.8 تا 5.5 ولت از طریق Micro USB یا VSYS | 1.8 تا 5.5 ولت از طریق Micro USB یا VSYS |
حالت خواب روی میکروکنترلر | <10 μA | 100 میکرو آمپر |
ابعاد | 21 × 51 میلی متر | 21 × 51 میلی متر |
قیمت | 5 دلار | 4 دلار |
در حال حاضر، دو راه برای استفاده از این CPU جدید وجود دارد، از طریق یک گردش کار ++C، و با استفاده از پیش نمایش آخرین سیستم عامل MicroPython. ما از جدیدترین سیستم عامل MicroPython برای RISC-V استفاده خواهیم کرد تا نشان دهیم که به اندازه نسخه MicroPython که برای یک پردازنده Arm استفاده می شود آسان است.
هدف این پروژه ایجاد یک توالی نوری «NeoPixel» WS2812B است که نشان میدهد یک CPU RISC-V میتواند پروتکل WS2812B حیاتی زمانبندی را مدیریت کند و یک افکت نسبتاً جالب «دیسکو نور» برای یک دفتر ایجاد کند.
برای این روش شما نیاز خواهید داشت
- رزبری پای پیکو 2
- کابل میکرو USB با کیفیت بالا
- پچ پنل نیم سایز
- WS2812B “NeoPixel” Stick
- 3 عدد کابل بلوز نر به نر
نصب MicroPython برای RISC-V روی Raspberry Pi Pico 2
1. دانلود فایل RISC-V MicroPython UF2 از منابع MicroPython حتما پیش نمایش RISC-V را دانلود کنید. توجه داشته باشید که از آنجایی که این یک پیش نمایش است، همه چیز احتمالاً خراب می شود، بنابراین هیچ پروژه مهمی با این سیستم عامل ایجاد نکنید.
2. دکمه BOOTSEL را فشار داده و نگه دارید روی Pico 2، سپس آن را با استفاده از کابل micro USB به رایانه متصل کنید. به محض ظاهر شدن درایو RP2350 روی کامپیوتر، BOOTSEL را آزاد کنید.
3. فایل UF2 را بکشید و رها کنید در موتور RP2350. Raspberry Pi Pico 2 راه اندازی مجدد خواهد شد و اکنون MicroPython را اجرا خواهد کرد.
اگر قبلاً از MicroPython استفاده نکرده اید، این نسخه نسخه ای از Python 3 است که برای میکروکنترلرها توسعه یافته است. اگر می توانید پایتون بنویسید، می توانید میکروپایتون بنویسید. برای نوشتن کد MicroPython، باید از یک ویرایشگر سفارشی استفاده کنیم و ویرایشگر اصلی پیش فرض Thonny است که در این آموزش از آن استفاده خواهیم کرد.
4. دانلود و نصب کنید تونی برای سیستم عامل شما
5. تونی را باز کنید.
6. رزبری پای پیکو را وصل کنید 2 به کامپیوتر و روشن سپس به Tools > Options بروید و روی تب Translator کلیک کنیداز منوی کشویی Translator، MicroPython (Raspberry Pi Pico) را انتخاب کنید. منوی کشویی پورت می تواند برای شناسایی خودکار Pico باقی بماند. روی OK کلیک کنید برای بستن.
7. تأیید پوسته Python (REPL) برای “Raspberry Pi Pico2 with RP2350-RISCV” برای اطمینان از نصب صحیح آن.
ساخت مدار
مدار یک اتصال ساده بین Pico 2 و WS2812B “NeoPixels” است که فقط از سه سیم استفاده می کند. ما به اتصالات برای برق و داده نیاز داریم.
رزبری پای پیکو 2 | نئوپیکسل | رنگ سیم |
---|---|---|
خروجی 3v3 | +5 ولت (VIN) | قرمز |
GND (هر کدام) | سرزمین من | سیاه |
پورت ورودی و خروجی عمومی 16 | DIN (ورود داده ها) | نارنجی |
ممکن است لازم باشد پین های رابط را روی نئوپیکسل های خود لحیم کنید و برای انجام این کار به بهترین آهن لحیم کاری یا ایستگاه لحیم کاری و همچنین به روز رسانی سریع در مورد نحوه لحیم کاری نیاز دارید.
کد نوشتن
هدف کد تولید یک توالی نور تصادفی در طول کل NeoPixels است.
1. یک فایل خالی جدید در Thonny ایجاد کنید (فایل >> جدید).
2. یک سری ماژول (کد از پیش نوشته شده) را وارد کنید. اولین مورد سختافزاری است، این اجازه میدهد تا کد با GPIO Pico 2 ارتباط برقرار کند، سپس NeoPixel است، انتزاعی که کار با LEDهای WS2812B RGB را بسیار آسانتر میکند. در مرحله بعد، زمان مورد استفاده برای اضافه کردن تاخیر به کد را وارد می کنیم. در نهایت، ما مولد اعداد صحیح تصادفی را از ماژول تصادفی وارد می کنیم. این برای تولید اعداد تصادفی در کد ما استفاده می شود.
import machine
import neopixel
import time
from random import randint
3. یک شی np ایجاد کنید و از آن برای گفتن کد که NeoPixels به پین 16 وصل شده است و 8 “پیکسل” (ال ای دی جداگانه) به صورت سری داریم استفاده کنید. این مقدار را تغییر دهید تا با عددی که دارید مطابقت داشته باشد.
np = neopixel.NeoPixel(machine.Pin(16),8)
4. یک دنباله رسیدگی به استثنا و تلاش شده ایجاد کنید. اساساً، این به Pico 2 میگوید که سعی کند کد داخل آن را اجرا کند. اگر شکست بخورد، یک استثنا مطرح می شود و بعداً متوجه می شویم.
try:
5. اصلاح شد تا نشان دهد این کدی است که باید “تلاش” برای اجرا شود، یک حلقه True while اضافه کنید برای اجرای کد برای همیشه. Thonny به طور خودکار کد را در حین تایپ کردن شما پیمایش می کند.
while True:
6. چهار شیء r، g، b و n ایجاد کنید تا اعداد تولید شده به طور تصادفی بین محدوده 0 تا 128 (r, g, b) و 0 تا 7 ذخیره شوند. (n، تعداد نئوپیکسلهای رشته ما؛ هشت عدد داریم، اما پایتون شروع به شمارش از صفر میکند.) مقدار 128 نصف روشنایی نئوپیکسلها است. او می تواند این را برای روشنایی کامل روی 255 تنظیم کنید، اما انرژی بیشتری مصرف می کند و ممکن است بر افرادی که حساسیت به نور دارند تأثیر بگذارد.
r = randint(0,128)
g = randint(0,128)
b = randint(0,128)
n = randint(0,7)
7. مقادیر ترکیب رنگ فعلی را در پوسته پایتون چاپ کنید. این ترکیبی از R، G و B است که رنگ به طور تصادفی انتخاب شده را تشکیل می دهد.
print("This color is: ","{} {} {}".format(r,g,b))
8. با استفاده از شی np که قبلا ایجاد کردیم، مقدار یک پیکسل انتخابی تصادفی (n) را به ترکیب رنگ ذخیره شده به صورت r,g,b اختصاص دهید.
np(n) = (r,g,b)
9. تغییرات خود را در NeoPixels بنویسید، سپس 0.1 ثانیه صبر کنید. این یک تاخیر کوتاه را قبل از بازگشت کد به ابتدای حلقه while True اضافه می کند و فرآیند را تکرار می کند.
np.write()
time.sleep(0.1)
10. یک بخش کنترل کننده استثنا از کد ایجاد کنید تا زمانی که کاربر روی Stop کلیک می کند یا CTRL+C را فشار می دهد، تشخیص دهد.
except KeyboardInterrupt:
11. پیام “EXIT” را در پوسته پایتون چاپ کنید. این به کاربر می گوید که استثنا با موفقیت مطرح شده است و فرآیند پردازش اکنون تحت کنترل است.
print("EXIT")
12. با استفاده از یک حلقه for، روی تمام نئوپیکسل ها (برای ما 8) تکرار کنید. همه آنها را خاموش کنید و تغییرات را بنویسید تا اعمال شوند.
for i in range(8):
np(i) = (0,0,0)
np.write()
13. کد را در Raspberry Pi Pico 2 خود به عنوان pixels.py ذخیره کنید.
14. روی Run > Run current script کلیک کنید یا روی دکمه سبز Run کلیک کنید تا اجرای کد شروع شود.
همه نئوپیکسلهای این سری باید به زودی یک رنگ تصادفی شوند و هر 0.1 ثانیه تغییر کنند. پوسته پایتون رنگ فعلی را به عنوان یک مقدار RGB نمایش می دهد.
هنگامی که می خواهید متوقف شوید، روی دکمه توقف کلیک کنید، یا CTRL+C را روی صفحه کلید خود فشار دهید.
لیست کد کامل
import machine
import neopixel
import time
from random import randint
np = neopixel.NeoPixel(machine.Pin(16),8)
try:
while True:
r = randint(0,128)
g = randint(0,128)
b = randint(0,128)
n = randint(0,7)
print("This color is: ","{} {} {}".format(r,g,b))
np(n) = (r,g,b)
np.write()
time.sleep(0.1)
except KeyboardInterrupt:
print("EXIT")
for i in range(8):
np(i) = (0,0,0)
np.write()
منبع: https://www.tomshardware.com/raspberry-pi/raspberry-pi-pico/how-to-install-micropython-for-risc-v-on-the-raspberry-pi-pico-2
تحریریه مجله اچ پی