Search Code

ESP32 Eğitimi 38/55 - Mobil Telefonunuzdan RGB LED Kontrolü | SunFounder'ın ESP32 IoT Öğrenme Kiti

ESP32 Eğitimi 38/55 - Mobil Telefonunuzdan RGB LED Kontrolü | SunFounder'ın ESP32 IoT Öğrenme Kiti

Bu eğitimde, SunFounder ESP32 öğrenme kitinden bir ESP32 modülü kullanarak bir RGB LED'i nasıl kontrol edeceğimizi keşfedeceğiz. Mobil cihazınızdan komutlar göndererek LED rengini değiştirebilir veya tamamen kapatabilirsiniz. Bu proje, ESP32'nin yeteneklerini kullanarak yerleşik Wi-Fi ve Bluetooth özelliklerinden yararlanarak kesintisiz bağlantı ve kontrol sağlar.

ESP32_RGB_led_wires
ESP32_rgb_pin

RGB LED, kırmızı, yeşil ve mavi olmak üzere üç ayrı LED'den oluşur ve bunlar karıştırılarak çeşitli renkler oluşturulabilir. Bu projede, RGB LED'i doğru şekilde nasıl bağlayacağınızı ve ESP32'yi Bluetooth komutlarına yanıt verecek şekilde nasıl programlayacağınızı öğreneceksiniz. Eğitim ayrıca bu işlevselliği elde etmek için gerekli kod bileşenlerinde size rehberlik edecektir (videoda 02:15'te).

Donanım Açıklaması

Bu projenin ana bileşenleri ESP32 mikrodenetleyicisi ve RGB LED'dir. ESP32, yerleşik Wi-Fi ve Bluetooth'a sahip güçlü bir modüldür ve IoT uygulamaları için idealdir. Bu projede, bir mobil cihazdan komutları almak ve RGB LED'i buna göre kontrol etmek için bir sunucu görevi görecektir.

RGB LED'in dört pini vardır: bir ortak pin (anot veya katot) ve bireysel renkler için üç pin. Ortak pin, güç kaynağına veya toprağa bağlanırken, diğer üç pin, akımı sınırlamak ve LED'leri korumak için dirençler aracılığıyla ESP32'nin GPIO pinlerine bağlanır. Bu kurulum, her rengin parlaklığının hassas kontrolüne olanak tanıyarak geniş bir renk yelpazesi oluşturur.

Veri Sayfası Detayları

Üretici SunFounder
Parça numarası RGB LED
Ortak pin tipi Ortak anot / Ortak katot
İletim voltajı (V) 2.0 - 3.2 V
Maksimum iletim akımı (A) 20 mA
Tipik akım (A) 15 mA
Renk çözünürlüğü 8 bit (0-255)
Paket Delikli / SMD

 

  • Her LED kanalından geçen akımı sınırlamak için uygun direnç değerlerini (genellikle 220 Ohm) sağlayın.
  • Bağlamadan önce ortak pin yapılandırmasını (anot veya katot) kontrol edin.
  • Her LED'e gönderilen sinyali ayarlayarak karartma ve renk karıştırma için PWM kullanın.
  • Kısa devreleri önlemek için bağlantı konusunda dikkatli olun; her seferinde bir pini bağlayın.
  • Kurulumdan sonra doğru bağlantıyı doğrulamak için her rengi ayrı ayrı test edin.

Bağlantı Talimatları

ES32-38_RGB_LED-wiring

RGB LED'i ESP32'ye bağlamak için, RGB LED'i bir breadboard üzerine yerleştirerek başlayın. Daha uzun pin, ortak pindir ve bunu pozitif voltaja (ortak anot için) veya toprağa (ortak katot için) bağlayacaksınız. Ortak anot kullanıyorsanız, uzun pini ESP32'deki 3.3V pinine bağlayın. Ortak katot için, GND pinine bağlayın.

Ardından, üç adet 220 Ohm direnç alın ve her direncin bir ucunu LED'in ilgili RGB pinlerine bağlayın. Dirençlerin diğer uçlarını ESP32 GPIO pinlerine bağlayın: LED'in kırmızı pinini GPIO 27'ye, yeşil pini GPIO 26'ya ve mavi pini GPIO 25'e bağlayın. Son olarak, ortak pinin yapılandırmanıza (anot veya katot) göre uygun şekilde bağlandığından emin olun.

Kod Örnekleri ve Açıklama

Bu projenin kodu, RGB LED'e bağlı pinleri tanımlayarak başlar. Aşağıdaki alıntı, pinlerin nasıl bildirildiğini gösterir:

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

Burada, redPin, greenPin ve bluePin, RGB LED'in her renk kanalı için ESP32'de belirli GPIO numaralarına atanır.

Kurulum fonksiyonunda, Bluetooth başlatılır ve PWM ayarları uygulanır. Bu alıntı bu başlatmayı gösterir:

void setup() {
  Serial.begin(115200);      // Seri portu başlat
  setupBLE();                // Bluetooth BLE'yi başlat

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

Bu kod, seri iletişimi başlatır ve Bluetooth işlevselliğini kurarken RGB LED pinlerini kontrol için PWM kanallarına bağlar.

Son olarak, döngü fonksiyonu alınan Bluetooth mesajlarını kontrol eder ve LED rengini buna göre ayarlar:

if (value == "red") {
  setColor(255, 0, 0); // Kırmızı
  Serial.println("red");
}

Bu bölümde, alınan değer "red" ise, LED setColor fonksiyonu kullanılarak tam kırmızı parlaklığa ayarlanır.

Kodun tam olarak anlaşılması için, tam kodun makalenin altında yüklendiği video eğitimini izlemeniz önerilir.

Gösterim / Beklentiler

Her şey bağlandıktan ve kod yüklendikten sonra, RGB LED'i mobil cihazınızdan Bluetooth aracılığıyla kontrol edebilmelisiniz. "red", "green", "blue" gibi komutlar göndererek LED'in renklerini buna göre değiştirdiğini göreceksiniz. "LED_off" gönderirseniz, RGB LED kapanacaktır. Komutların doğru alındığını doğrulamak için seri monitördeki hata ayıklama mesajlarını kontrol ettiğinizden emin olun (videoda 10:45'te).

Video Zaman Damgaları

  • 00:00 Başlangıç
  • 1:59 RGB LED nedir?
  • 6:01 RGB Renk açıklaması
  • 10:01 Dokümantasyon sayfası
  • 11:19 Bağlantı şeması açıklaması
  • 13:34 Arduino IDE'de ESP32 kartı ve COM portu seçimi
  • 15:15 Arduino Kodu
  • 18:02 Telefonunuzla RGB LED kontrolünün gösterimi

Görseller

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

Kaynaklar ve referanslar

Dosyalar📁

Dosya mevcut değil.