🌈 نمایشگر OLED و نئوپیکسل با میکروپایتون روی رزبری پای پیکو
یک LED چشمکزن خوب است، ولی پروژهات وقتی جان میگیرد که بتواند متن نشان بدهد و رنگی شود. در این آموزش با میکروپایتون روی رزبری پای پیکو یک نمایشگر OLED کوچک و یک نوار هشتتایی نئوپیکسل را با هم راه میاندازیم. کد را میتوانی بدون خرید قطعه در شبیهساز آنلاین (همان کاری که کاربران wokwi انجام میدهند، این بار به فارسی) اجرا کنی.
چه چیزی میسازیم؟
یک «نوار پیشرفت» رنگی: هر نیم ثانیه یک LED دیگر از نوار نئوپیکسل روشن میشود و رنگ عوض میکند، و همزمان روی OLED عدد مرحله و یک نوار پرشونده نمایش داده میشود.
قطعهها
- رزبری پای پیکو
- نمایشگر OLED SSD1306 مدل ۱۲۸×۶۴ با رابط I2C
- نوار نئوپیکسل ۸تایی (WS2812)
- سیم جامپر
سیمکشی
| قطعه | پایهی قطعه | پایهی پیکو |
|---|---|---|
| OLED | VCC | 3V3(OUT)، پایهی فیزیکی ۳۶ |
| OLED | GND | GND |
| OLED | SDA | GP4 (I2C0 SDA) |
| OLED | SCL | GP5 (I2C0 SCL) |
| نئوپیکسل | DIN | GP16 |
| نئوپیکسل | 5V / VCC | VBUS (۵ ولت USB، پایهی ۴۰) |
| نئوپیکسل | GND | GND |
کد کامل میکروپایتون
from machine import Pin, I2C
import ssd1306
import neopixel
import time
i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
NUM = 8
np = neopixel.NeoPixel(Pin(16), NUM)
colors = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 160, 0)]
step = 0
while True:
lit = step % NUM
r, g, b = colors[(step // NUM) % len(colors)]
for i in range(NUM):
if i <= lit:
np[i] = (r // 4, g // 4, b // 4) # یکچهارم نور، برای چشم و باتری
else:
np[i] = (0, 0, 0)
np.write()
oled.fill(0)
oled.text("Wokwi.ir + Pico", 0, 0)
oled.text("Step: " + str(step), 0, 20)
oled.rect(0, 44, 128, 12, 1)
oled.fill_rect(0, 44, (lit + 1) * 16, 12, 1)
oled.show()
step += 1
time.sleep(0.5)
توضیح بخشهای مهم
بخش OLED
I2C(0, sda=Pin(4), scl=Pin(5)): پیکو دو باس I2C دارد. GP4 و GP5 به باس شمارهی ۰ تعلق دارند. اگر پایهها را با شمارهی باس جور نکنی، خطا میگیری.ssd1306.SSD1306_I2C(128, 64, i2c): درایور نمایشگر را با اندازهی ۱۲۸ در ۶۴ پیکسل میسازد. آدرس پیشفرض 0x3C است.oled.fill(0)صفحه را پاک میکند،oled.textمتن مینویسد (هر حرف ۸×۸ پیکسل)،rectوfill_rectمستطیل توخالی و توپر میکشند.oled.show(): تا این خط را صدا نزنی، هیچ چیزی روی صفحه نمیآید! همهچیز اول در حافظه کشیده میشود و بعد یکجا فرستاده میشود.
بخش نئوپیکسل
neopixel.NeoPixel(Pin(16), NUM): نواری با ۸ LED روی GP16.np[i] = (r, g, b): رنگ هر LED یک سهتایی از ۰ تا ۲۵۵ است.np.write(): مثلshow()در OLED؛ رنگها فقط با این خط به نوار فرستاده میشوند.
اجرا در شبیهساز
پروژهی آمادهی OLED و نئوپیکسل با MicroPython روی پیکو در تینکرکد فارسی همین دو قطعه را دارد. پیکو، OLED و نئوپیکسل هر سه جزو امکانات اشتراک پلاس هستند؛ مثال آماده برای خواندن رایگان باز میشود و برای اجرایش پلاس لازم است. صفحهی قطعهی نئوپیکسل هم توضیح کاملتری دربارهی این LEDهای هوشمند دارد.
اشکالهای رایج
- ImportError: no module named 'ssd1306': روی برد واقعی، فایل
ssd1306.pyباید روی پیکو کپی شده باشد؛ این درایور جزو همهی فرمورها نیست. - OSError: [Errno 5] EIO: پیکو نمایشگر را روی باس I2C پیدا نکرده. SDA و SCL را جابهجا نزدهای؟ برای پیدا کردن آدرس،
print(i2c.scan())را امتحان کن؛ باید عدد ۶۰ (همان 0x3C) را ببینی. - صفحه سیاه میماند:
oled.show()را فراموش کردهای. - نئوپیکسل رنگ عجیب نشان میدهد یا فقط اولی روشن است:
np.write()را جا انداختهای یا تعداد LEDها را اشتباه دادهای. - پیکو ریاستارت میشود: نوارهای بلند با نور کامل جریان زیادی میکشند. نور را کم کن (همان تقسیم بر ۴ در کد) یا تغذیهی جدا بگذار.
اگر با دکمه هم کار کردهای، سعی کن با وقفهی دکمه رنگ نوار را عوض کنی. همین پروژه را با آردوینو هم میشود ساخت: OLED با آردوینو. برای امکانات بیشتر برد، صفحهی رزبری پای پیکو را ببین.
OLED و نئوپیکسل پیکو را باز کن 🌈مقالههای مرتبط
آموزش میکروپایتون از صفر: متغیر، شرط، حلقه، تابع، لیست و کار با پایههای برد
پین اوت رزبری پای پیکو: نقشهی کامل ۴۰ پایه، GP، ADC، I2C، SPI، UART و تغذیه
PWM با میکروپایتون روی رزبری پای پیکو: LED نفسکش با duty_u16 و freq
سروو موتور با آردوینو: جاروب ۰ تا ۱۸۰ درجه و کنترل با پتانسیومتر
همهی آموزشهای رزبری پای پیکو و میکروپایتون ← · همهی مقالهها