آردوینو آردوینو Arduino Uno آموزش آردوینو برد ESP8266 پروژه های آردوینو

آموزش راه اندازی ال ای دی نئوپیکسل LED Neopixel 8×1 با ESP8266 و آردوینو

running neopixel led 8x1 with arduino and esp8266
نوشته شده توسط پریسا پوربلورچیان

ال ای دی های نئوپیکسل led neopixel در طرح و ظاهر های متفاوت در بازار عرضه شده و با توجه به نیاز پروژه انتخاب می‌شوند. مانند ال ای دی حلقه ای یا ال ای دی های نواری که پیکسل هایی با تعداد مشخص دارند. ال ای دی نئوپیکسل WS2812B که در ادامه به آن معرفی آن خواهیم پرداخت، امکانات ویژه ای را در اختیار شما قرار می‌دهد. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


ال ای دی led neopixel


ال ای دی نئوپیکسل نوعی ال ای دی RGB هستند که در ساختار آن ها از آی سی آدرس پذیر و برنامه پذیر استفاده شده است. ال ای دی های نئوپیکسل به دلیل پشتیبانی از کتابخانه های تعریف شده، نمونه برنامه های آماده و آسان در بین سازندگان طرفداران زیادی را جذب کرده است. چرا که بدون نیاز به دانش برنامه نویسی میتوانید توسط یک میکروکنترلر به ال ای دی فرمان دهید. ال ای دی نئوپیکسل با انواع بردهای آردوینو و ESP8266 و رزبری پای سازگاری شده و کتابخانه آن در دسترس عموم قرار گرفته است. ال ای دی نئوپیکسل بر اساس چهار پایه ساخته شده است. پایه VCC, GND, DIN , Dout که یکی از ویژگی های منحصر به فرد ال ای دی نئوپیسکل را به نمایش می‌گذارد. ال ای دی های نئوپیکسل قابلیت سری شدن دارند. بی نهایت ال ای دی را میتوانید توسط پایه های DIN, Dout به یکدیگر متصل کرده و تعداد ال ای دی های متصل شده به هم را در کد برنامه آردوینو تعریف کنید تا همزمان تغییرات اعمالی را نمایش دهند. پایه ی دیتا به هر پایه از میکروکنترلر متصل شده و از قابلیت دیگر این ال ای دی میتوان به فرمان به تمامی ال ای دی ها فقط توسط یک پایه از میکرو اشاره کرد. فوق العاده است!

نوار ال ای دی 8X1 تراشه WS2812B RGB - دیجی اسپارک

 


نصب کتابخانه Adafruit Neopixel


کتابخانه Adafruit Neopixel جهت راه اندازی ال ای دی های نئوپیکسل توسعه یافته است. پس از نصب کتابخانه نمونه برنامه های مناسبی جهت شروع و یادگیری کار با ال ای دی ها در کتابخانه قرار گرفته شده است. جهت نصب کتابخانه ابتدا از مسیر زیر کتابخانه را سرچ کنید.

Arduino/Tools/Manage Libraries

سپس در صفحه باز شده عبارت Neopixel را سرچ و بر روی install کلیک کنید.

نصب کتابخانه LED Neopixel در نرم افزار آردوینو IDE - دیجی اسپارک

کتابخانه نصب و آماده تست برنامه است.

 


اتصالات نوار ال ای دی


ال ای دی نئوپیکسل دارای ۴ پایه از دو طرف است:

سمت راست:

  • پایه GND
  • پایه Dout
  • پایه ۴ – ۷ DC
  • پایه GND

سمت چپ:

  • پایه GND
  • پایه DIN
  • پایه ۴ – ۷ DC
  • پایه GND

پایه DIN, DOUT جهت اتصال سری ال ای دی ها استفاده می‌شود. به عنوان مثال اگر بخواهید ۴ عدد ال ای دی نئوپیکسل ۸X1 را به یکدیگر متصل کنید، پایه DIN ال ای دی اول را به پایه DOUT ال ای دی دوم متصل می‌کنیم. به همین ترتیب روند اتصالات ادامه پیدا می‌کند.

 


کد آردوینو LED Neopixel


پس از نصب کتابخانه از مسیر Arduino/ File / Examples میتوانید نمونه برنامه های LED را تست و اجرا کنید. جهت سهولت از کد زیر استفاده کنید.

#include <Adafruit_NeoPixel.h>


#define PIN        6 
#define NUMPIXELS 24 


Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 500 

void setup() {
 
 pixels.begin(); 
}


void loop() {
  pixels.clear();

  
  for(int i=0; i<NUMPIXELS; i++) { 

    
    pixels.setPixelColor(i, pixels.Color(227, 38, 54));

    pixels.show();  

    delay(DELAYVAL); 
  }
}

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

انتخاب پایه دیجیتال:

#define PIN        6

انتخاب تعداد ال ای دی نئوپیکسل:

#define NUMPIXELS 24 

فراخوانی کتابخانه:

#include <Adafruit_NeoPixel.h>

فعال شدن پیکسل ها:

void setup() {
 
 pixels.begin(); 
}

شرط نویسی برای پیکسل ها:

void loop() {
  pixels.clear();

  
  for(int i=0; i<NUMPIXELS; i++) { 

    
    pixels.setPixelColor(i, pixels.Color(227, 38, 54));

    pixels.show();  

    delay(DELAYVAL); 
  }
}

 

 


راه اندازی نئوپکسل با ESP8266


با نصب پکیج ESP8266 دسترسی به تمامی بردهای زیر شاخه پکیج ESP8266 فراهم شده و میتوانید ال دی نئوپیکسل را به برد های Nodemcu, Wemos D1 mini و سایر بردهای مشابه متصل کنید. بردهای ESP8266 از پایه های GPIO از D1 تا D8 استفاده می‌کند و بایستی در کدنویسی برنامه یکی از این پایه را با D فراخوان کنید. همچنین تنها با یک پایه GPIO میتوانید بی نهایت ال ای دی نئوپیکسل را راه اندازی و کد رنگ دهید.

راه اندازی نوار ال ای دی 8X1 تراشه WS2812B RGB با ESP8266 - دیجی اسپارک

 


کد آردوینو LED Neopixel با برد Wemos


کد زیر را کپی و به نرم افزار آردوینو انتقال دهید. سپس با توجه به نوع برد مورد استفاده Nodemcu یا Wemos D1 mini برد را انتخاب و پورت را مشخص کنید. سپس کد را کامپایل کنید:

#include <Adafruit_NeoPixel.h>


#define PIN       D1 
#define NUMPIXELS 24 


Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 500 

void setup() {
 
 pixels.begin(); 
}


void loop() {
  pixels.clear();

  
  for(int i=0; i<NUMPIXELS; i++) { 

    
    pixels.setPixelColor(i, pixels.Color(227, 38, 54));

    pixels.show();  

    delay(DELAYVAL); 
  }
}

تمامی ۲۴ ال ای دی به ترتیب با رنگ بنفش روشن شده و قابلیت تغییر رنگ دارد. جهت تعریف پایه دیتا سنسور از پایه های GPIO استفاده می‌کنیم:

#define PIN       D1 

 

 

راه اندازی نوار ال ای دی 8X1 تراشه WS2812B RGB با برد ویموس Wemos - دیجی اسپارک

 


تغییر رنگ Nepixel با کلید


روش دیگر تغییر دادن رنگ ال ای دی نئوپیکسل استفاده از کلید است. به این صورت که با فشردن کلید هر بار ال ای دی ها تغییر رنگ می‌دهند. در این کد سه حالت مختلف با سوییچ نوشته شده است. با هر بار فشردن کلید ال ای دی های نئوپیکسل تغییر رنگ داده و به ترتیب روشن می‌شود. برای اینکار از میکروسوسییچ استفاده خواهیم کرد. میکروسوییپچ در انواع مختلفی وجود دارد که من از مدل ماژول ۳ پایه آن استفاده می‌کنم.

 


کد آردوینو ButtonCycler


کد زیر با پایه های GPIO برد Wemos d1 mini نوشته شده است. در صورت استفاده از بردهای آردوینو کافیست به جای D1, D2 پایه های دیجیتال مورد استفاده را جایگزین کنید.

#include <Adafruit_NeoPixel.h>


#define BUTTON_PIN   D2


#define PIXEL_PIN    D1 


#define PIXEL_COUNT 24 



Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);


boolean oldState = HIGH;
int     mode     = 0;   

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  strip.begin(); 
  strip.show();  
}


void loop() {

  boolean newState = digitalRead(BUTTON_PIN);


  if((newState == LOW) && (oldState == HIGH)) {
   
    delay(20);
 
    newState = digitalRead(BUTTON_PIN);
    if(newState == LOW) {     
      if(++mode > 8) mode = 0; 
      switch(mode) {          
        case 0:
          colorWipe(strip.Color(  0,   0,   0), 50);   
          break;
        case 1:
          colorWipe(strip.Color(175,   0,   42), 50);   
          break;
        case 2:
          colorWipe(strip.Color(  255, 191,   0), 50);    
          break;
        case 3:
          colorWipe(strip.Color(  59,   122, 87), 50);   
          break;
        
          break;
      }
    }
  }
 oldState = newState;
}

void colorWipe(uint32_t color, int wait) {
  for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
    strip.setPixelColor(i, color);         //  Set pixel's color (in RAM)
    strip.show();                          //  Update strip to match
    delay(wait);                           //  Pause for a moment
  }
}



 

تعریف پایه های کلید و ال ای دی :

#define BUTTON_PIN   D2


#define PIXEL_PIN    D1 


#define PIXEL_COUNT 24

 

فعال سازی ورودی و شروع کار ال ای دی ها:

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  strip.begin(); 
  strip.show();  
}

 

تغییر رنگ نوار ال ای دی 8X1 تراشه WS2812B RGB - دیجی اسپارک

 


تغییر رنگ LED با دستور Switch case


ساختار تصمیم Switch جهت تصمیم گیری های چندگانه بر اساس مقادیر مختلف یک عبارت استفاده می‌شود. به طور کلی برای تصمیم گیری هایی که بیش از سه انتخاب وجود داشته باشد، از ساختار Switch استفاده میکنیم.

Switch ( ( عبارت  {
Case  < مقدار ۱   > :
< دستورات ۱  >
Break;
Case  < مقدار ۲   > :
< دستورات ۲  >
Break;
.
.
.

 

سپس بر اساس دستور بالا، از دستور سوییچ کیس Switch case برای شرط گذاری استفاده می‌کنیم. به این صورت که با اجرای هر Case دستورات آن اجرا شده و سپس دستور بعدی اجرا می‌شود:

case0:

 case 0:
          colorWipe(strip.Color(  0,   0,   0), 50);   
          break;

 

case1:

  case 1:
          colorWipe(strip.Color(175,   0,   42), 50);   
          break;

 

case2:

 case 2:
          colorWipe(strip.Color(  255, 191,   0), 50);    
          break;

 

case3:

 case 3:
          colorWipe(strip.Color(  59,   122, 87), 50);   
          break;

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

 

 


وسایل مورد نیاز


نوار ال ای دی ۸X1 تراشه WS2812B RGB

برد آردوینو Arduino Uno R3 با تراشه R3 اورجینال

برد wemos D1 mini بر پایه ESP8266 با ۴ مگابایت حافظه فلش

هویه ۴۰ وات سومو مدل SM121

۶۰رشته کابل مخصوص برد بورد جامپر breadboard

 

راه اندازی نوار ال ای دی 8X1 تراشه WS2812B RGB با بردهای آردوینو - دیجی اسپارک

  

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

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک   دانشجوکیت    digispark    daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۴۶ دیدگاه

  • سلام وقتتون بخیر خسته نباشید.. من یکسری ال ای دی تکی ws2813 دارم ک به دلیل شکستن ریسه ی ال ای دی و محل اتصال پایه روی پی سی بی مجبور به جدا سازی شدم.. ایا راه یا اموزشی هست ک من پی سی بی دستی برای تعمیر درست کنم؟؟ دیتا شیت مورد نیازم برای چینش مدار رو پیدا نکردم.. لطفا راهنماییم کنید

    • با سلام
      پایه DIN, DOUT جهت اتصال سری ال ای دی ها استفاده می‌شود. به عنوان مثال اگر بخواهید ۴ عدد ال ای دی نئوپیکسل ۸X1 را به یکدیگر متصل کنید، پایه DIN ال ای دی اول را به پایه DOUT ال ای دی دوم متصل می‌کنیم. به همین ترتیب روند اتصالات ادامه پیدا می‌کند.

  • سلام خسته نباشید .میخواستم ببینم که من میخواستم اینو به اردوینو نانو وصل کنم اما در اموزش نگفتید کهکدام سیم رو به کدام پایه متصل کنم و اینکه همین برنامه میشه روش اپلود کنم یا باید کد رو تغییر بدم

    • با سلام
      کاربر گرامی تفاوتی بین پایه های آردوینو نانو و آردوینو uno وجود ندارد.
      در کد این برنامه ال ای دی به پایه ی شماره ۶ متصل شده است .
      نیاز به هیچ تغییری ندارد.

      • خیلی ممنونم از پاسختون فقط اینکه دایاگرامی هست برای این پروژه ؟ این اولین پروژه من با ال ای دی های ادرس پذیر است و خیلی آشنایی ندارم و ایا نیاز به باتری هست یا با میکرو یو اس بی هم کار میکند
        ؟

  • سلام.میخواستم ببینم که مقاومتی نایز است وصل کنم یا رله ای ؟همونطور که من گفتم یکبار بردم سوخت من این رو با کابل خود اردوینو به کامپیوتر وصل میکنم مشکلی نداره ؟

    • با سلام
      در ایم کد فقط پایه ورودی ال ای دی تعریف شده است و برای خروجی رله پایه ای تعریف نشده است. تنها کافیست پایه Din ال ای دی را به پایه ۶ دیجیتال آردوینو D6 ( طبق این کد ) وصل کنید. همچنین نیاز به هیج مقاومتی نیست. ولتاژ کاری ال ای دی بین ۴ تا ۷ ولت است و در این پروژه تغذیه VCC از پایه ۵ ولت آردوینو تامین شده است. در صورت استفاده از ولتاژی غیر از این ال ای دی آسیب خواهد دید.

    • با سلام
      ولتاژی کاری ال ای دی ۴ الی ۷ ولت است و ولتاژ پیشنهادی ۵ ولت است. همچنین نیازی به مقاومت نیست.
      در نظر داشته باشید جهت اتصال به میکرو پایه Din بایستی متصل باشد.

      • یعنی اگر مستقیم به اردوینو وصل شه و اردوینو به کامپیوتر مشکلی نیست؟و میشه از dout بجای din استفاده کرد؟

  • سلام میخواستم ببینم که اگه من بخوام ۲ تا از این ۸ در ۱ ها رو وصل کنم به هم فقط din و dout رو اتصال بدم یا vcc و gnd هم لازمه

  • خسته نباشیذ.من وقتی داشتم سیم لحیم می کردم پایه din سوخت
    آیا این ال ای دی هنوز قابل استفاده است؟ از سوخت منظورم اینه که نمیشه بهش لحیم کرد و کلا کار نمی کند

    • با سلام
      بنده متوجه منظور شما نشدم. منظور از سوختن چیست؟
      به عنوان مثال اگر بخواهید ۴ عدد ال ای دی نئوپیکسل ۸X1 را به یکدیگر متصل کنید، پایه DIN ال ای دی اول را به پایه DOUT ال ای دی دوم متصل می‌کنیم. به همین ترتیب روند اتصالات ادامه پیدا می‌کند.

  • سلام
    اگه جریان کاری led بالاتر از این میزان بود یا وات led ها بالا بود باید چه کار کرد؟
    باید منبع تغذیه رو مستقیم به led متصل کنم؟

    • با سلام
      در این آموزش حتما بایستی از ال ای دی نئوپیکسل استفاه کنید. ال ای دی های دیگر با مشخصات نیاز به بررسی دیتاشیت و استفاده از کاهنده در آردوینو دارد.

  • سلام خسته نباشید .اول از همه خیلی ممنونم که این سایت رو راه اندازی کردید ، معذرت می‌خوام من کد نویسی رو زیاد متوجه نمیشم امکانش هست که اموزش بدید اگر هم مبلغی باید پرداخت بشه هیچ مشکلی نداره .ممنون

    • با سلام
      کاربر گرامی در این خصوص هر خط از برنامه را که متوجه نشده اید، بفرمایید تا توضیح داده شود.

  • سلام خانم پوربلورچیان
    میشه پروژه ای بزارید که بشه به تایر های دوچرخه وصل کرد و با استفاده از وای‌فای یا بلوتوث بهش وصل شد و متن یا عکس که میخواهیم را روی تایر دوچرخه اجرا کند ؟؟

    • با سلام
      ضمن تشکر از شما، مرحله ی اجرا با مرحله ی کدنویسی کاملا متفاوت است. بایستی برای اینکار یک سناریو بنویسید و سپس بر اساس آن کدنویسی را انجام دهید. مراحل پیاده سازی بر روی دوچرخه مجزا از کدنویسی است. این مورد هم امکان پذیر است. درخواست شما بررسی و در صورت امکان آموزش داده خواهد شد اما با بسیاری از آموزش هایی که در سایت منتشر شده است، به راحتی میتوانید این مورد را پیاده سازی کنید.

  • با سلام
    خیلی ممنونم از اینکه علم و تجربتون رو به اشتراک گذاشتین
    من با چندین کد و کتابخونه های مختلف امتحان کردم و کد شما هم امتحان کردم
    من LED شماره ۰ رو میخوام روشن کنم مثلا رنگ زد اگه مقادیر RGB بالاتر باشن LED کناری یعنی شماره ۱ هم روشن میشه ولی اگه Brightness رو مثلا بزارم روی ۱۰ این مشکل حل میشه ولی شدت نو ضعیف هست
    ممنون میشم اگه راهنمایی بفرمایین

      • فرض کنید برای LED شماره ۰ مقدار (۵۰,۵۰,۰) رو تنظیم میکنم تو این حالت LED شماره صفر رنگش زد میشه و بقیه LED ها خاموش هستن. ولی وقتی مقدار رو (۲۵۵,۲۵۵,۰) تنظیم میکنم هم LED شماره ۰ و هم شماره ۱ روشن میشن در صورتیکه من فقط LED شماره ۰ رو دستور روشن بودن داده بودم.
        مشکل از چی میتونه باشه!؟

        • متوجه شدم. این مورد برای من تا به حال رخ نداده است. از چه کدی استفاده می‌کنید. دقت داشته باشید این ال ای دی ها به صورت ۳تایی هستند.