🍓 ۲۵ مدار رزبری پای پیکو با میکروپایتون، با اسم فارسی و انگلیسی

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

رزبری پای پیکو برد کوچکی است که با میکروپایتون، یعنی همان پایتون ساده و خوانا، برنامه‌نویسی می‌شود. اگر پایتون بلدی یا تازه دارد یادت می‌دهند، پیکو کوتاه‌ترین راه از کد به مدار است. ولی بعد از چشمک‌زن اول، سؤال همیشگی این است: «حالا چه مداری بسازم؟». این صفحه جوابش را می‌دهد: ۲۵ مدار رزبری پای پیکو با اسم کامل فارسی و انگلیسی، قطعه‌ها، دستور میکروپایتونی که هر مدار یاد می‌دهد، این‌که در شبیه‌ساز اجرا می‌شود یا نه، و آموزشی که آن را قدم‌به‌قدم درس می‌دهد. بعد پنج مدار میکروپایتون را با جدول سیم‌کشی و کد کامل می‌سازیم. اگر پایه‌های زبان را هنوز محکم نکرده‌ای، اول آموزش میکروپایتون از صفر را بخوان.

سه قانون مدارهای پیکو

  1. همه‌چیز ۳٫۳ ولت: پایه‌های GP پیکو با ۳٫۳ ولت کار می‌کنند و ۵ ولت را تحمل نمی‌کنند. پتانسیومتر و سنسورها را به 3V3(OUT) (پایه‌ی فیزیکی ۳۶) وصل کن. پایه‌ی VBUS (پایه‌ی ۴۰) پنج ولت USB است و فقط برای تغذیه‌ی قطعه‌های پرمصرف مثل سروو و نوار نئوپیکسل به کار می‌رود.
  2. آنالوگ فقط روی سه پایه: GP26، GP27 و GP28 تنها ورودی‌های آنالوگ‌اند. read_u16() عددی بین ۰ تا ۶۵۵۳۵ می‌دهد و duty_u16() در PWM هم همین بازه را می‌گیرد؛ پس عدد ولوم را می‌شود مستقیم به LED داد.
  3. PWM و I2C به پایه حساس‌اند: پایه‌هایی که یک «برش» PWM را شریک‌اند فرکانس یکسان دارند و GP0 و GP16 حتی یک کانال‌اند. I2C هم باید با پایه‌ی درستِ باس جور باشد: GP4 و GP5 مال I2C(0) هستند و GP2 و GP3 مال I2C(1). نقشه‌ی کامل در پین اوت رزبری پای پیکو.
💡 در شبیه‌ساز چه چیزی کار می‌کند؟ پیکوی شبیه‌ساز تینکرکد فارسی میکروپایتون واقعی اجرا می‌کند: machine.Pin با وقفه، PWM، ADC، Timer، I2C با درایورهای ssd1306 و i2c_lcd، ماژول‌های neopixel و dht، input() و UART. دو استثنا: تابع time_pulse_us را ندارد (پس HC-SR04 را روی برد واقعی امتحان کن) و سنسور دمای داخلی تراشه دمای واقعی نمی‌دهد. مثال‌ها را رایگان باز می‌کنی؛ اجرای پیکو و میکروپایتون جزو اشتراک Plus تینکرکد فارسی است. امکانات کامل در صفحه‌ی شبیه ساز پیکو.

جدول ۲۵ مدار رزبری پای پیکو

مدارها در پنج دسته‌اند. ستون «مفهوم» دستور یا ایده‌ی میکروپایتونی است که با ساختن آن مدار یاد می‌گیری. «پایین همین صفحه» یعنی سیم‌کشی و کد کاملش در ادامه آمده است.

۱. پایه: پایه‌ی دیجیتال، PWM و ADC

#اسم فارسیEnglish nameقطعه‌هامفهومدر شبیه‌ساز؟آموزش
۱چشمک‌زن LED روی بردOnboard LED BlinkهیچPin("LED", Pin.OUT) و toggleبلهاولین برنامه‌ی میکروپایتون
۲چشمک‌زن LED بیرونیExternal LED BlinkLED، مقاومت ۲۲۰ اهمPin(15, Pin.OUT) و time.sleepبلههمان آموزش چشمک‌زن
۳کلید تاگل با وقفهButton Interrupt Toggleدکمه، LEDPin.PULL_UP، irq و رفع لرزشبلهدکمه و وقفه
۴LED نفس‌کشPWM Breathing LEDLED، مقاومتPWM، freq، duty_u16 و اصلاح گامابلهPWM با میکروپایتون
۵دیمر با پتانسیومترPotentiometer Dimmerپتانسیومتر، LEDADC.read_u16 به duty_u16بلهADC پیکو
۶لامپ رنگی با ولومRGB Hue KnobLED RGB، سه مقاومت، پتانسیومترسه PWM و چرخ رنگبلهپایین همین صفحه
۷چراغ عابر پیادهPedestrian Traffic Lightسه LED، دکمهپرچم در وقفه و ترتیب حالت‌هابلهپایین همین صفحه
۸چند چشمک‌زن هم‌زمانMultitasking Blink with Timerدو LEDmachine.Timer دوره‌ایبلهTimer در میکروپایتون

۲. سنسورها و ورودی‌ها

#اسم فارسیEnglish nameقطعه‌هامفهومدر شبیه‌ساز؟آموزش
۹نورسنج با فتوسلLDR Light MeterLDR، مقاومت ۱۰ کیلواهممقسم ولتاژ روی GP26بلهمثل ADC پیکو، با LDR به‌جای ولوم
۱۰دماسنج و رطوبت‌سنجDHT22 ThermometerDHT22 یا DHT11dht.DHT22 و مدیریت OSErrorبلهDHT با میکروپایتون
۱۱دزدگیر حرکتیPIR Motion Alarmسنسور PIR، بازر، LEDوقفه‌ی لبه‌ی بالارونده و Timer یک‌بارهبلهپایین همین صفحه
۱۲فاصله‌سنج اولتراسونیکUltrasonic Distance Meter (HC-SR04)HC-SR04، مقسم برای Echotime_pulse_usنه؛ برد واقعیHC-SR04 با میکروپایتون
۱۳خواندن جوی‌استیکJoystick Readerجوی‌استیک دومحورهدو ADC روی GP26 و GP27 و یک دکمهبله—
۱۴هشدار کج شدنTilt Switch Alarmسنسور شیب، LEDورودی دیجیتال با PULL_UPبله—
۱۵دماسنج داخلی تراشهInternal Temperature SensorهیچADC(4) و فرمول تبدیل به دمانه؛ برد واقعیبخش آخر آموزش ADC پیکو

۳. خروجی و حرکت

#اسم فارسیEnglish nameقطعه‌هامفهومدر شبیه‌ساز؟آموزش
۱۶سروو با ولومServo Knobسروو، پتانسیومترPWM پنجاه هرتز و پهنای پالسبلهسروو با میکروپایتون
۱۷کنترل سرعت موتور DCDC Motor Speed Control (NPN)ترانزیستور NPN، دیود، موتور، باتریPWM و کلید ترانزیستوریبلهکلید ترانزیستوری در مدارهای پایه
۱۸نشانگر سطح با نوار LEDLED Bar Level Meterنوار ۱۰تایی LED، ده مقاومت، پتانسیومترلیست پایه‌ها و حلقه‌ی forبلهپایین همین صفحه

۴. نمایشگرها و نور رنگی

#اسم فارسیEnglish nameقطعه‌هامفهومدر شبیه‌ساز؟آموزش
۱۹متن و شکل روی OLEDOLED Text and ShapesOLED SSD1306I2C و درایور ssd1306بلهOLED و نئوپیکسل
۲۰نمایشگر هوا با OLEDOLED Weather Display (DHT22)OLED، DHT22ترکیب I2C و DHT در یک حلقهبلهپایین همین صفحه
۲۱نمایشگر LCD با ماژول I2CI2C LCD 16×2LCD 16×2 با ماژول I2Cدرایور i2c_lcd و آدرس 0x27بلهLCD I2C با میکروپایتون
۲۲نوار رنگین‌کمان نئوپیکسلNeoPixel Strip Rainbowنوار ۸تایی WS2812ماژول neopixel و np.write()بلههمان آموزش OLED و نئوپیکسل

۵. ارتباط و پروژه

#اسم فارسیEnglish nameقطعه‌هامفهومدر شبیه‌ساز؟آموزش
۲۳گفت‌وگو با سریالSerial Chat with input()LED، مقاومتinput() و فرمان متنیبلهپروژه‌ی input() در پیکو
۲۴کنترل با بلوتوث HC-05Bluetooth Control over UARTماژول HC-05، LEDUART(1) و فرمان از گوشیبلهپروژه‌ی UART و HC-05
۲۵ایستگاه هواشناسی با LCDWeather Station (DHT11 + LCD)LCD I2C، DHT11ترکیب دو ماژول و قالب‌بندی متنبلهپروژه‌ی LCD و DHT11

از کدام مدار شروع کنم؟ یک مسیر پیشنهادی

این ۲۵ مدار را لازم نیست به ترتیب شماره بسازی. اگر تازه با پیکو آشنا شده‌ای، این مسیر پنج‌مرحله‌ای هر بار فقط یک مفهوم تازه اضافه می‌کند:

  1. خروجی دیجیتال: مدار ۱ و ۲ (چشمک‌زن‌ها). یاد می‌گیری Pin بسازی، value و toggle را صدا بزنی و با time.sleep زمان بدهی.
  2. ورودی دیجیتال و وقفه: مدار ۳ و بعد مدار ۷. فرق خواندن دکمه در حلقه با وقفه را می‌فهمی و یاد می‌گیری تابع وقفه را کوتاه نگه داری.
  3. آنالوگ و PWM: مدار ۴، ۵ و ۶. دو عدد جادویی ۰ تا ۶۵۵۳۵ را برای ورودی و خروجی می‌شناسی و می‌بینی چرا عدد ولوم مستقیم به LED می‌رسد.
  4. ماژول‌ها و کتابخانه‌ها: مدار ۱۰، ۱۹ و بعد ۲۰. با import dht و درایور ssd1306 کار می‌کنی، باس I2C را می‌شناسی و خطا را با try/except مدیریت می‌کنی.
  5. هم‌زمانی و پروژه: مدار ۸ و ۱۱ و در آخر ۲۴ یا ۲۵. با Timer چند کار را بدون sleep طولانی پیش می‌بری و چند ماژول را در یک برنامه ترکیب می‌کنی.

بعد از این پنج مرحله، هر مدار دیگری در جدول فقط ترکیب تازه‌ای از همین مفهوم‌هاست. اگر هنوز بین زبان‌ها مردّدی، میکروپایتون یا C++ آردوینو فرق‌ها را با مثال نشان می‌دهد.

پنج مدار پیکو با سیم‌کشی و کد کامل میکروپایتون

همه‌ی کدها برای میکروپایتون رسمی رزبری پای پیکو نوشته شده‌اند. روی برد واقعی فایل را با اسم main.py ذخیره کن تا با هر بار روشن شدن اجرا شود؛ در شبیه‌ساز کافی است دکمه‌ی اجرا را بزنی. خروجی print در سریال مانیتور دیده می‌شود.

مدار ۷: چراغ عابر پیاده (Pedestrian Traffic Light)

چراغ ماشین‌ها همیشه سبز است تا وقتی عابری دکمه را بزند؛ آن‌وقت زرد، بعد قرمز می‌شود تا عابر رد شود، و دوباره سبز. دکمه با وقفه خوانده می‌شود: تابع وقفه فقط یک پرچم را روشن می‌کند و کار اصلی در حلقه انجام می‌شود.

قطعهپایه‌ی قطعهپایه‌ی پیکو
LED قرمزآند از راه ۲۲۰ اهمGP13
LED زردآند از راه ۲۲۰ اهمGP14
LED سبزآند از راه ۲۲۰ اهمGP15
هر سه LEDکاتدGND
دکمه‌ی عابریک پایه / پایه‌ی دیگرGP16 / GND
from machine import Pin
import time

red = Pin(13, Pin.OUT)
yellow = Pin(14, Pin.OUT)
green = Pin(15, Pin.OUT)
button = Pin(16, Pin.IN, Pin.PULL_UP)   # button between GP16 and GND

requested = False

def on_press(pin):
    global requested
    requested = True                    # only set a flag: keep handlers short

button.irq(trigger=Pin.IRQ_FALLING, handler=on_press)

def lights(r, y, g):
    red.value(r)
    yellow.value(y)
    green.value(g)

lights(0, 0, 1)                         # cars start on green
while True:
    if requested:
        print("pedestrian waiting")
        time.sleep(1)
        lights(0, 1, 0)                 # yellow
        time.sleep(2)
        lights(1, 0, 0)                 # red: people cross
        print("cross now")
        time.sleep(5)
        lights(0, 0, 1)                 # back to green
        requested = False
    time.sleep_ms(50)

مدار ۶: لامپ رنگی با ولوم (RGB Hue Knob)

با چرخاندن یک ولوم، رنگ LED RGB روی چرخ رنگ حرکت می‌کند: از قرمز به زرد، سبز، آبی، بنفش و دوباره قرمز. سه PWM برای سه رنگ و یک ADC برای ولوم.

قطعهپایه‌ی قطعهپایه‌ی پیکو
LED RGB (کاتد مشترک)قرمز / سبز / آبی، هر کدام از راه ۲۲۰ اهمGP13 / GP14 / GP15
LED RGBپایه‌ی بلند (کاتد مشترک)GND
پتانسیومترکناری / وسط / کناری3V3(OUT) / GP26 / GND
from machine import Pin, PWM, ADC
import time

knob = ADC(26)                      # GP26 = ADC0
red = PWM(Pin(13))
green = PWM(Pin(14))
blue = PWM(Pin(15))
for ch in (red, green, blue):
    ch.freq(1000)

def color(r, g, b):                 # 0..255 each, like on a web page
    red.duty_u16(r * 257)           # 255 * 257 = 65535
    green.duty_u16(g * 257)
    blue.duty_u16(b * 257)

def wheel(h):                       # hue 0..359 -> (r, g, b)
    x = (h % 60) * 255 // 60
    s = h // 60
    if s == 0:
        return (255, x, 0)
    if s == 1:
        return (255 - x, 255, 0)
    if s == 2:
        return (0, 255, x)
    if s == 3:
        return (0, 255 - x, 255)
    if s == 4:
        return (x, 0, 255)
    return (255, 0, 255 - x)

while True:
    raw = knob.read_u16()           # 0..65535
    hue = raw * 359 // 65535        # 0..359
    r, g, b = wheel(hue)
    color(r, g, b)
    print("hue:", hue)
    time.sleep_ms(100)

مدار ۱۸: نشانگر سطح با نوار LED (LED Bar Level Meter)

یک نوار ده‌تایی LED مثل نشانگر صدای ضبط‌صوت: هر چه ولوم را بیشتر بچرخانی، LEDهای بیشتری روشن می‌شوند. این مدار نشان می‌دهد چرا لیست پایتون برای کار با چند پایه این‌قدر راحت است.

قطعهپایه‌ی قطعهپایه‌ی پیکو
نوار ۱۰تایی LEDآند LED اول تا دهم، هر کدام از راه یک مقاومت ۲۲۰ اهمGP2 تا GP11 به ترتیب
نوار ۱۰تایی LEDهمه‌ی کاتدهاGND
پتانسیومترکناری / وسط / کناری3V3(OUT) / GP26 / GND
from machine import Pin, ADC
import time

knob = ADC(26)
leds = [Pin(n, Pin.OUT) for n in range(2, 12)]   # GP2 .. GP11: ten LEDs

while True:
    raw = knob.read_u16()            # 0..65535
    level = raw * 11 // 65536        # 0..10 LEDs to light
    for i in range(10):
        leds[i].value(1 if i < level else 0)
    print("level:", level)
    time.sleep_ms(50)
💡 جریان کل پایه‌های پیکو محدود است. با ده LED و مقاومت ۲۲۰ اهم، هر LED حدود ۶ میلی‌آمپر و کل نوار حدود ۶۰ میلی‌آمپر می‌کشد که مشکلی ندارد؛ ولی مقاومت کمتر از ۱۵۰ اهم نگذار.

مدار ۲۰: نمایشگر هوا با OLED و DHT22 (OLED Weather Display)

دما و رطوبت از سنسور DHT22 خوانده می‌شود و روی یک نمایشگر OLED نشان داده می‌شود. اگر سنسور جواب ندهد، برنامه نمی‌شکند و روی صفحه می‌نویسد «Sensor error».

قطعهپایه‌ی قطعهپایه‌ی پیکو
OLED SSD1306VCC / GND3V3(OUT) / GND
OLED SSD1306SDA / SCLGP4 / GP5 (باس I2C0)
DHT22VCC / DATA / GND3V3(OUT) / GP15 / GND
from machine import Pin, I2C
import ssd1306
import dht
import time

i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
sensor = dht.DHT22(Pin(15))        # for a DHT11 write dht.DHT11(Pin(15))

while True:
    oled.fill(0)                   # clear the screen buffer
    oled.text("Pico weather", 0, 0)
    try:
        sensor.measure()
        t = sensor.temperature()
        h = sensor.humidity()
        oled.text("Temp: {:.1f} C".format(t), 0, 24)
        oled.text("Hum:  {:.0f} %".format(h), 0, 40)
        print("t =", t, "h =", h)
    except OSError:
        oled.text("Sensor error", 0, 24)
        print("DHT did not answer")
    oled.show()                    # send the buffer to the display
    time.sleep(2)                  # DHT22 needs 2 s between readings

مدار ۱۱: دزدگیر حرکتی با بازر و Timer (PIR Motion Alarm)

وقتی سنسور PIR حرکت ببیند، LED و بازر سه ثانیه روشن می‌شوند و بعد خودشان خاموش می‌شوند. خاموش کردن را به یک Timer یک‌باره سپرده‌ایم تا حلقه‌ی اصلی آزاد بماند و فقط هر چند ثانیه تعداد تشخیص‌ها را گزارش کند.

قطعهپایه‌ی قطعهپایه‌ی پیکو
سنسور PIRVCC / OUT / GNDVBUS (۵ ولت) / GP16 / GND
LEDآند از راه ۲۲۰ اهم / کاتدGP15 / GND
بازر فعالمثبت / منفیGP17 / GND

ماژول رایج HC-SR501 با ۵ ولت تغذیه می‌شود ولی خروجی‌اش ۳٫۳ ولت است، پس مستقیم به GP16 وصل می‌شود. اگر ماژول تو خروجی ۵ ولتی دارد، اول با یک مقسم ولتاژ پایینش بیاور.

from machine import Pin, Timer
import time

pir = Pin(16, Pin.IN)              # PIR OUT -> GP16
led = Pin(15, Pin.OUT)
buzzer = Pin(17, Pin.OUT)          # an active buzzer: on/off is enough
off_timer = Timer()

count = 0

def alarm_off(t):
    led.value(0)
    buzzer.value(0)

def motion(pin):
    global count
    count += 1
    led.value(1)
    buzzer.value(1)
    # (re)start a 3-second one-shot timer; new motion extends the alarm
    off_timer.init(mode=Timer.ONE_SHOT, period=3000, callback=alarm_off)

pir.irq(trigger=Pin.IRQ_RISING, handler=motion)

while True:
    print("detections:", count)
    time.sleep(5)

توضیح کامل Timer و کارهای هم‌زمان در Timer در میکروپایتون آمده است.

این مدارها را کجا بسازی؟

اشکال‌های رایج در مدارهای پیکو

همه‌ی مقاله‌های مدار و شبیه‌سازی در بخش مدار و شبیه‌سازی مدار هستند. اگر برد ESP32 هم داری، ۳۰ مدار ESP32 با اسم فارسی و انگلیسی را ببین. برای یادگیری قدم‌به‌قدم مدار از پایه، درس‌های مدار در تینکرکد فارسی را دنبال کن.

دیمر LED پیکو را با میکروپایتون باز کن 🍓

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

مدارهای پیکو را با چه ولتاژی تغذیه کنم؟

پایه‌های GP پیکو با ۳٫۳ ولت کار می‌کنند و ورودی ۵ ولت را تحمل نمی‌کنند. سنسورها و پتانسیومتر را به 3V3(OUT) یعنی پایه‌ی فیزیکی ۳۶ وصل کن. پایه‌ی VBUS پنج ولت USB است و فقط برای تغذیه‌ی قطعه‌هایی مثل نوار نئوپیکسل یا سروو به کار می‌آید.

کدام پایه‌های رزبری پای پیکو آنالوگ هستند؟

فقط GP26، GP27 و GP28 که کانال‌های ADC0 تا ADC2 هستند. با ADC(26).read_u16() عددی بین ۰ تا ۶۵۵۳۵ می‌گیری.

همه‌ی این مدارهای میکروپایتون در شبیه‌ساز اجرا می‌شوند؟

بیشترشان بله: Pin، PWM، ADC، Timer، وقفه، I2C با OLED و LCD، نئوپیکسل، DHT و UART. پیکوی شبیه‌ساز تابع time_pulse_us را ندارد، پس HC-SR04 را روی برد واقعی امتحان کن. سنسور دمای داخلی تراشه هم فقط روی برد واقعی معنی دارد.

اجرای پیکو در شبیه‌ساز فارسی رایگان است؟

باز کردن مثال‌ها و خواندن کد و مدارشان رایگان است. اجرای پیکو و میکروپایتون جزو اشتراک Plus تینکرکد فارسی است.

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

🔌

۱۵ مدار پایه‌ی الکترونیک که هر آردوینوکار باید بلد باشد (با اسم انگلیسی)

🧮

مدار منطقی و دیجیتال: ساخت و شبیه‌سازی گیت AND، OR، NOT و XOR تا شمارنده

🛠️

ساخت مدار در ووکوی (Wokwi) قدم‌به‌قدم: از انتخاب برد و سیم‌کشی تا اجرای شبیه‌سازی، با دو مدار کامل

💾

ذخیره و اشتراک‌گذاری پروژه در ووکوی و شبیه‌ساز فارسی

همه‌ی آموزش‌های مدار و شبیه‌سازی مدار ← · همه‌ی مقاله‌ها