جلسه پنجم:
آشنایی با زمان بندی در MicroPython
مبحث جلسه قبل در مورد ساختار کلی برنامه در میکروپایتون بود. در انتهای جلسه برنامه ساده LED چشمک زن را برای شما مثال زدیم. مطلب این جلسه در مورد انواع روشهای زمان بندی (Timing) در MicroPython است. زمان بندی در میکروپایتون به روشهای مختلفی انجام میشود مثل تاخیر (delay) ، تایمر(Timer) و … . پیش نیاز این جلسه، جلسات قبلی آموزش میکروپایتون مقدماتی است که از انتهای این صفحه میتوانید به آنها مراجعه کنید.
ابتدا محتوای فایل main.py جلسه قبل را در یک فایل جدید به اسم led.py انتقال دهید. از این پس برای برنامه های مختلف فایل جداگانه ایجاد میکنیم تا آنها را در صورت نیاز اجرا کنیم. توصیه میکنم برای پروژه های خودتان در مرحله تست این کار را انجام دهید. برای مثال برای اجرای کد جلسه قبل بعد از انتقال کد به led.py میتوانید کد main.py را به صورت زیر تغییر دهید.
import led
انواع روشهای زمان بندی در MicroPython
برای ایجاد زمان بندی چند روش وجود دارد که پر کاربردترین آنها Timer و Delay است. در این جلسه در مورد ماژول time و کلاس Timer از ماژول machine صحبت خواهیم کرد.
ماژول time
برای اشنایی با ماژول time در میکروپایتون کد زیر را در قسمت shell وارد کنید:
import time
help(time)
همان طور که تصویر بالا مشاهده میکنید این ماژول دارای توابع مختلفی است مثلا برای مشاهده ساعت و تاریخ فعلی سیستم عامل از دستور زیر در قسمت shell استفاده کنید.
import time
time.localtime()
تاخیر در MicroPython
برای استفاده از تاخیر ثانیه، میلی ثانیه و یا میکروثانیه از کدهای زیر استفاده کنید:
import time
time.sleep_ms(500)#500ms delay
time.sleep_us(500)#500us delay
time.sleep(5)#5s delay

برای مثال در کد جلسه قبل از sleep برای چشمک زدن LED استفاده کردیم.
from machine import Pin
from time import sleep
led=Pin(2,Pin.OUT)
while True:
led(not led())
sleep(0.5)#sleep for 0.5s
اندازه گیری زمان اجرای کد در MicroPython
یکی دیگر از کاربردهای مهم این ماژول اندازه گیری زمان رویدادهای مختلف است که به دو صورت میلی ثانیه و میکروثانیه قابل استفاده است که به صورت زیر انجام میشود.
import time
start = time.ticks_ms() # get millisecond counter
#your code
delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
برای مثال برای اندازه گیری حداقل زمان تاگل کردن یک پایه در MicroPython از کد زیر استفاده کنید:(در ESP32)
این کد را در یک اسکریپت جدید به اسم toggle_speed_test.py ذخیره کنید.
import time
from machine import Pin,freq
freq(240000000)#change cpu freq to max (240MHz)
p=Pin(2,Pin.OUT)
start = time.ticks_us() # get microsecond counter
p(not p())#toggle p
delta = time.ticks_diff(time.ticks_us(), start) # compute time difference
print('pin toggle speed:',delta,'us')
کد main.py را به صورت زیر تغییر دهید و کلید f5 را فشار دهید:
import toggle_speed_test.py
خروجی به صورت زیر است:

کلاس machine.Timer()
یک روش دقیق تر و اصولی تر در برای زمان بندی رویدادها در MicroPython استفاده از کلاس machine.Timer() است. برای آشنایی با این کلاس کدهای زیر را در shell وارد کنید:
from machine import Timer
help(Timer)
برای استفاده از تایمر دو روش داریم یک روش one_shot و روش دیگر periodic در روش one_shot فقط یکبار وقفه ایجاد میشود و در روش periodic در فاصله های زمانی مشخص شده به صورت دائمی وقفه ایجاد میشود. در eps32 4 تایمر داریم که از 0 تا 3 شماره گذاری شده اند:
from machine import Timer
def t1_r(tim):
print('t1 reached')
def t2_r(tim):
print('t2 reached')
t0 = Timer(0)
t0.init(period=3000, mode=Timer.ONE_SHOT, callback=t1_r)
t1 = Timer(1)
t1.init(period=1000, mode=Timer.PERIODIC, callback=t2_r)
خروجی به صورت زیر است :

همان طور که در تصویر میبینید تایمر 0 (one_shot) یک بار و تایمر 1 بصورت مداوم(periodic) اجرا میشود. زمان دوره تایمرها بر حسب ms است. در مثال بالا تایمر 1 هر دوثانیه یکبار و تایمر 0 فقط یکبار بعد از 3 ثانیه سر ریز میشود. برای توقف برنامه از کلیدهای ترکیبی CTRL+C و CTRL+D استفاده کنید.
جمع بندی جلسه پنجم آموزش Micropython
در این جلسه با آموزش زمان بندی در MicroPython در خدمت شما بودیم. در مثالهای بالا به صورت مختصر تایمر و زمان بندی را بررسی کردیم. سعی ما این است که مطالب را در حد امکان قابل فهم و ساده شرح بدهیم. امیدوارم مطالب این جلسه برای شما مفید باشد.
موضوع جلسه بعد در مورد مبدل آنالوگ به دیجیتال (ADC) است.