ال ای دی نئوپیکسل نوعی جذاب و پرکاربرد است. با مصرف انرژی بسیار ناچیز قابلیت تولید میلیونها نور رنگی را دارند. تا به حال برای شما این سوال پیش آمده که چطور مقادیر R ,G و B را در ال ای دیهای نئوپیکسل بصورت real time یا بلادرنگ تغییر دهید!؟ خب جواب شما این آموزش است، در این آموزش اقدام به کنترل بی سیم ال ای دی با استفاده از برد nodemcu و ساخت یک وب سرور میکنیم. مقادیر نام برده را بوسیله یک صفحه در مرورگر خود تغییر داده و هر رنگی که تمایل داریم را تولید کنیم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
نقش وب سرور
وب سرور ها برنامه هایی هستند که مسئولیت آن ها قبول کردن درخواست های Http است که از سمت کاربران ارسال می شود، وب سرور ها در پاسخ اطلاعاتی را ارسال می کنند که ما معمولا به نام صفحات Html میشناسیم. خب حالا فرض کنیم که در مرورگر https://digispark.ir را سرچ کردیم، اتفاقی که میافتد به این شکل است که مرورگر شما یک درخواست به دامنهای با نام digispark.ir ارسال میکند. در حالت عادی زمانی که شما آدرس سایتی را در مرورگر جست و جو میکنید از حروف انگلیس استفاده میکنید یعنی کلماتی قابل فهم برای انسان اما در واقع برای ورود به یک سایت باید از طریق ip آن اقدام کنید، اینجاست که مفهومی به نام DNS وارد کار میشود، پس در واقع زمانی که شما URL سایتی را جستجو می کنید مرورگر از طریق سرویس DNS، آی پی مربوط را پیدا میکند و درخواستی ارسال خواهد کرد.
شناخت برد ESP8266
تراشه های ESP8266 از موارد محبوب در زمینه اینترنت اشیا هستند که نسبت به دیگر نمونه ها کیفیت بهتر و همچنین قیمت پایین تری نیز دارند، هسته مرکزی این ماژول ESP8266 EX می باشد که در واقع زیر این شیلد فلزی قرار گرفته است، در ضمن این شیلد فلزی به منظور کاهش نویز و همچنین محافظت از قطعات SMD حساس این ماژول قرار داده شده است. این ماژول ها در سری های مختلفی تولید میشوند از جمله esp01 و esp12، در واقع تفاوتی که مدل ها با یکدیگر دارند تعداد GPIO ها و همچنین حافظه آن ها است البته معمولا از نظر ظاهری نیز تفاوت هایی که با یکدیگر دارند که قابل تشخیص است. این ماژول ها از شبکه WIFI داخلی پشتیبانی میکنند، این میکرو کنترلر ها اولین بار در سال ۲۰۱۴ به بازار عرضه شدند. ESP8266 دارای ۱۳ GPIO و همچنین یک ورودی آنالوگ (A0) است.
برد Wemos ویموس
برد Wemos یکی از پرطرافدار ترین برد هایی است که در زمینه iot مورد استفاده قرار میگیرد، یکی از مزیت های این برد نسبت به برد هایی مانند Node MCU اندازه کوچک آن می باشد تراشه وای فای مورد استفاده در این برد ESP8266 می باشد. از دیگر مزیت های این برد وجود شیلد های مختلفی برای این برد می باشد، که انجام هر پروژه ای را برای کاربر بسیار آسان و لذت بخش می کند، شیلد هایی از جمله شیلد باتری، multi sensor ، DHT22 ، رله ، oled تعداد بسیار زیادی شیلد برای این برد توسعه داده شده که در نتیجه تجربه خوبی از iot برای شما به جا خواهد گذاشت.
روش کار این پروژه
در پروژه کنترل بی سیم ال ای دی نئوپیکسل با ساخت یک وب سرور به وسیله برد ESP8266، می توانیم کنترل کامل بر روی ماژول neopixel ring خود داشته باشیم و مقادیر مربوط به رنگ های اصلی یعنی قرمز، آبی، سبز را در مقیاس ۰ تا ۲۵۵ تغییر دهیم، همچنین یک پلات رنگ در وب سرور وجود دارد که می توانیم بطور دیداری رنگ مورد نظر را انتخاب کنیم.
وسایل مورد نیاز
کتابخانه های مورد نیاز
برای اجرای پروژه کنترل بی سیم ال ای دی ابتدا در نرم افزار Arduino IDE اقدام به نصب کتابخانه مرجع Adafruit_NeoPixel می پردازیم. مراحل زیر را دنبال کنید.
- این مسیر را دنبال کنید Sketch > Include Library > Manage Libraries
- کلمه Adafruit_NeoPixel را جستجو کنید.
- کتابخانه را نصب کنید.
اتصالات ال ای دی نئوپیکسل
-
اتصالات برای برد nodemcu
مطابق جدول و تصویر زیر اتصالات را در برد nodemcu برقرار کنید.
-
اتصالات برای برد wemos D1 mini
مطابق جدول و تصویر زیر اتصالات را در برد Wemos برقرار کنید.
کد پروژه برای nodemcu و Wemos
ابتدا توضیحاتی درباره بخش های مختلف کد خواهم داد، در ابتدا کتابخانه های مورد نیاز را به شرح زیر به کد اضافه کرده ایم.
#include <Adafruit_NeoPixel.h> #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h>
در این قسمت اطلاعات شبکه وای فای مورد نظر را وارد خواهیم کرد، شامل نام و پسوورد وای فای.
const char *ssid = "C1F3R"; const char *password = "314159265";
در این قسمت به ترتیب پایه مدنظر برای اتصال نئوپیکسل و تعداد led های مورد نیاز را مشخص می کنیم.
#define NeoPIN D4 #define NUM_LEDS 8
این بخش کد HTML مربوط به ظاهر وب سرور می باشد.
"<!DOCTYPE html>\n<html>\n\ <head>\n\ <title>wifi pixel</title>\n\ <style>\ body { background-color: #F08262; font-family: Arial; Color: #fff; }\ h1 {text-align: center;}\ p {text-align: center;}\ form {text-align: center;}\ </style>\n\ <meta name=\"viewport\" content=\"width=device-width, height=device-height, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0\" />\n\ </head>\n\ <body>\n\ <h1>CiferTech</h1>\n\ <p>pick the color!</p>\n\ \n\ <form action=\"\" name=\"pick\" method=\"post\">\n\ <input type=\"color\" name=\"c\" value=\"%02d\" onchange=\"document.forms['pick'].submit();\" />\n\ <span onclick=\"document.forms['pick'].submit();\" style=\"font-size:16pt;\"> </span>\n\ </form>\n\ \n\ </body>\ </html>",
کد کامل پروژه کنترل بی سیم ال ای دی نئوپیکسل
#include <Adafruit_NeoPixel.h> #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h> // Webserver Config const char *ssid = "C1F3R"; const char *password = "314159265"; ESP8266WebServer server ( 80 ); // Neopixel Config #define NeoPIN D4 #define NUM_LEDS 8 int brightness = 150; Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, NeoPIN, NEO_RGB + NEO_KHZ800); const int led = 13; void setup ( void ) { Serial.begin ( 115200 ); // ############## // NeoPixel start Serial.println(); strip.setBrightness(brightness); strip.begin(); strip.show(); delay(50); Serial.println("NeoPixel started"); // ######### // Webserver pinMode ( led, OUTPUT ); digitalWrite ( led, 0 ); WiFi.begin ( ssid, password ); Serial.println ( "" ); // Wait for connection while ( WiFi.status() != WL_CONNECTED ) { delay ( 500 ); Serial.print ( "." ); } Serial.println ( "" ); Serial.print ( "Connected to " ); Serial.println ( ssid ); Serial.print ( "IP address: " ); Serial.println ( WiFi.localIP() ); if ( MDNS.begin ( "esp8266" ) ) { Serial.println ( "MDNS responder started" ); } // what to do with requests server.on ( "/", handleRoot ); server.onNotFound ( handleNotFound ); server.begin(); Serial.println ( "HTTP server started" ); } void loop ( void ) { // waiting fo a client server.handleClient(); } void handleRoot() { Serial.println("Client connected"); digitalWrite ( led, 1 ); // data from the colorpicker (e.g. #FF00FF) String color = server.arg("c"); Serial.println("Color: " + color); // setting the color to the strip setNeoColor(color); // building a website char temp[5000]; int sec = millis() / 1000; int min = sec / 60; int hr = min / 60; char clr [7]; color.toCharArray(clr, 7); snprintf ( temp, 5000, "<!DOCTYPE html>\n<html>\n\ <head>\n\ <title>wifi pixel</title>\n\ <style>\ body { background-color: #F08262; font-family: Arial; Color: #fff; }\ h1 {text-align: center;}\ p {text-align: center;}\ form {text-align: center;}\ </style>\n\ <meta name=\"viewport\" content=\"width=device-width, height=device-height, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0\" />\n\ </head>\n\ <body>\n\ <h1>CiferTech</h1>\n\ <p>pick the color!</p>\n\ \n\ <form action=\"\" name=\"pick\" method=\"post\">\n\ <input type=\"color\" name=\"c\" value=\"%02d\" onchange=\"document.forms['pick'].submit();\" />\n\ <span onclick=\"document.forms['pick'].submit();\" style=\"font-size:16pt;\"> </span>\n\ </form>\n\ \n\ </body>\ </html>", hr, min % 60, sec % 60, clr ); server.send ( 200, "text/html", temp ); digitalWrite ( led, 0 ); } void handleNotFound() { digitalWrite ( led, 1 ); String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += ( server.method() == HTTP_GET ) ? "GET" : "POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for ( uint8_t i = 0; i < server.args(); i++ ) { message += " " + server.argName ( i ) + ": " + server.arg ( i ) + "\n"; } server.send ( 404, "text/plain", message ); digitalWrite ( led, 0 ); } void setNeoColor(String value){ Serial.print("Setting Neopixel..."); // converting Hex to Int int number = (int) strtol( &value[1], NULL, 16); // splitting into three parts int r = number >> 16; int g = number >> 8 & 0xFF; int b = number & 0xFF; // DEBUG Serial.print("RGB: "); Serial.print(r, DEC); Serial.print(" "); Serial.print(g, DEC); Serial.print(" "); Serial.print(b, DEC); Serial.println(" "); // setting whole strip to the given color for(int i=0; i < NUM_LEDS; i++) { strip.setPixelColor(i, strip.Color( g, r, b ) ); } // init strip.show(); Serial.println("on."); }
پرتابل کردن پروژه
برای قابل حمل کردن پروژه کنترل بی سیم ال ای دی کافیست از برد wemos به همراه شیلد شارژ باتری استفاده کنید. شیلد باتری به کاربر این امکان را می دهد که پروژه اینترنت اشیا خود را پرتابل کند، به این صورت که به اتصال شیلد به برد Wemos و اتصال باتری از کنکتور مربوط قادر خواهید بود علاوه بر راه اندازه پروژه بصورت پرتابل، باتری مد نظر را شارژ کنید. باتری لیتیومی مناسب برای این شیلد در محدوده ولتاژ ۳٫۳ تا ۴٫۲ می باشد.
جمع بندی
در انتها پس از آپلود کد در برد مورد نظر با ریست کردن برد قادر خواهید بود در سریال مانیتور آردوینو ip مربوط به صفحه وب ساخته شده را پیدا کنید و با جستجو آن در مرورگر خود می توانید به وب سرور دسترسی داشته باشید. در این آموزش با استفاده از برد ESP8266 و ماژول Neopixel Ring توانستیم بصورت real time و با استفاده از یک صفحه وب مقادیر R, G, B را در ماژول neopixel تغییر دهیم، همچنین با استفاده از برد wemos به همراه شیلد باتری، این پروژه را به یک مدار پرتابل تبدیل کنیم.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
با سلام ، اگر بخوام از منبع تغذیه ۱۲V-18A استفاده کنم به چه شکله؟برای ریسه های ۵ متری . چون داخل یه کلیپ دیدم این کارو کردن .
با سلام، در این آموزش از neopixel ring استفاده کرده ایم که این ولتاژ و جریان برای راهاندازی این ماژول مناسب نیست پس باید از ماژول های کاهنده استفاده کنید.