Search Code

Tutorial ESP32 54/55 - Deji Midabka LED Strip-ka WS2812 ee Wifi-ka | Qalabka Barashada IoT-ga ee ESP32 ee SunFounder

Tutorial ESP32 54/55 - Deji Midabka LED Strip-ka WS2812 ee Wifi-ka | Qalabka Barashada IoT-ga ee ESP32 ee SunFounder

Cashiyaradan, waxaan baran doonaa sida loo xakameeyo midabka xariijimta LED-ga WS2812 RGB iyadoo la isticmaalayo ESP32 microcontroller oo ku shaqeeya Wi-Fi. Adigoo isticmaalaya midab-dooro, waxaad ka dooran kartaa midabyo kala duwan mobilkaaga ama desktop-ka oo aad u dirtaa macluumaadkaas xariijimta LED-ga. Mashruucani wuxuu muujinayaa awoodaha ESP32, isagoo u oggolaanaya isdhexgal aan kala go 'lahayn oo leh iftiinka LED iyada oo loo marayo interface web.

ESP32-54-movile-screen-main

ESP32 microcontroller wuxuu ku qalabaysan yahay Wi-Fi iyo Bluetooth labadaba, taasoo ka dhigaysa doorasho kala duwan oo ku habboon codsiyada IoT. Mashruucan, waxaan diiradda saari doonnaa shaqada Wi-Fi si loo xakameeyo xariijimta LED-ga. Isticmaalayaashu waxay awood u yeelan doonaan inay si firfircoon u doortaan midabyo, iyagoo abuuraya khibrad muuqaal ah oo soo jiidasho leh. Si aad u faahfaahin dheeri ah u hesho mashruucan, hubi inaad daawato fiidiyowga (fiidiyowga 00:00).

Qalabka La Sharxay

Qaybaha aasaasiga ah ee mashruucan waxaa ka mid ah ESP32 microcontroller iyo xariijimta LED-ga WS2812. ESP32 waa microcontroller awood badan oo leh awoodo Wi-Fi oo ku dhex jira, taasoo u oggolaanaysa isgaarsiin iyo xakameyn wireless ah.

Xariijimta LED-ga WS2812 waxay ka kooban tahay LED-yo RGB oo si gaar ah loo cinwaan karo, taasoo kuu oggolaanaysa inaad midab kasta oo LED ah si madax-bannaan u dejiso. LED kastaa wuxuu ku darayaa wareeg xakameyn ah iyo LED RGB ah oo ku jira baakad keliya, taasoo fududaynaysa fiilooyinka iyo xakamaynta LED-yo badan.

Faahfaahinta Xogta

Soo saaraha Worldsemi
Nambarka qaybta WS2812B
Korantada Logic/IO 3.5–5.3 V
Korantada sahayda 5 V
Korantada soo-saarka (kanal kasta) 20 mA
Korantada ugu sarreysa (kanal kasta) 60 mA
Hagaha soo noqnoqoshada PWM 400 Hz
Heerarka caqabadaha gelinta 0.3 × VDD (hoose), 0.7 × VDD (sare)
Hoos u dhaca korantada / RDS(on) / dheregsanaanta 0.5 V
Xadka kulaylka –40 ilaa +80 °C
Baakad 5050 SMD
Qoraallo / noocyo kala duwan Waxaa laga heli karaa dherer iyo qaabab kala duwan.

 

  • Hubi sahayda korantada ee saxda ah si aad uga hortagto dhaawaca LED-yada.
  • Isticmaal dhul (ground) wadaag ah oo u dhexeeya ESP32 iyo xariijimta LED-ga.
  • Ka ilaali khadadka xogta inay gaaban yihiin si looga hortago hoos u dhaca signal-ka.
  • Tixgeli ku darista capacitor (1000 µF) oo ku xiran sahayda korantada si xasillooni loo helo.
  • Isticmaal resistor (470 Ω) oo ku yaal khadka xogta si loo ilaaliyo saxnaanta signal-ka.

Tilmaamaha Fiilooyinka

ESP32-12-WS2812-wiring

Si aad ugu xidho ESP32 xariijimta LED-ga WS2812, ku xidh qaybaha sida soo socota: Marka hore, ku xidh pin-ka 5V ee xariijimta LED-ga soo-saarka 5V ee ESP32. Marka xigta, ku xidh pin-ka dhulka (GND) ee xariijimta LED-ga pin-ka GND ee ESP32. Ugu dambeyntii, ku xidh pin-ka xogta ee xariijimta LED-ga (badanaa waxaa lagu calaamadeeyaa DI ama Data In) GPIO pin 13 ee ESP32. Hubi in dhammaan xiriirada ay adag yihiin si loo hubiyo shaqada saxda ah.

Fiidiyowga, habab kale oo fiilooyin ah ayaa si kooban loo sheegay, laakiin qaabka halkan lagu sharaxay ayaa ah qaabka lagu taliyay ee lagu shaqeeyo si fiican (fiidiyowga 03:00).

Tusaalooyinka Koodhka & Socodsiinta

Koodhku wuxuu ku bilaabmaa inuu ku daro maktabadaha lagama maarmaanka ah si loo xakameeyo xariijimta LED-ga WS2812 iyo dejinta server-ka web-ka. Pin-ka LED-ga waxaa lagu qeexay LED_PIN tirada LED-yada ee xariijimta waxaa lagu dejiyay NUM_LEDS.

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

Qaybtani waxay bilaabaysaa maktabadda NeoPixel waxayna dejisaa xariijimta LED-ga pin-ka la cayimay. Shayga Adafruit_NeoPixel, strip, ayaa ah midka aad u isticmaali doonto si aad u xakamayso midabada LED-ga.

Marka xigta, koodhku wuxuu bilaabayaa Wi-Fi wuxuuna dejinaayaa server web ah si uu u qabto codsiyada soo gala. SSID-ka iyo erayga sirta ah ee shabakadda ayaa la qeexay, taasoo u oggolaanaysa ESP32 inuu ku xirto Wi-Fi-ga.

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

Qaybtan, ku beddel your_SSID iyo your_PASSWORD aqoonsigaaga Wi-Fi ee dhabta ah. Xiriddu waxay u oggolaanaysaa ESP32 inuu la xiriiro aaladaha ku yaal isla shabakadda, taasoo u oggolaanaysa xakamaynta fog ee xariijimta LED-ga.

Shaqada ugu weyn ee beddelka midabka LED-ga waa setColor(), kaas oo dhex mara LED kasta oo midabkiisa u dejiya iyadoo lagu salaynayo qiimaha RGB ee la doortay.

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

Shaqadani waxay hubinaysaa in LED kasta oo ku jira xariijimta lagu cusboonaysiiyo midabka la doortay. Daahitaanku wuxuu u oggolaanayaa LED-yada inay si habsami leh u beddelaan midabka. Markaad la falgalayso interface-ka web-ka, shaqadan ayaa loo yeedhi doonaa si ay u muujiso doorashooyinkaaga midabka.

Muuujin / Waxa Lagu Filan Karaa

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

Marka hawada qaybta la sameeyay dhammaystiran tahay, waxaad awoodi doontaa inaad gasho interface-ka web-ka iyada oo loo marayo cinwaanka IP-ga ee ESP32. Waxaad arki doontaa midab-dooro kuu ogolaanaya inaad doorato midab kasta, kaas oo markaa loo diri doono xariijinta LED-ka. Haddii ESP32 uu lumiyo xiriirka Wi-Fi, xariijintu waxay ku libiqin doontaa midab digniin ah, taas oo muujinaysa dhibaatada (fiidiyowga 14:30).

Khaladaadka caadiga ah waxaa ka mid ah isku-xirnaansho khaldan, kaas oo keeni kara in LED-yada aanu shidin, ama isticmaalka isku-dhafka SSID/password-ka oo khaldan kaas oo ka hor istaagaya ESP32 inuu ku xirmaayo shabakadda. Had iyo jeer dib u hubi isku-xirnaantaada iyo aqoonsiyadaada.

Waqtiyada Fiidiyowga

  • 00:00 Bilow
  • 2:01 Hordhaca mashruuca
  • 3:09 Dukumeentiyada
  • 3:47 Midabka RGB oo la sharaxay
  • 7:47 Isku-xirnaansho
  • 8:40 Koodhka Arduino ee WS2812 oo leh WIFI oo la sharaxay
  • 19:35 Doorashada guddiga ESP32 iyo dekedda COM ee Arduino IDE
  • 21:17 Tijaabinta xakamaynta xariijinta LED-ka ee wifi-ka

Sawirro

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

Kheyraadka & Tixraacyada

Wali wax kaydsan ah oo weli ma jiro.

Faylasha📁

Fayl la'aan.