Bincika Lambar

Koyarwar ESP32 47/55 - WS2812 CheerLights ta amfani da MQTT ta hanyar Intanet | SunFounder's ESP32 IoT kit

Koyarwar ESP32 47/55 - WS2812 CheerLights ta amfani da MQTT ta hanyar Intanet | SunFounder's ESP32 IoT kit

A cikin wannan koyawa, za mu ƙirƙiri tsarin haske mai aiki tare ta amfani da ESP32 da WS2812 LEDs wanda za a iya sarrafa shi daga nesa ta hanyar MQTT. Wannan tsarin yana ba da damar masu amfani da yawa su canza launin fitilu a lokaci guda, suna ƙirƙirar ƙwarewa mai haɗin kai ba tare da la'akari da wuri ba. Aikin yana amfani da kayan aikin SunFounder ESP32 IoT, wanda ya ƙunshi microcontroller mai ƙarfi tare da damar Wi-Fi, wanda ya dace da aikace-aikacen IoT.

WS2812_strip.ON

A cikin bidiyon, za mu bi ta hanyar shirye-shiryen da suka dace, haɗin waya, da aiwatar da lambar don cimma wannan tasirin. Idan kana buƙatar ƙarin bayani, tabbatar da duba bidiyon a takamaiman lokutan (a cikin bidiyo a mm:ss).

Bayanin Kayan Aiki

Babban abubuwan wannan aikin sun haɗa da microcontroller na ESP32, WS2812 LED strip, da kuma MQTT broker. ESP32 microcontroller ne mai yawan amfani wanda ke da damar Wi-Fi da Bluetooth, yana ba shi damar haɗawa da Intanet cikin sauƙi. Yana aiki a matsayin kwakwalwar aikinmu, yana sarrafa sadarwa da sarrafa LED strip.

WS2812 LED strip ya ƙunshi LEDs na RGB waɗanda ake iya magance su daban-daban, waɗanda za a iya sarrafa su don nuna launuka da yawa. Kowane LED za a iya kunna shi ko kashe shi kuma a saita shi ga kowane launi ta amfani da layin bayanai guda ɗaya, yana sa ya dace da tasirin haske mai ƙarfi. MQTT broker yana sauƙaƙe sadarwa tsakanin abokan ciniki daban-daban, yana ba da damar masu amfani su buga da biyan kuɗi ga batutuwa waɗanda ke sarrafa launukan LED.

Cikakkun Bayanai na Datasheet

Manufacturer Adafruit
Part number WS2812B
Logic/IO voltage 3.5 - 5.5 V
Supply voltage 5 V
Output current (per channel) 20 mA
Peak current (per channel) 60 mA
PWM frequency guidance 400 Hz
Input logic thresholds 0.2Vcc (low), 0.7Vcc (high)
Voltage drop / RDS(on) / saturation 0.5 V
Thermal limits Operating temperature: -25 to 85 °C
Package Individual 5050 SMD
Notes / variants Available in various lengths and configurations

 

  • Tabbatar da isasshen wutar lantarki don WS2812 strip don guje wa raguwar ƙarfin lantarki.
  • Yi amfani da ƙasa gama gari tsakanin ESP32 da LED strip.
  • Ka tsare layukan bayanai gajere don hana lalacewar sigina.
  • Yi la'akari da amfani da capacitor (1000μF) a kan wutar lantarki don daidaita hawan ƙarfin lantarki.
  • Yi amfani da resistors masu dacewa akan layin bayanai don hana tunani na sigina.
  • Ka kula da jimlar yawan wutar da LED strip ke ja; yi amfani da wutar waje lokacin da ya cancanta.

Umarnin Haɗin Waya

Don haɗa ESP32 tare da WS2812 LED strip, fara da haɗa wutar lantarki. Haɗa jan waya daga LED strip zuwa tushen wutar 5V da baƙar waya zuwa ƙasa. Na gaba, haɗa layin bayanai (rawaya waya) daga WS2812 strip zuwa pin 14 akan ESP32. Tabbatar cewa ESP32 kuma an haɗa shi da ƙasa ɗaya da LED strip don kiyaye ma'anar gama gari.

Bayan kafa haɗin wutar da bayanai, haɗa ESP32 zuwa kwamfutarka ta amfani da kebul na micro USB don shirye-shirye. Kana buƙatar tabbatar da cewa ESP32 yana kunne yayin shirye-shirye don kafa haɗin. Da zarar an haɗa shi, za ka iya ci gaba da loda lambar da gwada saitin.

esp32-47-cheer-light-wiring

Misalan Lamba & Bayani

Lambar ta fara da haɗa dakunan karatu masu mahimmanci don aikin Wi-Fi da MQTT. Masu gano ssid da password ana amfani da su don adana bayanan shiga Wi-Fi naka, yayin da mqtt_server ke riƙe adireshin MQTT broker.

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

Na gaba, muna ayyana launukan CheerLights da aka tallafawa da ƙimar RGB ɗinsu ta amfani da arrays. Wannan yana ba da damar shirin samun sauƙin shiga saitunan launi bisa ga shigar da mai amfani.

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" ...};

Aikin setup() yana fara sadarwar serial, yana saita haɗin Wi-Fi, kuma yana shirya abokin ciniki na MQTT. Hakanan yana fara LED strip.

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

Babban madauki yana ci gaba da duba haɗin MQTT kuma yana sarrafa saƙonni masu shigowa waɗanda ke sarrafa launukan LED. Aikin callback() yana faruwa lokacin da aka karɓi saƙo akan batun da aka biya kuɗi.

Zanga-zanga / Abin da za a Yi Tsammani

Da zarar an kafa komai kuma an loda lambar, ya kamata ka iya canza launin WS2812 LEDs ta hanyar aika saƙonni zuwa batun MQTT. Idan wani mai amfani ya canza launi, duk na'urorin da aka haɗa za su nuna canjin a lokaci guda. Yi hattara da yuwuwar matsaloli kamar juyar da polarity ko haɗin da bai dace ba, waɗanda zasu iya hana LEDs aiki daidai (a cikin bidiyo a mm:ss).

Lokutan Bidiyo

  • 00:00 Fara
  • 2:00 Gabatarwa
  • 3:48 Shafin takardu
  • 6:33 Bayanin wayoyi
  • 7:35 Bayanin lambar Arduino
  • 15:03 Zaɓin allon ESP32 da tashar COMP a cikin Arduino IDE
  • 16:46 Nunin CheerLighs

Hotuna

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
Harshe: 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();
}

Albarkatun da kuma shafukan da za a duba

Fayiloli📁

Babu fayiloli da ake da su.