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.

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ı

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
#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);
}
Common Course Links
Common Course Files
Kaynaklar ve referanslar
-
BelgelendirmeESP32 Tutorial 38/55- SunFounder doc page for Bluetooth RGB LEDdocs.sunfounder.com
Dosyalar📁
Dosya mevcut değil.