Search Code

ESP32 Упатство 38/55 - Контролирање на RGB LED од вашиот мобилен телефон | SunFounder's ESP32 IoT Learning kit

ESP32 Упатство 38/55 - Контролирање на RGB LED од вашиот мобилен телефон | SunFounder's ESP32 IoT Learning kit

Во ова упатство, ќе истражиме како да контролираме RGB LED користејќи ESP32 модул од SunFounder ESP32 комплетот за учење. Со испраќање команди од вашиот мобилен уред, можете да ја промените бојата на LED-от или целосно да го исклучите. Овој проект ги искористува можностите на ESP32, користејќи ги вградените Wi-Fi и Bluetooth функции за беспрекорна поврзаност и контрола.

ESP32_RGB_led_wires
ESP32_rgb_pin

RGB LED-от се состои од три поединечни LED диоди: црвена, зелена и сина, кои можат да се мешаат за да создадат различни бои. Во овој проект, ќе научите како правилно да го поврзете RGB LED-от и да го програмирате ESP32 да одговара на Bluetooth команди. Упатството исто така ќе ве води низ потребните кодни компоненти за да ја постигнете оваа функционалност (во видеото на 02:15).

Објаснување на хардверот

Примарните компоненти за овој проект вклучуваат ESP32 микроконтролер и RGB LED. ESP32 е моќен модул со вграден Wi-Fi и Bluetooth, што го прави идеален за IoT апликации. Во овој проект, тој ќе дејствува како сервер за примање команди од мобилен уред и соодветно контролирање на RGB LED-от.

RGB LED-от има четири пина: еден заеднички пин (или анода или катода) и три пина за поединечните бои. Заедничкиот пин се поврзува или со изворот на напојување или со земја, додека другите три пина се поврзуваат со GPIO пиновите на ESP32 преку отпорници за да се ограничи струјата и да се заштитат LED диодите. Оваа поставка овозможува прецизна контрола на осветленоста на секоја боја, создавајќи широк опсег на бои.

Детали од техничката спецификација

Производител SunFounder
Број на дел RGB LED
Тип на заеднички пин Заедничка анода / Заедничка катода
Напон напред (V) 2.0 - 3.2 V
Максимална струја напред (A) 20 mA
Типична струја (A) 15 mA
Резолуција на боја 8 бита (0-255)
Пакет Преку дупка / SMD

 

  • Осигурете соодветни вредности на отпорниците (обично 220 Ом) за да ја ограничите струјата низ секој LED канал.
  • Проверете ја конфигурацијата на заедничкиот пин (анода или катода) пред поврзување.
  • Користете PWM за затемнување и мешање на бои со прилагодување на сигналот испратен до секоја LED диода.
  • Бидете внимателни со поврзувањето за да избегнете кратки споеви; поврзете еден пин истовремено.
  • Тестирајте ја секоја боја поединечно по поставувањето за да потврдите правилно поврзување.

Инструкции за поврзување

ES32-38_RGB_LED-wiring

За да го поврзете RGB LED-от со ESP32, започнете со поставување на RGB LED-от на breadboard. Подолгиот пин е заедничкиот пин, кој ќе го поврзете или со позитивниот напон (за заедничка анода) или со земја (за заедничка катода). Ако користите заедничка анода, поврзете го долгиот пин со 3.3V пинот на ESP32. За заедничка катода, поврзете го со GND пинот.

Следно, земете три 220 Ом отпорници и поврзете го едниот крај на секој отпорник со соодветните RGB пинови на LED-от. Поврзете ги другите краеви на отпорниците со GPIO пиновите на ESP32: поврзете го црвениот пин на LED-от со GPIO 27, зелениот пин со GPIO 26, и синиот пин со GPIO 25. Конечно, осигурете дека заедничкиот пин е соодветно поврзан според вашата конфигурација (анода или катода).

Примери на код и објаснување

Кодот за овој проект започнува со дефинирање на пиновите поврзани со RGB LED-от. Следниот извадок покажува како се декларираат пиновите:

const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;

Овде, redPin, greenPin и bluePin се доделени на специфични GPIO броеви на ESP32 за секој канал на боја на RGB LED-от.

Во функцијата setup, Bluetooth-от се иницијализира и се применуваат PWM поставките. Овој извадок ја демонстрира оваа иницијализација:

void setup() {
  Serial.begin(115200);      // Иницијализирај го серискиот порт
  setupBLE();                // Иницијализирај го Bluetooth BLE

  ledcAttach(redPin, freq, resolution);
  ledcAttach(greenPin, freq, resolution);
  ledcAttach(bluePin, freq, resolution);
}

Овој код ја иницијализира сериската комуникација и ја поставува Bluetooth функционалноста додека ги прикачува RGB LED пиновите на PWM канали за контрола.

Конечно, функцијата loop проверува за примени Bluetooth пораки и соодветно ја прилагодува бојата на LED-от:

if (value == "red") {
  setColor(255, 0, 0); // Црвена
  Serial.println("red");
}

Во овој дел, ако примената вредност е "red", LED-от ќе се постави на целосна црвена осветленост користејќи ја функцијата setColor.

За целосно разбирање на кодот, се препорачува да го погледнете видео упатството каде што целиот код е вчитан под статијата.

Демонстрација / Што да очекувате

Откако сè е поврзано и кодот е поставен, треба да можете да го контролирате RGB LED-от од вашиот мобилен уред преку Bluetooth. Со испраќање команди како "red", "green", "blue" итн., ќе видите како LED-от ги менува боите соодветно. Ако испратите "LED_off", RGB LED-от ќе се исклучи. Проверете го серискиот монитор за какви било пораки за дебагирање за да потврдите дека командите се примаат правилно (во видеото на 10:45).

Временски ознаки на видеото

  • 00:00 Почеток
  • 1:59 Што е RGB LED?
  • 6:01 Објаснување на RGB бојата
  • 10:01 Страница со документација
  • 11:19 Објаснување на жиците
  • 13:34 Избор на ESP32 плочка и COM порта во Arduino IDE
  • 15:15 Arduino код
  • 18:02 Демонстрација на контролирање на RGB LED преку вашиот телефон

Images

ESP32_rgb_pin
ESP32_rgb_pin
ESP32_RGB_led_wires
ESP32_RGB_led_wires
ES32-38_RGB_LED-wiring
ES32-38_RGB_LED-wiring
839-ESP32 Tutorial 38/55- Arduino code for controlling RGB LED using bluetooth app
Language: C++
#include "BLEDevice.h"
#include "BLEServer.h"
#include "BLEUtils.h"
#include "BLE2902.h"

// Define RGB LED pins
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;

// Define PWM frequency and resolution
const int freq = 5000;
const int resolution = 8;

// Define the Bluetooth device name
const char *bleName = "ESP32_Bluetooth";

// Define the received text and the time of the last message
String receivedText = "";
unsigned long lastMessageTime = 0;

// Define the UUIDs of the service and characteristics
#define SERVICE_UUID "8785d8b3-9d23-473b-aee5-3fabe2ba9583"
#define CHARACTERISTIC_UUID_RX "b2bcd13b-aab6-4660-92ae-40abf6941fce"
#define CHARACTERISTIC_UUID_TX "4219d86a-d701-4fd2-bd84-04db50f70fe2"

// Define the Bluetooth characteristic
BLECharacteristic *pCharacteristic;

void setup() {
  Serial.begin(115200);      // Initialize the serial port
  setupBLE();                // Initialize the Bluetooth BLE

  ledcAttach(redPin, freq, resolution);
  ledcAttach(greenPin, freq, resolution);
  ledcAttach(bluePin, freq, resolution);
}

void loop() {
  // When the received text is not empty and the time since the last message is over 1 second
  // Send a notification and print the received text
  if (receivedText.length() > 0 && millis() - lastMessageTime > 1000) {
    Serial.print("Received message: ");
    Serial.println(receivedText);
    pCharacteristic->setValue(receivedText.c_str());
    pCharacteristic->notify();
    receivedText = "";
  }

  // Read data from the serial port and send it to BLE characteristic
  if (Serial.available() > 0) {
    String str = Serial.readStringUntil('\n');
    const char *newValue = str.c_str();
    pCharacteristic->setValue(newValue);
    pCharacteristic->notify();
  }
}

// Define the BLE server callbacks
class MyServerCallbacks : public BLEServerCallbacks {
  // Print the connection message when a client is connected
  void onConnect(BLEServer *pServer) {
    Serial.println("Connected");
  }
  // Print the disconnection message when a client is disconnected
  void onDisconnect(BLEServer *pServer) {
    Serial.println("Disconnected");
  }
};

// Define the BLE characteristic callbacks
class MyCharacteristicCallbacks : public BLECharacteristicCallbacks {
  void onWrite(BLECharacteristic *pCharacteristic) {
    std::string value = std::string(pCharacteristic->getValue().c_str());
    if (value == "led_off") {
      setColor(0, 0, 0); // turn the RGB LED off
      Serial.println("RGB LED turned off");
    } else if (value == "red") {
      setColor(255, 0, 0); // Red
      Serial.println("red");
    }
    else if (value == "green") {
      setColor(0, 255, 0); // green
      Serial.println("green");
    }
    else if (value == "blue") {
      setColor(0, 0, 255); // blue
      Serial.println("blue");
    }
    else if (value == "yellow") {
      setColor(255, 150, 0); // yellow
      Serial.println("yellow");
    }
    else if (value == "purple") {
      setColor(80, 0, 80); // purple
      Serial.println("purple");
    }
  }
};

// Initialize the Bluetooth BLE
void setupBLE() {
  BLEDevice::init(bleName);                        // Initialize the BLE device
  BLEServer *pServer = BLEDevice::createServer();  // Create the BLE server
  // Print the error message if the BLE server creation fails
  if (pServer == nullptr) {
    Serial.println("Error creating BLE server");
    return;
  }
  pServer->setCallbacks(new MyServerCallbacks());  // Set the BLE server callbacks

  // Create the BLE service
  BLEService *pService = pServer->createService(SERVICE_UUID);
  // Print the error message if the BLE service creation fails
  if (pService == nullptr) {
    Serial.println("Error creating BLE service");
    return;
  }
  // Create the BLE characteristic for sending notifications
  pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY);
  pCharacteristic->addDescriptor(new BLE2902());  // Add the descriptor
  // Create the BLE characteristic for receiving data
  BLECharacteristic *pCharacteristicRX = pService->createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE);
  pCharacteristicRX->setCallbacks(new MyCharacteristicCallbacks());  // Set the BLE characteristic callbacks
  pService->start();                                                 // Start the BLE service
  pServer->getAdvertising()->start();                                // Start advertising
  Serial.println("Waiting for a client connection...");              // Wait for a client connection
}

void setColor(int red, int green, int blue) {
  // For common-anode RGB LEDs, use 255 minus the color value
  ledcWrite(redPin, red);
  ledcWrite(greenPin, green);
  ledcWrite(bluePin, blue);
}

Resources & references

Files📁

No files available.