Search Code

ESP32 оқулығы 38/55 - RGB жарықдиодын мобильді телефоныңыздан басқару | SunFounder компаниясының ESP32 IoT оқу жинағы

ESP32 оқулығы 38/55 - RGB жарықдиодын мобильді телефоныңыздан басқару | SunFounder компаниясының ESP32 IoT оқу жинағы

Бұл оқулықта біз SunFounder ESP32 оқу жинағындағы ESP32 модулін пайдаланып RGB жарықдиодын қалай басқаруға болатынын қарастырамыз. Мобильді құрылғыңыздан пәрмендер жіберу арқылы жарықдиодтың түсін өзгертуге немесе оны толығымен өшіруге болады. Бұл жоба ESP32 мүмкіндіктерін пайдаланып, кірістірілген Wi-Fi және Bluetooth мүмкіндіктерін үздіксіз қосылу мен басқару үшін қолданады.

ESP32_RGB_led_wires
ESP32_rgb_pin

RGB жарықдиоды үш жеке жарықдиодтан тұрады: қызыл, жасыл және көк, оларды араластыру арқылы әртүрлі түстер жасауға болады. Бұл жобада сіз RGB жарықдиодын дұрыс қосу және ESP32-ні Bluetooth пәрмендеріне жауап беруге бағдарламалауды үйренесіз. Оқулық сонымен қатар осы функционалдылыққа қол жеткізу үшін қажетті код компоненттері арқылы сізді бағыттайды (бейнеде 02:15).

Аппараттық құрал түсіндірмесі

Бұл жобаның негізгі компоненттеріне ESP32 микроконтроллері және RGB жарықдиоды кіреді. ESP32 - кірістірілген Wi-Fi және Bluetooth бар қуатты модуль, бұл оны IoT қолданбалары үшін өте қолайлы етеді. Бұл жобада ол мобильді құрылғыдан пәрмендерді қабылдау және RGB жарықдиодын сәйкесінше басқару үшін сервер ретінде әрекет етеді.

RGB жарықдиодының төрт түйреуіші бар: бір ортақ түйреуіш (анод немесе катод) және жеке түстер үшін үш түйреуіш. Ортақ түйреуіш қуат көзіне немесе жерге қосылады, ал қалған үш түйреуіш токты шектеу және жарықдиодтарды қорғау үшін резисторлар арқылы ESP32 GPIO түйреуіштеріне қосылады. Бұл қондырғы әр түстің жарықтығын дәл басқаруға мүмкіндік береді, осылайша кең ауқымды түстер жасайды.

Деректер парағының мәліметтері

Өндіруші SunFounder
Бөлшек нөмірі RGB жарықдиоды
Ортақ түйреуіш түрі Ортақ анод / Ортақ катод
Тура кернеу (V) 2.0 - 3.2 В
Максималды тура ток (A) 20 мА
Типтік ток (A) 15 мА
Түс ажыратымдылығы 8 бит (0-255)
Қаптама Тесік арқылы / SMD

 

  • Әр жарықдиод арнасы арқылы токты шектеу үшін дұрыс резистор мәндерін (әдетте 220 Ом) қамтамасыз етіңіз.
  • Қосу алдында ортақ түйреуіш конфигурациясын (анод немесе катод) тексеріңіз.
  • Әр жарықдиодқа жіберілетін сигналды реттеу арқылы күңгірттеу және түс араластыру үшін PWM қолданыңыз.
  • Қысқа тұйықталуды болдырмау үшін сымдарды қосуда абай болыңыз; бір уақытта бір түйреуішті қосыңыз.
  • Дұрыс қосуды растау үшін орнатудан кейін әр түсті жеке сынаңыз.

Қосу нұсқаулары

ES32-38_RGB_LED-wiring

RGB жарықдиодын ESP32-ге қосу үшін алдымен RGB жарықдиодын макет тақтасына орналастырыңыз. Ұзын түйреуіш - ортақ түйреуіш, оны оң кернеуге (ортақ анод үшін) немесе жерге (ортақ катод үшін) қосасыз. Егер сіз ортақ анодты қолдансаңыз, ұзын түйреуішті ESP32-дегі 3.3V түйреуішіне қосыңыз. Ортақ катод үшін оны GND түйреуішіне қосыңыз.

Әрі қарай, үш 220 Ом резисторды алып, әр резистордың бір ұшын жарықдиодтың сәйкес RGB түйреуіштеріне қосыңыз. Резисторлардың басқа ұштарын ESP32 GPIO түйреуіштеріне қосыңыз: жарықдиодтың қызыл түйреуішін GPIO 27-ге, жасыл түйреуішін GPIO 26-ға және көк түйреуішін GPIO 25-ке қосыңыз. Соңында, ортақ түйреуіштің конфигурацияңызға (анод немесе катод) сәйкес дұрыс қосылғанын қамтамасыз етіңіз.

Код мысалдары және түсіндірме

Бұл жобаның коды RGB жарықдиодына қосылған түйреуіштерді анықтаудан басталады. Төмендегі үзінді түйреуіштердің қалай жарияланғанын көрсетеді:

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

Мұнда redPin, greenPin және bluePin RGB жарықдиодының әр түс арнасы үшін ESP32-дегі нақты GPIO нөмірлеріне тағайындалған.

Орнату функциясында Bluetooth инициализацияланады және PWM параметрлері қолданылады. Бұл үзінді осы инициализацияны көрсетеді:

void setup() {
  Serial.begin(115200);      // Сыртқы портты инициализациялау
  setupBLE();                // Bluetooth BLE инициализациялау

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

Бұл код сериялық байланысты инициализациялайды және Bluetooth функционалдылығын орнатады, сонымен қатар RGB жарықдиод түйреуіштерін басқару үшін PWM арналарына қосады.

Соңында, цикл функциясы қабылданған Bluetooth хабарламаларын тексереді және жарықдиод түсін сәйкесінше реттейді:

if (value == "red") {
  setColor(255, 0, 0); // Қызыл
  Serial.println("red");
}

Бұл бөлімде, егер қабылданған мән "red" болса, жарықдиод setColor функциясын пайдаланып толық қызыл жарықтыққа орнатылады.

Кодты толық түсіну үшін мақаланың астында толық код жүктелген бейне оқулықты көру ұсынылады.

Демонстрация / Не күтуге болады

Барлығы қосылып, код жүктелгеннен кейін, сіз RGB жарықдиодын мобильді құрылғыңыздан Bluetooth арқылы басқара алуыңыз керек. "red", "green", "blue" сияқты пәрмендерді жіберу арқылы жарықдиодтың түстері сәйкесінше өзгеретінін көресіз. Егер "LED_off" жіберсеңіз, RGB жарықдиоды өшеді. Пәрмендердің дұрыс қабылданып жатқанын растау үшін кез келген қате жөндеу хабарламаларын тексеру үшін сериялық мониторды тексеруді ұмытпаңыз (бейнеде 10:45).

Бейне уақыт белгілері

  • 00:00 Бастау
  • 1:59 RGB LED дегеніміз не?
  • 6:01 RGB түсі түсіндірілді
  • 10:01 Құжаттама беті
  • 11:19 Сым қосылымы түсіндірілді
  • 13:34 Arduino IDE-де ESP32 платасын және COM портын таңдау
  • 15:15 Arduino коды
  • 18:02 RGB LED-ді телефон арқылы басқаруды көрсету

Суреттер

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
Тіл: 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);
}

Ресурстар мен сілтемелер

Файлдар📁

Файлдар жоқ.