Search Code

Koyarwar ESP32 54/55 - Saita Launin WS2812 LED Strip ta hanyar Wifi | Kayan Koyon IoT na ESP32 na SunFounder

Koyarwar ESP32 54/55 - Saita Launin WS2812 LED Strip ta hanyar Wifi | Kayan Koyon IoT na ESP32 na SunFounder

A cikin wannan koyawa, za mu koyi yadda ake sarrafa launi na tsiri na LED WS2812 RGB ta amfani da microcontroller na ESP32 akan Wi-Fi. Ta hanyar amfani da mai zaɓar launi, za ka iya zaɓar launuka daban-daban daga na'urar ka ta hannu ko kwamfuta kuma aika wannan bayanin zuwa tsiri na LED. Wannan aikin yana nuna iyawar ESP32, yana ba da damar mu'amala mara matsala tare da hasken LED ta hanyar yanar gizo.

ESP32-54-movile-screen-main

Microcontroller na ESP32 yana da Wi-Fi da Bluetooth, yana sa ya zama zaɓi mai amfani don aikace-aikacen IoT. A cikin wannan aikin, za mu mayar da hankali kan aikin Wi-Fi don sarrafa tsiri na LED. Masu amfani za su iya zaɓar launuka a hankali, suna ƙirƙirar ƙwarewa mai ban sha'awa. Don ƙarin haske kan wannan aikin, tabbatar da duba bidiyon a (a cikin bidiyo a 00:00).

Kayan Aiki Da Aka Bayyana

Abubuwan farko na wannan aikin sun haɗa da microcontroller na ESP32 da tsiri na LED WS2812. ESP32 microcontroller ne mai ƙarfi tare da damar Wi-Fi da aka gina a ciki, yana ba da damar sadarwa mara waya da sarrafawa.

Tsiri na LED WS2812 ya ƙunshi LEDs na RGB waɗanda ake iya magance su daban-daban, yana ba ka damar saita launi na kowane LED da kansa. Kowane LED ya ƙunshi da'irar sarrafawa da LED na RGB a cikin fakiti ɗaya, wanda ke sauƙaƙa haɗin waya da sarrafa LEDs da yawa.

Cikakkun Bayanai na Datasheet

Mai ƙirƙira Worldsemi
Lambar sashi WS2812B
Wutar Logic/IO 3.5–5.3 V
Wutar samarwa 5 V
Fitowar wutar (kowane tashar) 20 mA
Kololuwar wutar (kowane tashar) 60 mA
Jagorar mitar PWM 400 Hz
Ƙofofin ma'aunin shigarwa 0.3 × VDD (ƙasa), 0.7 × VDD (sama)
Ragewar wutar / RDS(on) / cikawa 0.5 V
Iyakokin zafi –40 zuwa +80 °C
Fakiti 5050 SMD
Bayanan kula / bambance-bambance Akwai a cikin tsayi da tsari daban-daban.

 

  • Tabbatar da samar da wutar da ta dace don guje wa lalata LEDs.
  • Yi amfani da ƙasa gama gari tsakanin ESP32 da tsiri na LED.
  • Ka gajarta layukan bayanai don hana lalacewar sigina.
  • Yi la'akari da ƙara capacitor (1000 µF) a kan samar da wutar don kwanciyar hankali.
  • Yi amfani da resistor (470 Ω) akan layin bayanai don ingancin sigina.

Umarnin Haɗin Waya

ESP32-12-WS2812-wiring

Don haɗa ESP32 zuwa tsiri na LED WS2812, haɗa abubuwan kamar haka: Na farko, haɗa fil 5V na tsiri na LED zuwa fitowar 5V na ESP32. Na gaba, haɗa fil na ƙasa (GND) na tsiri na LED zuwa fil GND akan ESP32. A ƙarshe, haɗa fil na bayanai na tsiri na LED (yawanci ana lakafta shi da DI ko Data In) zuwa fil GPIO 13 akan ESP32. Tabbatar cewa duk haɗin suna da aminci don tabbatar da aiki mai kyau.

A cikin bidiyon, an ambaci hanyoyin haɗin waya daban-daban a taƙaice, amma saitin da aka bayyana anan shine tsarin da aka ba da shawarar don ingantaccen aiki (a cikin bidiyo a 03:00).

Misalan Lamba & Jagora

Lambar ta fara da haɗa ɗakunan karatu da ake buƙata don sarrafa tsiri na LED WS2812 da saita uwar garken yanar gizo. An ayyana fil na LED a matsayin LED_PIN kuma an saita adadin LEDs a cikin tsiri tare da NUM_LEDS.

#define LED_PIN 13 // Tsiri na LED NeoPixel
#define NUM_LEDS 8 // Adadin LEDs
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800); 

Wannan ɗan guntun yana fara ɗakin karatu na NeoPixel kuma yana saita tsiri na LED akan fil ɗin da aka ƙayyade. Abun Adafruit_NeoPixel, strip, shine abin da za ka yi amfani da shi don sarrafa launukan LED.

Na gaba, lambar tana fara Wi-Fi kuma tana saita uwar garken yanar gizo don sarrafa buƙatun masu shigowa. An ayyana SSID da kalmar sirri don hanyar sadarwa, yana ba da damar ESP32 ya haɗa zuwa Wi-Fi.

const char *ssid = "your_SSID";
const char *password = "your_PASSWORD";
WebServer server(80);

A cikin wannan ɗan guntun, maye gurbin your_SSID da your_PASSWORD da ainihin bayanan shiga Wi-Fi ɗinka. Wannan haɗin yana ba da damar ESP32 ya sadar da na'urori akan hanyar sadarwa ɗaya, yana ba da damar sarrafa tsiri na LED daga nesa.

Aikin farko don canza launin LED shine setColor(), wanda ke zagaya kowane LED kuma yana saita launinsa bisa ga zaɓaɓɓun ƙimar RGB.

void setColor() {
  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, valueR, valueG, valueB); // Saita launi na LED na i-th
    strip.show(); // Sabunta tsiri na LED tare da sabbin launuka
    delay(10); // Jira milliseconds 10
  }
}

Wannan aikin yana tabbatar da cewa an sabunta kowane LED a cikin tsiri tare da zaɓaɓɓen launi. Jinkirin yana ba da damar LEDs su canza launi a hankali. Yayin da kake mu'amala da yanar gizon, za a kira wannan aikin don nuna zaɓin launinka.

Nuni / Abin Da Za Ka Yi Tsammani

ESP32-54-movile-screen-1
ESP32-54-movile-screen-t-2

Lokacin da aka gama saitin, ya kamata ka iya shiga hanyar yanar gizo ta hanyar adireshin IP na ESP32. Za ka ga mai zaɓar launi wanda zai ba ka damar zaɓar kowane launi, wanda za a aika shi zuwa tsiri na LED. Idan ESP32 ya rasa haɗin Wi-Fi, tsiri zai yi walƙiya da launin faɗakarwa, yana nuna matsalar (a cikin bidiyo a 14:30).

Matsalolin gama gari sun haɗa da wayoyi marasa daidaito, waɗanda zasu iya sa LEDs kada su haskaka, ko amfani da haɗin SSID/kalmar sirri mara daidai wanda ke hana ESP32 haɗawa da hanyar sadarwa. Koyaushe ka sake duba haɗin kai da bayanan shiga.

Lokutan Bidiyo

  • 00:00 Fara
  • 2:01 Gabatarwa ga aikin
  • 3:09 Takardu
  • 3:47 Bayanin launi RGB
  • 7:47 Wayoyi
  • 8:40 Bayanin lambar Arduino don WS2812 tare da WIFI
  • 19:35 Zaɓin allo na ESP32 da tashar COM a cikin Arduino IDE
  • 21:17 Gwajin sarrafa tsiri na LED akan wifi

Hotuna

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
Harshe: 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  
}

Albarkatun da kuma shafukan da za a duba

Babu kayan aiki tukuna.

Fayiloli📁

Babu fayiloli da ake da su.