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.
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

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
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
/*
* 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
}
Common Course Links
Common Course Files
Albarkatun da kuma shafukan da za a duba
Babu kayan aiki tukuna.
Fayiloli📁
Babu fayiloli da ake da su.