Search Code

د ESP32 ټیوټوریل 54/55 - د Wifi له لارې د WS2812 LED پټې رنګ تنظیم کړئ | د SunFounder د ESP32 IoT زده کړې کټ

د ESP32 ټیوټوریل 54/55 - د Wifi له لارې د WS2812 LED پټې رنګ تنظیم کړئ | د SunFounder د ESP32 IoT زده کړې کټ

په دې ټیوټوریل کې، موږ به زده کړو چې څنګه د WS2812 RGB LED پټې رنګ د ESP32 مایکروکنټرولر په کارولو سره د وای-فای له لارې کنټرول کړو. د رنګ غوره کونکي په کارولو سره، تاسو کولی شئ له خپل ګرځنده وسیلې یا کمپیوټر څخه مختلف رنګونه وټاکئ او هغه معلومات LED پټې ته واستوئ. دا پروژه د ESP32 وړتیاوې ښیي، چې د ویب انٹرفیس له لارې د LED رڼا سره بې ساري تعامل ته اجازه ورکوي.

ESP32-54-موبایل-سکرین-اصلي

د ESP32 مایکروکنټرولر د وای-فای او بلوتوت دواړو سره سمبال دی، چې دا د IoT غوښتنلیکونو لپاره یو څو اړخیز انتخاب جوړوي. په دې پروژه کې، موږ به د LED پټې کنټرول لپاره د وای-فای فعالیت باندې تمرکز وکړو. کاروونکي به وکولی شي په متحرک ډول رنګونه غوره کړي، چې یو بصري زړه راښکونکی تجربه رامینځته کوي. د دې پروژې په اړه د اضافي روښانتیا لپاره، ډاډ ترلاسه کړئ چې په ویډیو کې ویډیو وګورئ (په ویډیو کې په 00:00).

هارډویر تشریح شوی

د دې پروژې لومړني اجزا د ESP32 مایکروکنټرولر او د WS2812 LED پټه شامل دي. ESP32 یو پیاوړی مایکروکنټرولر دی چې د جوړ شوي وای-فای وړتیاو سره، بې سیمه اړیکه او کنټرول فعالوي.

د WS2812 LED پټه د انفرادي پته وړ RGB LEDs څخه جوړه شوې ده، چې تاسو ته اجازه درکوي د هر LED رنګ په خپلواکه توګه وټاکئ. هر LED په یوه بسته کې د کنټرول سرکټ او یو RGB LED شاملوي، چې د ډیری LEDs تارونه او کنټرول ساده کوي.

ډیټاشیټ تفصیلات

جوړونکی ورلډسیمي
د برخې شمېره WS2812B
منطق/IO ولټاژ 3.5–5.3 V
د بریښنا ولټاژ 5 V
د تولید جریان (په هر چینل) 20 mA
د لوړ جریان (په هر چینل) 60 mA
د PWM فریکونسي لارښود 400 Hz
د منطق حدونه 0.3 × VDD (ټیټ)، 0.7 × VDD (لوړ)
د ولټاژ کمښت / RDS(on) / سنتریشن 0.5 V
حرارتي حدونه –40 to +80 °C
بسته 5050 SMD
یادښتونه / ډولونه په مختلفو اوږدوالیو او ترتیبونو کې شتون لري.

 

  • د LEDs د زیان رسولو څخه مخنیوي لپاره مناسب بریښنا رسول ډاډمن کړئ.
  • د ESP32 او LED پټې ترمنځ یو ګډ ځمکنی (GND) وکاروئ.
  • د سیګنال خرابیدو مخنیوي لپاره د ډیټا کرښې لنډې وساتئ.
  • د ثبات لپاره د بریښنا رسولو په اوږدو کې یو کاپاسیټر (1000 µF) اضافه کولو ته پام وکړئ.
  • د سیګنال بشپړتیا لپاره د ډیټا کرښې باندې یو ریزسټر (470 Ω) وکاروئ.

د تارونو لارښوونې

ESP32-12-WS2812-wiring

د ESP32 د WS2812 LED پټې سره د تارولو لپاره، اجزا په لاندې ډول وصل کړئ: لومړی، د LED پټې 5V پن د ESP32 د 5V آوټ پټ سره وصل کړئ. بیا، د LED پټې ځمکنی (GND) پن د ESP32 په یو GND پن سره وصل کړئ. په پای کې، د LED پټې ډیټا پن (معمولا د DI یا Data In په نوم یادېږي) د ESP32 په GPIO پن 13 سره وصل کړئ. ډاډ ترلاسه کړئ چې ټولې اړیکې خوندي دي ترڅو سم فعالیت ډاډمن شي.

په ویډیو کې، د تارولو بدیل میتودونه په لنډه توګه یاد شوي دي، مګر دلته تشریح شوی ترتیب د غوره فعالیت لپاره وړاندیز شوی تشکیل دی (په ویډیو کې په 03:00).

د کوډ مثالونه او واک ترو

کوډ د WS2812 LED پټې کنټرول او د ویب سرور تنظیم کولو لپاره د اړینو کتابتونونو په شاملولو سره پیل کیږي. د LED پن د LED_PIN په توګه تعریف شوی او د پټې کې د LEDs شمېره د NUM_LEDS سره ټاکل شوې.

#define LED_PIN 13 // NeoPixel LED پټه
#define NUM_LEDS 8 // د LEDs شمېره
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800); 

دا سنیپټ د NeoPixel کتابتون پیل کوي او LED پټه په ټاکل شوي پن باندې تنظیموي. د Adafruit_NeoPixel اعتراض، strip، هغه څه دي چې تاسو به یې د LED رنګونو کنټرول لپاره وکاروئ.

بیا، کوډ وای-فای پیل کوي او د راتلونکو غوښتنو اداره کولو لپاره یو ویب سرور تنظیموي. د شبکې SSID او پاسورډ تعریف شوي، چې ESP32 ته اجازه ورکوي چې وای-فای سره وصل شي.

const char *ssid = "ستاسو_SSID";
const char *password = "ستاسو_پاسورډ";
WebServer server(80);

په دې اقتباس کې، ستاسو_SSID او ستاسو_پاسورډ د خپلو اصلي وای-فای اسنادو سره بدل کړئ. دا اړیکه ESP32 ته دا وړتیا ورکوي چې په ورته شبکه کې له وسیلو سره اړیکه ونیسي، چې د LED پټې لیرې کنټرول ته اجازه ورکوي.

د LED رنګ بدلولو اصلي فعالیت setColor() دی، چې د هر LED له لارې تکرار کوي او د ټاکل شوي RGB ارزښتونو پر بنسټ یې رنګ ټاکي.

void setColor() {
  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, valueR, valueG, valueB); // د i-م LED رنګ وټاکئ
    strip.show(); // LED پټه د نویو رنګونو سره تازه کړئ
    delay(10); // د 10 ملی ثانیو لپاره انتظار وکړئ
  }
}

دا فعالیت ډاډ ورکوي چې په پټه کې هر LED د ټاکل شوي رنګ سره تازه کیږي. ځنډ LEDs ته اجازه ورکوي چې په اسانۍ سره رنګ بدل کړي. لکه څنګه چې تاسو د ویب انٹرفیس سره تعامل کوئ، دا فعالیت به ستاسو د رنګ انتخابونو منعکس کولو لپاره وبلل شي.

مظاهره / څه تمه وکړو

ESP32-54-موبایل-سکرین-1
ESP32-54-موبایل-سکرین-ټی-۲

کله چې تنظیم بشپړ شي، تاسو باید د ESP32 د IP پتې له لارې ویب انٹرفیس ته لاسرسی ومومئ. تاسو به د رنګ غوره کوونکی وګورئ چې تاسو ته اجازه درکوي هر رنګ غوره کړئ، کوم چې بیا به LED پټې ته واستول شي. که ESP32 د وای-فای اړیکه له لاسه ورکړي، پټه به د خبرداري رنګ سره روښانه شي، چې ستونزه په ګوته کوي (په ویډیو کې په ۱۴:۳۰ کې).

عامې ستونزې عبارت دي له ناسم تارونه، چې کولی شي د LED څراغونو نه روښانه کیدو لامل شي، یا د ناسم SSID/پاسورډ ترکیبونو کارول چې ESP32 له شبکې سره د نښلیدو مخه نیسي. تل خپلې اړیکې او اسناد دوه ځله وګورئ.

د ویډیو وخت نښې

  • ۰۰:۰۰ پیل
  • ۲:۰۱ د پروژې پیژندنه
  • ۳:۰۹ اسناد
  • ۳:۴۷ د RGB رنګ تشریح
  • ۷:۴۷ تارونه
  • ۸:۴۰ د WIFI سره د WS2812 لپاره د Arduino کوډ تشریح
  • ۱۹:۳۵ په Arduino IDE کې د ESP32 بورډ او COM پورټ غوره کول
  • ۲۱:۱۷ د وای-فای له لارې د LED پټې کنټرول ډیمو

Images

ESP32-12-WS2812-wiring
ESP32-12-WS2812-wiring
ESP32-54-movile-screen-1
ESP32-54-movile-screen-1
ESP32-54-movile-screen-t-2
ESP32-54-movile-screen-t-2
ESP32-54-movile-screen-main
ESP32-54-movile-screen-main
855-ESP32 Tutorial 54/55- Arduino code Set WS2812 LED Strip Color over Wifi
Language: C++
/*
 * Control RGB LED over wifi using ESP32
 * 
 full video instrucions https://youtu.be/J_UFHk_T9aE
📚⬇️ Download and resource page https://robojax.com/RJT687
 * Written by Ahmad Shamshiri on Dec 18, 2023
 * 
 * Watch video instruciton for this video: 
 * 
 * I have combined DHT library of Adafruit with ESP8266 WebServer both links 
 * Adafruit DHT library on GitHub: https://github.com/adafruit/DHT-sensor-library
 * and 
 * ESP8266 on GitHub : https://github.com/esp8266/Arduino
 * 
   Copyright (c) 2015, Majenko Technologies
   All rights reserved.

   Redistribution and use in source and binary forms, with or without modification,
   are permitted provided that the following conditions are met:

 * * Redistributions of source code must retain the above copyright notice, this
     list of conditions and the following disclaimer.

 * * Redistributions in binary form must reproduce the above copyright notice, this
     list of conditions and the following disclaimer in the documentation and/or
     other materials provided with the distribution.

 * * Neither the name of Majenko Technologies nor the names of its
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.

   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
   ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <Adafruit_NeoPixel.h> // Include the Adafruit NeoPixel library

#define LED_PIN 13 // NeoPixel LED strip
#define NUM_LEDS 8 // Number of LEDs
// Create an instance of the Adafruit_NeoPixel class
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800); 


//initial color of LED strip
int valueR = 178;//from 0 to 255 for Red
int valueG = 27;//from 0 to 255 for Green
int valueB = 84;//from 0 to 255 for Blue

bool showSerialData = false;
String theColorR, theColorG, theColorB;
String theColor ="ff0000";

#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>

const char *ssid = "dars";
const char *password = "hhhhhhhhhhh";

WebServer server(80);

void showColorPicker() {
  String page = "<!DOCTYPE html>\n";
  page +="<html>\n";
  page +="<body>\n";
  page +="<div style=\"zoom: 300%;\">\n";
  page +="<h2>Robojax RGB Color picker</h2>\n";
  page +="<p id=\"result\"></p>\n";
  page +="<form action=\"/color\">\n";
  page +="  <label for=\"favcolor\">Select your favorite color:</label>\n";
  page +="  <input type=\"color\" id=\"favcolor\" name=\"favcolor\" value=\"#";  
  page += theColor;
  page +="\"><br><br>\n";
  page +="   <input type=\"submit\" value=\"Set Color\" />\n";  
  page +="</form> \n</div>\n";
  page +="</body>\n";
  page +="</html>\n";
 
  server.send(200,  "text/html", page);


}

//from https://stackoverflow.com/questions/44683071/convert-string-as-hex-to-hexadecimal
uint64_t StrToHex(const char* str)
{
  return (uint64_t) strtoull(str, 0, 16);
}

void getColor(){

 // server.send(200, "text/plain", message);

  if(server.argName(0) == "favcolor")
  {
    String newColor = String(server.arg(0));//get the GET ardument 0 and convert it to string
    theColor = newColor.substring(1);//remove the # sybmot from the begining of color like #B2a48d
    theColorR = newColor.substring(1, 3);//extract B2 from  #B2a48d for example
    theColorG = newColor.substring(3, 5);//extract a4 from  #B2a48d for example
    theColorB = newColor.substring(5, 7);//extract 8d from  #B2a48d for example
    
    valueR = StrToHex(theColorR.c_str());//convert String to HEX for R
    valueG = StrToHex(theColorG.c_str());//convert String to HEX for G
    valueB = StrToHex(theColorB.c_str());//convert String to HEX for B    
    if(showSerialData)
    {
      Serial.print("valueR: ");
      Serial.println(valueR);
      Serial.print("valueG: ");
      Serial.println(valueG);
      Serial.print("valueB: ");
      Serial.println(valueB );  
    }
   
  }

  showColorPicker();//make sure the color picker is shown
  //server.send(200, "text/plain", message);

}


void setColor()
{
  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, valueR, valueG, valueB); // Set the color of the i-th LED to red
    strip.show(); // Update the LED strip with the new colors
    delay(10); // Wait for 100 milliseconds
  }
}//

void noConnection()
{
   for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, 255, 45, 0); // Set the color of the i-th LED to red
    strip.show(); // Update the LED strip with the new colors
    delay(50); // Wait for 100 milliseconds
  }

  delay(200);
   for (int i = NUM_LEDS-1; i >=0; i--) {
    strip.setPixelColor(i, 0, 255, 180); // Set the color of the i-th LED to red
    strip.show(); // Update the LED strip with the new colors
    delay(50); // Wait for 100 milliseconds
  }    
}

void handleNotFound() {
  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);

}

void setup_wifi() {
  delay(10);
  // We start by connecting to a WiFi network
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    noConnection();
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("Open: http://");
  Serial.print(WiFi.localIP());
  Serial.println(" to read temperature");

  if (MDNS.begin("robojaxRGB")) {
    Serial.println("MDNS responder started");
  }

}

void setup(void) {

  Serial.begin(115200);

  strip.begin(); // Initialize the NeoPixel strip
  strip.show(); // Set initial color to black

  setup_wifi();

  server.on("/", showColorPicker);//show the main page with color picker
  //server.on("/color", setColor);//changes teh color on WS2812 RGB LED


  server.on("/color", HTTP_GET, getColor);  



  server.on("/inline", []() {
    server.send(200, "text/plain", "this works as well");
  });
  server.onNotFound(handleNotFound);
  server.begin();
  Serial.println("HTTP server started");
}

void loop(void) {
  //Robojax.com 
    while (WiFi.status() != WL_CONNECTED) {
      setup_wifi();
    }

  server.handleClient();
  //showColorPicker();
  setColor();
  delay(300);// change this to larger value (1000 or more) if you don't need very often reading
  // Robojax.com code for ESP32 and DHT11 DHT22  
}

Resources & references

No resources yet.

Files📁

No files available.