آردوینو اینترنت اشیا IOT برد ESP8266 برد Nodemcu برد ویموس Wemos

کنترل بی سیم ال ای دی نئوپیکسل با وب سرور آردوینو WebServer Arduino

کنترل بی سیم نئوپیکسل بوسیله WebServer
نوشته شده توسط CiferTech

ال ای دی نئوپیکسل نوعی جذاب و پرکاربرد است. با مصرف انرژی بسیار ناچیز قابلیت تولید میلیون‌ها نور رنگی را دارند. تا به حال برای شما این سوال پیش آمده که چطور مقادیر R ,G و B را در ال ای دی‌های نئوپیکسل بصورت real time یا بلادرنگ تغییر دهید!؟ خب جواب شما این آموزش است، در این آموزش اقدام به کنترل بی سیم ال ای دی با استفاده از برد nodemcu و ساخت یک وب سرور میکنیم. مقادیر نام برده را بوسیله یک صفحه در مرورگر خود تغییر داده و هر رنگی که تمایل داریم را تولید کنیم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

راه اندازی ال ای دی نئوپیکسل با آردوینو وب سرور - دیجی اسپارک

 


نقش وب سرور


وب سرور ها برنامه هایی هستند که مسئولیت آن ها قبول کردن درخواست های Http است که از سمت کاربران ارسال می شود، وب سرور ها در پاسخ اطلاعاتی را ارسال می کنند که ما معمولا به نام صفحات Html می‌شناسیم. خب حالا فرض کنیم که در مرورگر https://digispark.ir را سرچ کردیم، اتفاقی که می‌افتد به این شکل است که مرورگر شما یک درخواست به دامنه‌ای با نام digispark.ir ارسال می‌کند. در حالت عادی زمانی که شما آدرس سایتی را در مرورگر جست و جو می‌کنید از حروف انگلیس استفاده می‌کنید یعنی کلماتی قابل فهم برای انسان اما در واقع برای ورود به یک سایت باید از طریق ip آن اقدام کنید، اینجاست که مفهومی به نام DNS وارد کار می‌شود، پس در واقع زمانی که شما URL سایتی را جستجو می کنید مرورگر از طریق سرویس DNS، آی پی مربوط را پیدا می‌کند و درخواستی ارسال خواهد کرد.

وب سرور ESP32: کنترل خروجی ها بصورت سخت افزاری و نرم افزاری

 


شناخت برد 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 خود داشته باشیم و مقادیر مربوط به رنگ های اصلی یعنی قرمز، آبی، سبز را در مقیاس ۰ تا ۲۵۵ تغییر دهیم، همچنین یک پلات رنگ در وب سرور وجود دارد که می توانیم بطور دیداری رنگ مورد نظر را انتخاب کنیم.

کنترل بی سیم ال ای دی نئوپیکسل با وب سرور آردوینو - دیجی اسپارک

 


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


برد nodemcu

برد wemos

حلقه نئوپیکسل

وسایل مورد نیاز کنترل بیسیم نئوپیکسل Neopixel - دیجی اسپارک

 


کتابخانه های مورد نیاز


برای اجرای پروژه کنترل بی سیم ال ای دی ابتدا در نرم افزار Arduino IDE اقدام به نصب کتابخانه مرجع Adafruit_NeoPixel می پردازیم. مراحل زیر را دنبال کنید.

  1. این مسیر را دنبال کنید Sketch Include Library > Manage Libraries
  2. کلمه Adafruit_NeoPixel را جستجو کنید.
  3. کتابخانه را نصب کنید.

کنترل نئوپیکسل بوسیله WebServer

 


اتصالات ال ای دی نئوپیکسل


  • اتصالات برای برد nodemcu

مطابق جدول و تصویر زیر اتصالات را در برد nodemcu برقرار کنید.

کنترل بی سیم ال ای دی نئوپیکسل با برد Nodemcu - دیجی اسپارک

 

  • اتصالات برای برد wemos D1 mini

مطابق جدول و تصویر زیر اتصالات را در برد Wemos برقرار کنید.

کنترل بی سیم ال ای دی نئوپیکسل با برد ویموس 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\
    &nbsp;<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\
    &nbsp;<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 و اتصال باتری از کنکتور مربوط قادر خواهید بود علاوه بر راه اندازه پروژه بصورت پرتابل، باتری مد نظر را شارژ کنید. باتری لیتیومی مناسب برای این شیلد در محدوده ولتاژ ۳٫۳ تا ۴٫۲ می باشد.

کنترل بی سیم ال ای دی نئوپیکسل با برد ویموس Wemos - دیجی اسپارک

 


جمع بندی


در انتها پس از آپلود کد در برد مورد نظر با ریست کردن برد قادر خواهید بود در سریال مانیتور آردوینو ip مربوط به صفحه وب ساخته شده را پیدا کنید و با جستجو آن در مرورگر خود می توانید به وب سرور دسترسی داشته باشید. در این آموزش با استفاده از برد ESP8266 و ماژول Neopixel Ring توانستیم بصورت real time و با استفاده از یک صفحه وب مقادیر R, G, B را در ماژول neopixel تغییر دهیم، همچنین با استفاده از برد wemos به همراه شیلد باتری، این پروژه را به یک مدار پرتابل تبدیل کنیم.

 

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

 

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

 

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

CiferTech

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

۲ دیدگاه

  • با سلام ، اگر بخوام از منبع تغذیه ۱۲V-18A استفاده کنم به چه شکله؟برای ریسه های ۵ متری . چون داخل یه کلیپ دیدم این کارو کردن .

    • با سلام، در این آموزش از neopixel ring استفاده کرده ایم که این ولتاژ و جریان برای راه‌اندازی این ماژول مناسب نیست پس باید از ماژول های کاهنده استفاده کنید.