پایتون Python نوعی زبان برنامه نویسی سطح بالا است. در سال های اخیر توجه بسیاری از توسعه دهندگان را به خود جلب کرده است. زمانی که قصد برنامه ریزی میکروکنترلرها را با زبان پایتون داریم به دلیل قدرت پردازش و سرعت پردازش دیگر زبانهای برنامه نویسی، پایتون پیشنهاد نمیشود. اما با معرفی میکروپایتون که یک پلتفرم open source از python 3 است؛ همچنین شامل کتابخانههای استاندارد برای اجرا بر روی میکروکنترلرهایی با ROM و RAM محدود، بهینه شدهاند. این موضوع کاملا مرتفع شده است. در ادامه قرار است ضمن آشنایی با زبان MicroPython و برد PyBoard در دیجی اسپارک، این مجموعه آموزشها را دنبال کنیم.
زبان میکروپایتون نسخهای از زبان پایتون با سرعت پردازش بسیار بالا است که میتوان از آن برای ارتباط با میکروکنترلرهایی مانند ESP8266 , ESP32 , Wipy , pyboard , MicroBit استفاده کرد.
میکرو پایتون MicroPython
تا به امروز زبان برنامه نویسی پایتون Python، زبانی همه منظوره و قدرتمند معرفی شده که البته همینطور است. اما در مواردی این زبان برنامه نویسی میتواند انتخاب اول برای پروژه نباشد. برای مثال در بحث نرم افزارهای Embedded ، زبان C همواره در صدر جدول میباشد. این موضوع دلیلی شد برای متولد شدن زبان برنامه نویسی MicroPython تا جای خالی پایتون را در این موارد پر کند.
تفاوتهای CPython و MicroPython
در ابتدا برای دوستانی که اطلاع ندارند، Cpython3 در واقع پیاده سازی پایتون نسخه ۳ محسوب میشود. از تفاوتهای مهم این دو میتوان به مدیریت حافظه اشاره کرد که به جای Reference Counting از روش Garbage Counting استفاده میشود. Garbage Counting : نوعی مدیریت حافظه است. در این روش قطعات کوچک حافظه که به کار گرفته شدهاند و دیگر مورد نیاز نیستند را حذف و سپس مرتب سازی میکند.
شروع کار با MicroPython
برای شروع ابتدا برد Pyboard را بررسی خواهیم کرد. برد Pyboard یکی از برجستهترین بردهای توسعه برای برنامه نویسی MicroPython تا به امروز است. همچنین برای این منظور از بردهای node MCU هم استفاده میشود. من در این سری از آموزشهای مایکروپایتون از pyboard v1.1 استفاده خواهم کرد. در ادامه توضیحاتی درباره قابلیتها و امکانات این برد خواهم داد. به شماتیک برد توجه کنید.
همینطور که در تصویر بالا ملاحظه می کنید، در این برد از STM32 F4 استفاده شده و دارای CPU Cortex-F4F است. همچنین حافظه فلش در نظر گرفته شده در این برد ۱۰۲۴kB است. دارای ورودی MicroUSB و همچنین ورودی micro SD است. یکی از امکانات برد PyBoard که باید بگویم ویژگی مورد علاقه من هم هست وجود یک شتاب سنج داخلی از نوع MMA7660 هست. یادتان میآید وقتی با آردوینو کار می کردید حتما باید از یک سری ماژول مانند MPU6050 یا همین MMA7660 استفاده میکردید؟ حالا به لطف pyboard یکی همیشه همراهتان خواهد بود. دو عدد سوییچ با نامهای USR و RST روی برد موجود است. که برای فلش کردن و ریست کردن برد و همینطور Boot کردن برد کارایی دارند. چهار LED به رنگهای قرمز، سبز، زرد و آبی برای تعیین وضعیت برد قرار داده شده است به عنوان مثال در هنگام پروگرام شدن برد ال ای دی قرمز روشن میشود. همچنین این ال ای دی ها در دسته internal LEDها هستند و در کد نویسی میتوانیم آنها را فعال یا غیرفعال کنیم.
رنج ولتاژ ورودی برد از ۳٫۶ تا ۱۶ ولت می باشد و همچنین جریان خروجی برد ۲۵۰mA می باشد. در مجموع ۳۰ عدد پین IO دارد که شامل PWM , A/D , D/A میباشد. همچنین از UART , I2C , SPI پشتیبانی میکند.
اولین پروژه میکروپایتون
برای اولین پروژه مثل همیشه قصد داریم با استفاده از Pyboard یک LED را کنترل کنیم. تا به صورت کلی با نحوه کار برد آشنا بشویم. در آموزشهای آینده به راه اندازی ماژولهای مختلف میپردازیم. ابتدا پس از متصل کردن برد به لپ تاپ یا … حافظه فلش pyBoard برای ما نمایش داده میشود. که دارای چند فایل مربوط به frameware مربوطه هست.
برای پروگرام کردن برد باید از فایل main استفاده کنیم. کدنویسیها در این فایل صورت خواهد گرفت. در این پروژه کوچک از پایه X1 در pyboard برای اعمال PWM به LED و در نتیحه راه اندازی آن استفاده خواهیم کرد. به این صورت که پایه X1 از طریق یک مقاوت به پایه آنود یا همان مثبت LED و همچنین کاتود یا همان منفی LED به GND برد متصل میشود. مانند تصویر زیر میتوانید اتصالات را برقرار کنید.
وسایل مورد نیاز
مقاومت ۱۰۰ اهم
سیم بردبرد
یک عدد LED
Pyboard v1.1
تحلیل کد میکروپایتون PyBoard
در دو خط اول کتابخانه های مورد نظر را فراخوانی می کنیم. با توجه به نقشه پایه ها که پیش تر مشاهده کردید پایه X1 به کانال ۱ از تایمر ۵ متصل شده که در کد به همین روال یک آبجکت Timer برای تایمر ۵ و یک آبجکت TimerChannel1 برای کانال۱ می سازیم.
from pyb import Timer from time import sleep tim = pyb.Timer(5, freq=100) tchannel = tim.channel(1, Timer.PWM, pin=pyb.Pin.board.X1, pulse_width=0)
برای کنترل روشنایی LED از PWM استفاده می کنیم. در این کد با تایمر ۱۰۰Hz هر حلقه پالس ۰٫۰۱ ثانیه یا ۱۰ms طول خواهد کشید. در ادامه اگر بخواهیم روشنایی LED از ایتدای شروع کد به حالت خاموش و به تدریج روشن و روشنایی آن افزایش پیدا کند از کد زیر استفاده می کنیم.
max_width = 200000 min_width = 20000 wstep = 1500 cur_width = min_width while True: tchannel.pulse_width(cur_width) sleep(0.01) cur_width += wstep if cur_width > max_width: cur_width = min_width
خب حالا اگر بخواهیم هر دو حالت را با هم داشته باشیم باید چکار کنیم؟ یعنی نور LED به تدریج بیشتر و زمانی که به بیشترین حالت رسید به تدریج از نور آن کاسته شود و در نهایت خاموش شود و این پروسه ادامه پیدا کند، برای این امر می توانید از کد زیر استفاده کنید.
while True: tchannel.pulse_width(cur_width) sleep(0.01) cur_width += wstep if cur_width > max_width: cur_width = max_width wstep *= -1 elif cur_width < min_width: cur_width = min_width wstep *= -1
تا این مرحله به همین راحتی یک LED را کنترل کردیم و در آموزش های بعدی به راه اندازی ماژول ها و قطعاتی مانند سروو موتور ها خواهیم پرداخت.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام و خسته نباشید هیچ جا اشاره نکردید از چه نرم افزاری استفاده شده؟ بعد انتخاب نوع برد چیکار کنیم؟ ممنون میشم توضیح دقیقی بدهید.
با سلام، پس از متصل کردن برد به لپ تاپ فایل هایی به شما نمایش داده می شود که با ویرایش کد های موجود در آنها (فایل با نام main) و ذخیره کردن آن، برد آماده استفاده است، شما از هر نوع ادیتوری می توانید استفاده کنید، لازم به انتخاب برد و نصب نرم افزار خاصی نیست.
با سلام. ممنونم از توضیح خوبتون. فقط اینکه زبان پایتون استفاده شده در میکروپایتون ها از لحاظ عملکرد تاثیر منفی روی میکرو STM نداره؟ بالا توضح دادید اما میخواستم نظر تجربی تون رو برای انجام پروژه های بزرگ که از STM32 استفاده میکنند بدونم.
با تشکر
به نظر من برای کسی که بخواد با پایتون برای سخت افزار کد بزنه یک گزینه عالی هست، ولی اگر پروژه بزرگی باشه بهتره با stm کار کرد برای اطمینان، ولی من به شخصه تاثیر منفی ندیدم.
سلام
ممنون از آموزشتون
من از میکروپایتون بر روی کنترلر EV3 شرکت لگو استفاده میکنم. میخواستم بدونم آیا امکان پذیر هست از ماژول های دیگه نظیر opencv و یا numpy در برنامه خود استفاده کنم؟ این ماژول ها به وسیله pip داخل دستگاه نصب کرده ام ولی موقع ایمپورت شناسایی نمی شود و ارور می دهد.
سلام، با تشکر
کاربر گرامی این آموزش بر پایه برد pyboard نوشته شده , برای پردازش تصویر و استفاده از OpenCV، رزبری پای مورد مناسب تری می باشد.