برنامه نویسی رشته ای با دو هسته در رزبری پای پیکو
در این آموزش قصد داریم با استفاده از میکروپایتون، دو ال ای دی را با چند رشته با برنامه نویسی دو هسته ای روی Raspberry Pi Pico کنترل کنیم. تا کنون نحوه اتصال OLED، LCD، سروو، سنسور اولتراسونیک را دیدهایم و ارتباطات I2C، ADC، بلوتوث را با Raspberry Pi Pico پیادهسازی کردهایم. میکروکنترلر RP2040 برد پیکو دارای دو هسته است. اگر با اجرای چند رشته ای آشنا نیستید، به سیستم رایانه خود فکر کنید. رایانه شما می تواند چندین برنامه را به طور همزمان اجرا کند که می تواند توسط یک سیستم عامل با استفاده از multithreading اداره شود. اما ما هیچ سیستم عاملی در Raspberry Pi Pico نداریم که چرخه های CPU را کنترل کند، فقط می تواند یک رشته در هر هسته را پشتیبانی کند که در این شرایط دو رشته ای است.
مدار برنامه نویسی چند رشته ای در رزبری پای پیکو
شماتیک مدار بسیار ساده است. من دو LED را با استفاده از دو مقاومت 330 اهم به ترتیب به GPIO15 و GPIO16 وصل کردم. پایه های کاتد LED ها به پایه های GND برد Pico متصل شده اند.
قطعات مورد نیاز
برای نشان دادن برنامه نویسی دو هسته ای روی برد Pico باید مطمئن شوید که اجزای زیر را دارید.
- رزبری پای پیکو
- 2 * ال ای دی
- مقاومت (330 اهم)
- 2 * برد بورد
- سیم های اتصال
چند رشته ای در پیکو با برنامه نویسی دو هسته ای
کد کامل این پروژه در انتهای صفحه در فایل دانلودی قرار داده شده است. در اینجا قسمت های مهم کد را بررسی میکنیم.
در ابتدای کد کتابخانه های مورد نیاز را فراخوانی میکنیم.
from machine import Pin import utime import _thread
سپس باید کلاس Pin() را از کتابخانه machine.py همانطور که در بالا ذکر شد وارد کنیم. در آموزش های قبلی ما بارها از کتابخانه machine استفاده کرده ایم و امیدوارم اکنون با کتابخانه machine آشنا شده باشید. سپس برای استفاده از ساعت داخلی pico باید کتابخانه “utime” را وارد کنیم. ما از کتابخانه “_thread” برای استفاده از توابع threading ساخته شده توسط جامعه raspberry pico استفاده می کنیم.
led1 = Pin(16, machine.Pin.OUT) led2 = Pin(15, machine.Pin.OUT) sLock = _thread.allocate_lock()
در کد بالا، من دو LED را با GPIO15 و GPIO16 به عنوان OUPUT با استفاده از توابع Pin(16, machine.Pin.OUT)
و Pin(15، machine.Pin.OUT)
مقداردهی کردم. تابع _thread.allocate_lock()
می تواند برای ارائه قفل semaphore برای هر دو رشته استفاده شود. اگر می خواهید در مورد این تابع با جزئیات بدانید، می توانید به مستندات کتابخانه “_thread” مراجعه کنید.
def CoreTask(): while True: sLock.acquire() print("Entered into the second Thred") utime.sleep(1) led2.high() print("Led 2 turned on") utime.sleep(2) led2.low() print("Led 2 turned off") utime.sleep(1) print("Exiting from the 2nd Thread") utime.sleep(1) sLock.release() _thread.start_new_thread(CoreTask, ())
ما قصد داریم از تابع CoreTask()
در هسته دیگر با یک رشته استفاده کنیم. در حلقه while درون تابع، یک قفل semaphore را درگیر می کنیم تا رشته را تا زمانی که کامل شود نگه دارد. سپس led2 را به مدت 1 ثانیه HIGH میکنیم و دستورالعمل را روی ترمینال خروجی تونی چاپ میکنیم. سپس قفل semaphore را هنگامی که رشته کامل شد آزاد می کنیم. تابع _thread.start_new_thread(CoreTask, ())
رشته را شروع می کند. این تابع نام تابع هدف را به عنوان اولین پارامتر می گیرد. در مورد من “CoreTask” است.
while True: # قفل سمافور sLock.acquire() print("Entered into the main Thred") led1.toggle() utime.sleep(0.15) print("Led 1 started to toggle.") print("Exiting from the main Thread") utime.sleep(1) #رها کردن قفل سمافور sLock.release()
در حلقه while بالا، ما به طور مشابه از قفل سمافور دیگری استفاده می کنیم تا رشته اصلی تا زمانی که کامل شود به کار خود ادامه دهد. led1 را تغییر می دهد و سپس قفل سمافور را آزاد می کند. اکنون، در Thonny IDE، فایل “main.py” را باز کنید. برای شروع، فایل “main.py” را با فشار دادن کلیدهای “ctrl+shift+s” روی صفحه کلید خود روی برد Pico ذخیره کنید. قبل از ذخیره فایل ها، مطمئن شوید که برد Pico به لپ تاپ شما متصل است. هنگامی که کد را ذخیره می کنید، یک پنجره بازشو ظاهر می شود، همانطور که در تصویر زیر نشان داده شده است. ابتدا باید Raspberry Pi Pico را انتخاب کنید، سپس نام فایل را Main.py بگذارید و آن را ذخیره کنید. این روش به شما امکان می دهد تا زمانی که Pico روشن است، برنامه خودکار اجرا شود.
هنگامی که کد را روی برد Pico آپلود و اجرا می کنید، می بینید که وضعیت led1 که به GPIO16 متصل است با 1.15 ثانیه تاخیر تغییر می کند. اما led2 که به GPIO15 متصل است با 2 ثانیه تاخیر چشمک می زند.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود