ኮድ ይፈልጉ

ኢኤስፒ32 ትምህርት 38/55 - አርጂቢ ኤልኢዲን ከሞባይል ስልክዎ መቆጣጠር | SunFounder የኢኤስፒ32 አይኦቲ መማሪያ ኪት

ኢኤስፒ32 ትምህርት 38/55 - አርጂቢ ኤልኢዲን ከሞባይል ስልክዎ መቆጣጠር | SunFounder የኢኤስፒ32 አይኦቲ መማሪያ ኪት

በዚህ ትምህርት ውስጥ፣ ከSunFounder ESP32 የመማሪያ ኪት የESP32 ሞጁልን በመጠቀም RGB LED እንዴት መቆጣጠር እንደሚቻል እንመረምራለን። ከሞባይል መሣሪያዎ ትዕዛዞችን በመላክ፣ የLED ቀለምን መቀየር ወይም ሙሉ በሙሉ ማጥፋት ይችላሉ። ይህ ፕሮጀክት የESP32 አቅሞችን ይጠቀማል፣ አብሮ የተሰሩ Wi-Fi እና የብሉቱዝ ባህሪያትን ለእንከን የለሽ ግንኙነት እና ቁጥጥር ይጠቀማል።

ESP32_RGB_led_wires
ESP32_rgb_pin

RGB LED ሦስት የተለያዩ LEDs ያካትታል፡ ቀይ፣ አረንጓዴ እና ሰማያዊ፣ እነዚህም የተለያዩ ቀለሞችን ለመፍጠር ሊደባለቁ ይችላሉ። በዚህ ፕሮጀክት ውስጥ፣ RGB LEDን በትክክል እንዴት ማገናኘት እና ESP32ን ለብሉቱዝ ትዕዛዞች ምላሽ እንዲሰጥ እንዴት ማዘጋጀት እንደሚቻል ይማራሉ። ትምህርቱ ይህን ተግባር ለማሳካት አስፈላጊዎቹን የኮድ ክፍሎች ይመራዎታል (በቪዲዮ በ02:15)።

ሃርድዌር ተብራርቷል

ለዚህ ፕሮጀክት ዋና ዋና ክፍሎች ESP32 ማይክሮኮንትሮለር እና RGB LED ያካትታሉ። ESP32 አብሮ የተሰራ Wi-Fi እና ብሉቱዝ ያለው ኃይለኛ ሞጁል ነው፣ ለIoT መተግበሪያዎች ተስማሚ ያደርገዋል። በዚህ ፕሮጀክት ውስጥ፣ ከሞባይል መሣሪያ ትዕዛዞችን ለመቀበል እና RGB LEDን በዚሁ መሠረት ለመቆጣጠር እንደ አገልጋይ ይሠራል።

RGB LED አራት ፒኖች አሉት፡ አንድ የጋራ ፒን (አኖድ ወይም ካቶድ) እና ለግለሰብ ቀለሞች ሦስት ፒኖች። የጋራ ፒኑ ከኃይል ምንጭ ወይም ከመሬት ጋር ይገናኛል፣ ሌሎቹ ሦስት ፒኖች ደግሞ ጅረቱን ለመገደብ እና LEDs ን ለመጠበቅ በተቃዋሚዎች በኩል ከESP32 GPIO ፒኖች ጋር ይገናኛሉ። ይህ ዝግጅት የእያንዳንዱን ቀለም ብሩህነት በትክክል ለመቆጣጠር ያስችላል፣ ብዙ አይነት ቀለሞችን ይፈጥራል።

የዳታሼት ዝርዝሮች

አምራች SunFounder
የክፍል ቁጥር RGB LED
የጋራ ፒን አይነት የጋራ አኖድ / የጋራ ካቶድ
የፊት ቮልቴጅ (V) 2.0 - 3.2 ቪ
ከፍተኛ የፊት ጅረት (A) 20 ሚኤ
የተለመደ ጅረት (A) 15 ሚኤ
የቀለም ጥራት 8 ቢት (0-255)
ፓኬጅ በቀዳዳ / SMD

 

  • በእያንዳንዱ LED ቻናል ውስጥ ጅረትን ለመገደብ ትክክለኛ የተቃዋሚ እሴቶችን (በተለምዶ 220 ኦም) ያረጋግጡ።
  • ከማገናኘትዎ በፊት የጋራ ፒን ውቅርን (አኖድ ወይም ካቶድ) ያረጋግጡ።
  • ለእያንዳንዱ LED የሚላከውን ሲግናል በማስተካከል PWM ለድምቀት መቀነስ እና ቀለም መቀላቀል ይጠቀሙ።
  • አጭር ዑደትን ለማስቀረት በማገናኘት ጊዜ ይጠንቀቁ፤ አንድ ፒን በአንድ ጊዜ ያገናኙ።
  • ትክክለኛ ማገናኘትን ለማረጋገጥ ከተጫነ በኋላ እያንዳንዱን ቀለም በተናጠል ይሞክሩ።

የማገናኘት መመሪያዎች

ES32-38_RGB_LED-wiring

RGB LEDን ከESP32 ጋር ለማገናኘት፣ RGB LEDን በብሬድቦርድ ላይ በማስቀመጥ ይጀምሩ። ረጅሙ ፒን የጋራ ፒን ነው፣ እሱን ወደ አዎንታዊ ቮልቴጅ (ለጋራ አኖድ) ወይም ወደ መሬት (ለጋራ ካቶድ) ያገናኛሉ። የጋራ አኖድ እየተጠቀሙ ከሆነ፣ ረጅሙን ፒን በESP32 ላይ ካለው 3.3V ፒን ጋር ያገናኙ። ለጋራ ካቶድ፣ ከGND ፒን ጋር ያገናኙት።

በመቀጠል፣ ሦስት 220 ኦም ተቃዋሚዎችን ይውሰዱ እና የእያንዳንዱን ተቃዋሚ አንድ ጫፍ ከLED ተጓዳኝ RGB ፒኖች ጋር ያገናኙ። የተቃዋሚዎቹን ሌሎች ጫፎች ከESP32 GPIO ፒኖች ጋር ያገናኙ፡ የLED ቀይ ፒን ከGPIO 27፣ አረንጓዴውን ፒን ከGPIO 26፣ እና ሰማያዊውን ፒን ከGPIO 25 ጋር ያገናኙ። በመጨረሻም፣ የጋራ ፒኑ በእርስዎ ውቅር (አኖድ ወይም ካቶድ) መሠረት በትክክል መገናኘቱን ያረጋግጡ።

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

ለዚህ ፕሮጀክት ኮድ ከRGB LED ጋር የተገናኙትን ፒኖች በመግለጽ ይጀምራል። የሚከተለው ቅንጥብ ፒኖቹ እንዴት እንደሚገለጹ ያሳያል፦

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

እዚህ፣ redPingreenPin እና bluePin ለእያንዳንዱ የRGB LED ቀለም ቻናል በESP32 ላይ የተወሰኑ GPIO ቁጥሮች ተመድበዋል።

በሴትአፕ ተግባር ውስጥ፣ ብሉቱዝ ይጀመራል እና የPWM ቅንብሮች ይተገበራሉ። ይህ ቅንጥብ ይህን መጀመር ያሳያል፦

void setup() {
  Serial.begin(115200);      // የሰሪያል ወደብን ያስጀምሩ
  setupBLE();                // የብሉቱዝ BLE ን ያስጀምሩ

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

ይህ ኮድ የሰሪያል ግንኙነትን ያስጀምራል እና የብሉቱዝ ተግባርን ያዘጋጃል፣ በተመሳሳይ ጊዜ የRGB LED ፒኖችን ለቁጥጥር ከPWM ቻናሎች ጋር ያያይዛል።

በመጨረሻም፣ የሉፕ ተግባር የተቀበሉትን የብሉቱዝ መልዕክቶች ይፈትሻል እና የLED ቀለምን በዚሁ መሠረት ያስተካክላል፦

if (value == "red") {
  setColor(255, 0, 0); // ቀይ
  Serial.println("red");
}

በዚህ ክፍል ውስጥ፣ የተቀበለው እሴት "red" ከሆነ፣ LED የsetColor ተግባርን በመጠቀም ወደ ሙሉ ቀይ ብሩህነት ይቀመጣል።

ለኮዱ የተሟላ ግንዛቤ፣ ሙሉ ኮዱ ከጽሑፉ በታች የተጫነበትን የቪዲዮ ትምህርት እንዲመለከቱ ይመከራል።

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

ሁሉም ነገር ከተገናኘ እና ኮዱ ከተጫነ በኋላ፣ RGB LEDን ከሞባይል መሣሪያዎ በብሉቱዝ መቆጣጠር መቻል አለብዎት። እንደ "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 በArduino IDE ውስጥ የESP32 ቦርድ እና COM ወደብ መምረጥ
  • 15:15 የአርዱኖ ኮድ
  • 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);
}

ምንጮች እና ምንጮች

ፋይሎች📁

አንድ ፋይል የለም።