Search Code

ኢኤስፒ32 ትምህርት 47/55 - WS2812 CheerLights በMQTT በኢንተርኔት በመጠቀም | SunFounder የESP32 IoT ኪት

ኢኤስፒ32 ትምህርት 47/55 - WS2812 CheerLights በMQTT በኢንተርኔት በመጠቀም | SunFounder የESP32 IoT ኪት

በዚህ መማሪያ ውስጥ፣ ESP32 እና WS2812 LEDs በመጠቀም በMQTT በኩል በርቀት መቆጣጠር የሚቻል የተመሳሰለ የመብራት ስርዓት እንፈጥራለን። ይህ ስርዓት ብዙ ተጠቃሚዎች የመብራቶቹን ቀለም በአንድ ጊዜ እንዲቀይሩ ያስችላቸዋል፣ ይህም ቦታቸው ምንም ይሁን የተገናኘ ተሞክሮ ይፈጥራል። ፕሮጀክቱ የSunFounder ESP32 IoT ኪትን ይጠቀማል፣ ይህም የWi-Fi አቅም ያለው ኃይለኛ ማይክሮ መቆጣጠሪያን ያካትታል፣ ለIoT አፕሊኬሽኖች ተስማሚ ያደርገዋል።

WS2812_strip.ON

በቪዲዮው ውስጥ በሙሉ፣ ይህን ውጤት ለማግኘት አስፈላጊውን ዝግጅት፣ ሽቦ አያያዝ እና የኮድ አተገባበር እንመለከታለን። ተጨማሪ ማብራሪያ ከፈለጉ፣ ቪዲዮውን በተወሰኑ የጊዜ ምልክቶች (በቪዲዮ ውስጥ በmm:ss) መመልከትዎን ያረጋግጡ።

የሃርድዌር ማብራሪያ

የዚህ ፕሮጀክት ዋና ክፍሎች ESP32 ማይክሮ መቆጣጠሪያ፣ WS2812 LED ስትሪፕ እና MQTT ብሮከርን ያካትታሉ። ESP32 አብሮ የተሰራ የWi-Fi እና የብሉቱዝ አቅም ያለው ሁለገብ ማይክሮ መቆጣጠሪያ ነው፣ ይህም በቀላሉ ከበይነመረቡ ጋር እንዲገናኝ ያስችለዋል። የፕሮጀክታችን አንጎል ሆኖ ያገለግላል፣ ግንኙነቱን ያስተዳድራል እና የLED ስትሪፕን ይቆጣጠራል።

WS2812 LED ስትሪፕ በተናጠል ሊቀጣጠሉ የሚችሉ RGB LEDs ያካትታል፣ እነዚህም ብዙ አይነት ቀለሞችን ለማሳየት መቆጣጠር ይቻላል። እያንዳንዱ LED በአንድ የውሂብ መስመር በመጠቀም ማብራት ወይም ማጥፋት እና ወደ ማንኛውም ቀለም ማዘጋጀት ይቻላል፣ ይህም ለተለዋዋጭ የመብራት ውጤቶች ፍጹም ያደርገዋል። MQTT ብሮከር በተለያዩ ደንበኞች መካከል ግንኙነትን ያመቻቻል፣ ተጠቃሚዎች የLED ቀለሞችን የሚቆጣጠሩ ርዕሶችን እንዲለጥፉ እና እንዲመዘገቡ ያስችላቸዋል።

የዳታሼት ዝርዝሮች

አምራች Adafruit
የክፍል ቁጥር WS2812B
የሎጂክ/IO ቮልቴጅ 3.5 - 5.5 ቪ
የአቅርቦት ቮልቴጅ 5 ቪ
የውጤት ኤሌክትሪክ (በአንድ ቻናል) 20 ሚኤ
ከፍተኛ ኤሌክትሪክ (በአንድ ቻናል) 60 ሚኤ
የPWM ድግግሞሽ መመሪያ 400 ኸርዝ
የግቤት ሎጂክ ገደቦች 0.2Vcc (ዝቅተኛ)፣ 0.7Vcc (ከፍተኛ)
የቮልቴጅ ጠብታ / RDS(on) / ሳቹሬሽን 0.5 ቪ
የሙቀት ገደቦች የስራ ሙቀት፡ -25 እስከ 85 °C
ፓኬጅ የግለሰብ 5050 SMD
ማስታወሻዎች / ልዩነቶች በተለያዩ ርዝመቶች እና አወቃቀሮች ይገኛል

 

  • የቮልቴጅ ጠብታዎችን ለማስቀረት ለWS2812 ስትሪፕ በቂ የኃይል አቅርቦት ያረጋግጡ።
  • በESP32 እና በLED ስትሪፕ መካከል የጋራ መሬት ይጠቀሙ።
  • የሲግናል መበላሸትን ለመከላከል የውሂብ መስመሮችን አጭር ያድርጉ።
  • የቮልቴጅ ስፓይኮችን ለማለስለስ በኃይል አቅርቦቱ ላይ ካፓሲተር (1000μF) መጠቀምን ያስቡ።
  • የሲግናል ነጸብራቅን ለመከላከል በውሂብ መስመሩ ላይ ተገቢ ተከላካዮችን ይጠቀሙ።
  • የLED ስትሪፕን አጠቃላይ የኤሌክትሪክ ፍሰት ያስተውሉ፤ አስፈላጊ ሲሆን ውጫዊ ኃይል ይጠቀሙ።

የሽቦ አያያዝ መመሪያዎች

ESP32ን ከWS2812 LED ስትሪፕ ጋር ለማገናኘት፣ የኃይል አቅርቦቱን በማገናኘት ይጀምሩ። ከLED ስትሪፕ የሚመጣውን ቀይ ሽቦ ከ5V የኃይል ምንጭ እና ጥቁር ሽቦውን ከመሬት ጋር ያገናኙ። በመቀጠል፣ ከWS2812 ስትሪፕ የሚመጣውን የውሂብ መስመር (ቢጫ ሽቦ) በESP32 ላይ ካለው ፒን 14 ጋር ያገናኙ። ESP32 እንዲሁ ከLED ስትሪፕ ጋር ተመሳሳይ መሬት መጠቀሙን ያረጋግጡ።

የኃይል እና የውሂብ ግንኙነቶችን ካዘጋጁ በኋላ፣ ESP32ን ለፕሮግራም አወጣጥ ማይክሮ ዩኤስቢ ኬብል በመጠቀም ከኮምፒውተርዎ ጋር ያገናኙ። በፕሮግራም አወጣጥ ጊዜ ግንኙነት ለመመስረት ESP32 መብራቱ መብራቱ መሆኑን ማረጋገጥ ያስፈልግዎታል። አንዴ ሽቦዎቹ ከተገናኙ፣ ኮዱን መስቀል እና ዝግጅቱን መሞከር ይችላሉ።

esp32-47-cheer-light-wiring

የኮድ ምሳሌዎች እና ማብራሪያ

ኮዱ ለWi-Fi እና MQTT ተግባር አስፈላጊ የሆኑ ቤተ-መጻሕፍትን በማካተት ይጀምራል። መለያዎቹ ssid እና password የWi-Fi ምስክርነቶችዎን ለማከማቸት ያገለግላሉ፣ mqtt_server ደግሞ የMQTT ብሮከርን አድራሻ ይይዛል።

const char* ssid = "SSID";
const char* password = "PASSWORD";
const char* mqtt_server = "mqtt.cheerlights.com";

በመቀጠል፣ የተደገፉትን የCheerLights ቀለሞች እና ተጓዳኝ RGB እሴቶቻቸውን በድርድር በመጠቀም እንገልጻለን። ይህ ፕሮግራሙ በተጠቃሚ ግቤት ላይ በመመስረት የቀለም ቅንብሮችን በቀላሉ እንዲደርስበት ያስችለዋል።

String colorName[] = {"red", "pink", "green", "blue", "cyan", "white", "warmwhite", "oldlace", "purple", "magenta", "yellow", "orange"};
int colorRGB[][3] = { 255, 0, 0,  // "red"
                      255, 192, 203,  // "pink" ...};

setup() ተግባር ተከታታይ ግንኙነትን ያስጀምራል፣ የWi-Fi ግንኙነትን ያዘጋጃል እና የMQTT ደንበኛን ያዘጋጃል። እንዲሁም የLED ስትሪፕን ይጀምራል።

void setup() {
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  pixels.begin();
  pixels.show(); 
}

ዋናው ሉፕ የMQTT ግንኙነትን ያለማቋረጥ ይፈትሻል እና የLED ቀለሞችን የሚቆጣጠሩ ገቢ መልዕክቶችን ያስኬዳል። የcallback() ተግባር በተመዘገበው ርዕስ ላይ መልዕክት ሲደርስ ይቀሰቀሳል።

ማሳያ / ምን እንደሚጠበቅ

ሁሉም ነገር ከተዘጋጀ እና ኮዱ ከተሰቀለ በኋላ፣ መልዕክቶችን ወደ MQTT ርዕስ በመላክ የWS2812 LEDs ቀለም መቀየር መቻል አለብዎት። ሌላ ተጠቃሚ ቀለሙን ከቀየረ፣ ሁሉም የተገናኙ መሳሪያዎች ለውጡን በአንድ ጊዜ ያንጸባርቃሉ። እንደ የተገላቢጦሽ ፖላሪቲ ወይም ተገቢ ያልሆነ ግንኙነት ያሉ ሊሆኑ የሚችሉ ችግሮችን ይጠንቀቁ፣ እነዚህም LEDs በትክክል እንዳይሰሩ ሊከለክሉ ይችላሉ (በቪዲዮ ውስጥ በmm:ss)።

የቪዲዮ የጊዜ ምልክቶች

  • 00:00 መጀመሪያ
  • 2:00 መግቢያ
  • 3:48 የሰነድ ገጽ
  • 6:33 የሽቦ አያያዝ ተብራርቷል
  • 7:35 የአርዱኖ ኮድ ተብራርቷል
  • 15:03 የESP32 ቦርድ እና የCOMP ወደብ በአርዱኖ IDE መምረጥ
  • 16:46 የቺርላይትስ ማሳያ

ምስሎች

WS2812_strip.ON
WS2812_strip.ON
esp32-47-cheer-light-wiring
esp32-47-cheer-light-wiring
848-ESP32 Tutorial 47/55- Arduino code for cheer light
ቋንቋ: C++
/*********
  :ref: https://randomnerdtutorials.com/esp32-mqtt-publish-subscribe-arduino-ide/
  https://docs.sunfounder.com/projects/kepler-kit/en/latest/iotproject/5.mqtt_pub.html
*********/

#include <WiFi.h>
#include <PubSubClient.h>
//#include <Wire.h>
#include <Adafruit_NeoPixel.h>

// Replace the next variables with your SSID/Password combination
const char* ssid = "SSID";
const char* password = "PASSWORD";

// Add your MQTT Broker address:
const char* mqtt_server = "mqtt.cheerlights.com";
const char* unique_identifier = "sunfounder-client-sdgvsasdda";

WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
int value = 0;


// Define the supported CheerLights colors and their RGB values
String colorName[] = {"red", "pink", "green", "blue", "cyan", "white", "warmwhite", "oldlace", "purple", "magenta", "yellow", "orange"};

int colorRGB[][3] = { 255,   0,   0,  // "red"
                      255, 192, 203,  // "pink"
                        0, 255,   0,  // "green"
                        0,   0, 255,  // "blue"
                        0, 255, 255,  // "cyan"
                      255, 255, 255,  // "white"
                      255, 223, 223,  // "warmwhite"
                      255, 223, 223,  // "oldlace"
                      128,   0, 128,  // "purple"
                      255,   0, 255,  // "magenta"
                      255, 255,   0,  // "yellow"
                      255, 165,   0}; // "orange"

// init rgb strip 
#define LED_PIN 13
#define NUM_LEDS 8

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  Serial.begin(115200);

  // wifi default settings
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);

  // rgb strip begin
  pixels.begin();
  pixels.show(); 

}

void setup_wifi() {
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* message, unsigned int length) {
  Serial.print("Message arrived on topic: ");
  Serial.print(topic);
  Serial.print(". Message: ");
  String messageTemp;

  for (int i = 0; i < length; i++) {
    Serial.print((char)message[i]);
    messageTemp += (char)message[i];
  }
  Serial.println();

  // If a message is received on the topic, you will check this message.
  // Changes the output state according to the message
  if (String(topic) == "cheerlights") {
    Serial.print("Changing color to ");
    Serial.println(messageTemp);
    setColor(messageTemp);
  }
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect(unique_identifier)) {
      Serial.println("connected");
      // Subscribe
      client.subscribe("cheerlights");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

void setColor(String color) {
  // Loop through the list of colors to find the matching color
  for (int colorIndex = 0; colorIndex < 12; colorIndex++) {
    if (color == colorName[colorIndex]) {
      // Set the color of each NeoPixel on the strip
      for (int pixel = 0; pixel < NUM_LEDS; pixel++) {
        pixels.setPixelColor(pixel, pixels.Color (colorRGB [colorIndex][0], colorRGB [colorIndex][1], colorRGB [colorIndex][2]));
      }
      pixels.show();
    }
  }
}


void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
}

ምንጮች እና ምንጮች

ፋይሎች📁

አንድ ፋይል የለም።