🌈 نئوپیکسل (WS2812) (NeoPixel (WS2812B))
| اسم انگلیسی | NeoPixel (WS2812B) |
|---|---|
| در ووکوی (Wokwi) | wokwi-neopixel |
| دسته | 💡 LED و نمایشگر |
| در شبیهساز فارسی | مود ساده (بدون کد) و مود آردوینو · رایگان |
نئوپیکسل (NeoPixel) اسم خودمانی LEDهای آدرسپذیر WS2812 و WS2812B است: هر LED یک تراشهی کوچک دارد که رنگ خودش را از سیم داده برمیدارد و بقیهی داده را به LED بعدی تحویل میدهد. نتیجه اینکه با یک پین آردوینو دهها LED را هر کدام با رنگ جدا کنترل میکنی. نوار نوری اتاق، ساعت حلقهای، چراغ وضعیت ربات و جلوههای رنگینکمانی از همینجا میآیند. این صفحه دربارهی پیکسل تکی و زنجیر کردن آن است؛ حلقهی ۱۲تایی و نوار ۸تایی صفحهی خودشان را دارند.
نئوپیکسل در ووکوی (Wokwi)
در ووکوی هر نئوپیکسل تکی با شناسهی wokwi-neopixel اضافه میشود و چهار پایه دارد: DIN (ورودی داده)، DOUT (خروجی داده برای پیکسل بعدی)، VDD (تغذیه) و VSS (زمین). برای ساختن زنجیر، DOUT هر پیکسل را به DIN بعدی بده. سه پیکسل پشت سر هم روی پین 6:
{
"version": 1,
"parts": [
{ "type": "wokwi-arduino-uno", "id": "uno", "top": 100, "left": 0 },
{ "type": "wokwi-neopixel", "id": "px1", "top": -40, "left": 60 },
{ "type": "wokwi-neopixel", "id": "px2", "top": -40, "left": 120 },
{ "type": "wokwi-neopixel", "id": "px3", "top": -40, "left": 180 }
],
"connections": [
[ "uno:6", "px1:DIN", "green", [] ],
[ "px1:DOUT", "px2:DIN", "green", [] ],
[ "px2:DOUT", "px3:DIN", "green", [] ],
[ "uno:5V", "px1:VDD", "red", [] ],
[ "uno:5V", "px2:VDD", "red", [] ],
[ "uno:5V", "px3:VDD", "red", [] ],
[ "uno:GND.1", "px1:VSS", "black", [] ],
[ "uno:GND.1", "px2:VSS", "black", [] ],
[ "uno:GND.1", "px3:VSS", "black", [] ]
]
}
| پایه در ووکوی | وصل به |
|---|---|
| DIN | uno:6 برای اولین پیکسل؛ DOUT پیکسل قبلی برای بقیه |
| DOUT | DIN پیکسل بعدی (آخری آزاد میماند) |
| VDD | 5V |
| VSS | GND |
کتابخانهی Adafruit NeoPixel را از Library Manager پروژه اضافه کن (کتابخانه در ووکوی). اگر تعداد زیادی پیکسل مرتب میخواهی، بهجای زنجیر دستی، حلقهی آمادهی wokwi-led-ring راحتتر است.
سیمکشی با آردوینو
| پایهی WS2812B | وصل به |
|---|---|
| DIN | پین 6 از راه مقاومت حدود ۳۳۰ اهم |
| 5V (VDD) | 5V؛ برای بیش از حدود ده پیکسل، منبع ۵ ولت جدا |
| GND (VSS) | GND منبع و GND آردوینو، مشترک |
| DOUT | DIN پیکسل بعدی |
| بین 5V و GND ابتدای نوار | خازن حدود ۱۰۰۰ میکروفاراد |
حساب جریان را قبل از سیمکشی بکن: هر پیکسل در سفید کامل حدود ۶۰ میلیآمپر میکشد. سه پیکسل یعنی ۱۸۰ میلیآمپر که USB راحت میدهد، ولی نوار سیتایی در روشنایی کامل نزدیک ۱٫۸ آمپر میخواهد و پایهی 5V آردوینو را از کار میاندازد. مقاومت سری روی DIN لبههای تیز سیگنال را نرم میکند و خازن بزرگ جلوی جهش ولتاژ لحظهی روشن شدن را میگیرد؛ هر دو برای عمر اولین پیکسل مهماند.
کد نمونه
// Three chained NeoPixels on pin 6: red, green and blue walk along the chain.
#include <Adafruit_NeoPixel.h>
const int PIN = 6;
const int COUNT = 3;
Adafruit_NeoPixel pixels(COUNT, PIN, NEO_GRB + NEO_KHZ800);
uint32_t colours[COUNT];
void setup() {
pixels.begin();
pixels.setBrightness(60); // 0..255; keep it low on USB power
colours[0] = pixels.Color(255, 0, 0);
colours[1] = pixels.Color(0, 255, 0);
colours[2] = pixels.Color(0, 0, 255);
}
void loop() {
for (int shift = 0; shift < COUNT; shift++) {
for (int i = 0; i < COUNT; i++) {
pixels.setPixelColor(i, colours[(i + shift) % COUNT]);
}
pixels.show(); // nothing changes until show()
delay(400);
}
}
NEO_GRB ترتیب رنگ در خود تراشه است و setBrightness روشنایی کل زنجیر را محدود میکند؛ برای مصرف جریان، این عدد از هر چیز دیگری مهمتر است.
اشتباههای رایج
show()فراموش شده:setPixelColorفقط حافظه را عوض میکند و تاshowنزنی چیزی روشن نمیشود.- جهت زنجیر: داده فقط از DIN به DOUT میرود؛ نوار را از سمتی که فلشها شروع میشوند وصل کن.
- زمین مشترک نیست: با منبع جدا، اگر GND منبع و آردوینو به هم وصل نباشد، رنگها تصادفی و لرزان میشوند.
- تعداد اشتباه در کد: اگر
COUNTکمتر از تعداد واقعی باشد، آخرین پیکسلها خاموش میمانند.
آموزشهای مرتبط
- رنگینکمان نئوپیکسل با آردوینو
- نئوپیکسل با میکروپایتون روی رزبری پای پیکو
- حلقهی نئوپیکسل ۱۲تایی در ووکوی
- درس رنگهای نئوپیکسل
سؤالهای رایج
هر نئوپیکسل چقدر جریان میکشد؟
هر رنگ تا حدود ۲۰ میلیآمپر، پس یک پیکسل در سفید کامل حدود ۶۰ میلیآمپر. برای چند پیکسل USB کافی است، ولی برای نوار بلند منبع ۵ ولت جدا لازم داری و بهتر است setBrightness را پایین نگه داری.
WS2812 با WS2812B فرق دارد؟
پروتکل هر دو یکی است و با کتابخانهی Adafruit_NeoPixel و تنظیم NEO_GRB + NEO_KHZ800 کار میکنند. WS2812B نسل جدیدتر و چهارپایه است و امروز رایجتر است.
نئوپیکسل را با ESP32 یا پیکو هم میشود راند؟
بله. روی ESP32 همین کتابخانه کار میکند و روی پیکو با میکروپایتون ماژول neopixel آماده است. چون این بردها ۳٫۳ ولتیاند، با نوار بلند گاهی به مبدل سطح منطقی روی سیم داده نیاز میشود.