🐍 MicroPython روی رزبری پای پیکو: اولین برنامه‌ی پایتون برای الکترونیک

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

فرق MicroPython با آردوینو

آردوینو C++MicroPython
شکل برنامهsetup() و loop()از بالا به پایین اجرا می‌شود؛ حلقه را خودت با while True: می‌نویسی
صبر کردنdelay(500)time.sleep(0.5) یا time.sleep_ms(500)
پایه‌ی خروجیpinMode و digitalWritePin(15, Pin.OUT) و led.value(1)
آنالوگanalogRead: ۰ تا ۱۰۲۳ADC(26).read_u16(): ۰ تا ۶۵۵۳۵
تورفتگیآکولاد { }فاصله‌ی اول خط (حتماً یکسان)

۱) چشمک‌زن

from machine import Pin
import time

led = Pin("LED", Pin.OUT)   # the on-board LED (GP25)

while True:
    led.toggle()
    time.sleep(0.5)

Pin("LED") همان LED روی خود برد است. toggle() روشنش را خاموش و خاموشش را روشن می‌کند. آماده‌اش را در پروژه‌ی چشمک‌زن با MicroPython ببین.

۲) پتانسیومتر و نور LED (ADC و PWM)

from machine import Pin, ADC, PWM
import time

knob = ADC(26)                 # GP26 = ADC0
led = PWM(Pin(15), freq=1000)

while True:
    led.duty_u16(knob.read_u16())
    time.sleep_ms(50)

عدد ADC و PWM در MicroPython هر دو از ۰ تا ۶۵۵۳۵ است، پس عدد پتانسیومتر را مستقیم به LED می‌دهیم. مدار آماده: دیمر LED با MicroPython.

۳) دکمه با وقفه (irq)

from machine import Pin

led = Pin(15, Pin.OUT)
button = Pin(14, Pin.IN, Pin.PULL_UP)   # pressed = 0

def on_press(pin):
    led.toggle()

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

با PULL_UP دکمه وقتی فشرده نیست ۱ است و وقتی فشارش بدهی ۰ می‌شود؛ برای همین «لبه‌ی پایین‌رونده» (IRQ_FALLING) یعنی «همین الان فشار داده شد». مدار آماده: دکمه و وقفه با MicroPython.

خطاهای رایج

در شبیه‌ساز، پیغام خطا با شماره‌ی خط در Serial Monitor می‌آید، درست مثل برد واقعی.

تازه‌ها: input()، UART، LCD و DHT

گفت‌وگو با برنامه: input() از جعبه‌ی Serial Monitor می‌خواند. جوابش همیشه متن است، پس برای عدد int() بگیر. پروژه: گفت‌وگو با input().

n = input("How many blinks? ")
try:
    n = int(n)
except ValueError:
    print("Please type a number")

UART و بلوتوث: UART(0) همان Serial Monitor است و UART(1) به ماژول HC-05 و «گوشی مجازی» وصل است؛ any() می‌گوید پیامی رسیده یا نه و readline() آن را می‌خواند. پروژه: UART و بلوتوث با MicroPython.

LCD و دماسنج: با i2c_lcd روی LCD کاراکتری I2C می‌نویسی و با dht.DHT11 دما و رطوبت می‌خوانی؛ i2c.scan() هم آدرس قطعه‌های وصل را نشان می‌دهد.

from machine import Pin, I2C
from i2c_lcd import I2cLcd
import dht

i2c = I2C(0, sda=Pin(4), scl=Pin(5))
print(i2c.scan())            # [39] = 0x27, the LCD
lcd = I2cLcd(i2c, 0x27, 2, 16)
sensor = dht.DHT11(Pin(15))
sensor.measure()
lcd.putstr("Temp: %d C" % sensor.temperature())

مدار کامل: LCD و DHT11 با MicroPython.

MicroPython را روی پیکو امتحان کن 🐍

مقاله‌های دیگر

🤖

آردوینو چیست؟ راهنمای کامل برای شروع از صفر

⚡

بهترین شبیه‌ساز مدار آنلاین فارسی — چرا شبیه‌ساز، و چرا تینکرکد فارسی؟

💡

ساده‌ترین پروژه الکترونیک برای بچه‌ها: روشن‌کردن یک LED

بیشتر بخوان در ووکوی فارسی