Alvoria Neura


Kontrol Servo Dengan Bluetooth ESP32 DevKit V1

Tutorial Lengkap Kontrol Servo dengan Bluetooth pada ESP32 DevKit V1


ESP32 adalah mikrokontroler yang memiliki berbagai fitur canggih, salah satunya adalah konektivitas Bluetooth. Dengan fitur ini, kita dapat mengontrol perangkat seperti servo motor menggunakan aplikasi dari smartphone.

Peralatan yang Dibutuhkan

  • ESP32 DevKit V1
  • Servo motor (SG90/MG995 atau sejenisnya)
  • Adaptor 5V atau baterai untuk servo (jika menggunakan servo besar)
  • Kabel jumper
  • Aplikasi "Serial Bluetooth Terminal" di Android (atau aplikasi Bluetooth lain yang dapat mengirim teks serial)

Konsep Kerja

  1. ESP32 akan menggunakan Bluetooth Serial untuk menerima perintah dari smartphone.
  2. Perintah yang diterima berupa angka 0 - 180 yang menentukan sudut putaran servo.
  3. ESP32 akan membaca angka ini dan menggerakkan servo sesuai perintah.
  4. Servo akan bergerak berdasarkan sudut yang dikirim dari smartphone.

Dalam tutorial ini, kita akan menggunakan Bluetooth Classic untuk mengontrol servo motor dengan ESP32 DevKit V1. Bluetooth Classic lebih mudah digunakan dibandingkan dengan BLE (Bluetooth Low Energy) untuk komunikasi berbasis serial.

1. Menghubungkan Servo ke ESP32

Servo motor memiliki tiga kabel utama:

  • Merah → VCC (5V dari ESP32 atau sumber daya eksternal).
  • Hitam/Coklat → GND (Sambungkan ke GND ESP32).
  • Kuning/Oranye → Sinyal (Sambungkan ke GPIO ESP32).

⚠ Catatan: Jika menggunakan servo besar, lebih baik menggunakan power supply eksternal untuk menghindari kelebihan beban pada ESP32.

2. Wiring (Diagram / Skema Koneksi)

Koneksi antara modul ESP32 dan Servo sebagai berikut:

Servo Motor ESP32
VCC (Merah) 5V
GND (Hitam/Coklat) GND
Sinyal (Kuning/Oranye) Gpio 13

3. Kode Program ESP32

Kita akan menggunakan library BluetoothSerial untuk komunikasi Bluetooth dan library Servo untuk mengontrol servo.


Kode Lengkap ESP32 untuk Kontrol Servo via Bluetooth


#include <BluetoothSerial.h>
#include <Servo.h>

BluetoothSerial SerialBT; // Inisialisasi Bluetooth Serial
Servo myServo; // Inisialisasi Servo

void setup() {
    Serial.begin(115200);
    SerialBT.begin("ESP32_Servo"); // Nama Bluetooth yang akan muncul di HP
    myServo.attach(13); // Hubungkan servo ke pin 13 ESP32
    Serial.println("Bluetooth Siap! Hubungkan dengan HP.");
}

void loop() {
    if (SerialBT.available()) {
        int angle = SerialBT.parseInt(); // Baca data dari Bluetooth
        if (angle >= 0 && angle <= 180) {
            myServo.write(angle); // Putar servo ke sudut tertentu
            Serial.print("Servo bergerak ke: ");
            Serial.println(angle);
        }
    }
}

Penjelasan Kode:

  1. Mengimpor Library
    #include <BluetoothSerial.h>
    #include <Servo.h>

    • BluetoothSerial.h : Digunakan untuk komunikasi Bluetooth.
    • Servo.h : Digunakan untuk mengontrol servo.
  2. Menginisialisasi Bluetooth dan Servo
    BluetoothSerial SerialBT;
    Servo myServo;

    • SerialBT.begin("ESP32_Servo") : Memberikan nama Bluetooth ESP32.
    • myServo.attach(13) : Menghubungkan servo ke GPIO 13.
  3. Membaca Data Bluetooth dan Menggerakkan Servo
    if (SerialBT.available()) {
        int angle = SerialBT.parseInt();
        if (angle >= 0 && angle <= 180) {
            myServo.write(angle);
        }
    }

    • SerialBT.available() : Mengecek apakah ada data masuk dari Bluetooth.
    • SerialBT.parseInt() : Membaca angka yang dikirim dari smartphone.
    • myServo.write(angle) : Menggerakkan servo sesuai angka yang diterima.

4. Alternatif: Kontrol Servo dengan Bluetooth Low Energy (BLE)

Selain menggunakan Bluetooth Classic, ESP32 juga bisa dikontrol dengan BLE. Berikut adalah contoh kode sederhana menggunakan BLE:


#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#include <Servo.h>

Servo myServo;
BLEServer *pServer = nullptr;
BLECharacteristic *pCharacteristic;
bool deviceConnected = false;

#define SERVICE_UUID        "0000ffe0-0000-1000-8000-00805f9b34fb"
#define CHARACTERISTIC_UUID "0000ffe1-0000-1000-8000-00805f9b34fb"

class MyServerCallbacks : public BLEServerCallbacks {
    void onConnect(BLEServer* pServer) { deviceConnected = true; }
    void onDisconnect(BLEServer* pServer) { deviceConnected = false; }
};

class MyCallbacks : public BLECharacteristicCallbacks {
    void onWrite(BLECharacteristic *pCharacteristic) {
        std::string value = pCharacteristic->getValue();
        if (value.length() > 0) {
            int angle = atoi(value.c_str());
            if (angle >= 0 && angle <= 180) {
                myServo.write(angle);
            }
        }
    }
};

void setup() {
    Serial.begin(115200);
    myServo.attach(13);
    BLEDevice::init("ESP32_Servo_BLE");
    pServer = BLEDevice::createServer();
    pServer->setCallbacks(new MyServerCallbacks());
    BLEService *pService = pServer->createService(SERVICE_UUID);
    pCharacteristic = pService->createCharacteristic(
                        CHARACTERISTIC_UUID,
                        BLECharacteristic::PROPERTY_WRITE);
    pCharacteristic->setCallbacks(new MyCallbacks());
    pService->start();
    BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
    pAdvertising->addServiceUUID(SERVICE_UUID);
    pServer->getAdvertising()->start();
}

void loop() {}

Kesimpulan

Dalam tutorial ini, kita telah membahas cara mengontrol servo motor dengan Bluetooth menggunakan ESP32.

  • Bluetooth Classic lebih mudah digunakan untuk komunikasi serial.
  • Bluetooth Low Energy (BLE) bisa menjadi pilihan jika ingin konsumsi daya yang lebih rendah.
  • ESP32 dapat dihubungkan ke smartphone dan menerima perintah untuk menggerakkan servo ke sudut tertentu.
  • Dengan pemahaman ini, Anda bisa mengembangkan proyek lebih lanjut, seperti membuat robot lengan servo atau mobil RC berbasis Bluetooth. 🚀