Halo teman-teman, kita kembali lagi. Pada blog kali ini, kita akan melihat protokol komunikasi nirkabel jarak pendek yaitu Bluetooth, baik varian classic maupun low energy, pada ESP32. Aku akan membahas satu eksperimen untuk setiap varian Bluetooth.
Bluetooth adalah standar PAN teknologi nirkabel yang digunakan untuk bertukar data antara perangkat tetap dan seluler dalam jarak pendek. Bluetooth beroperasi pada 2,4 GHz band.
Bluetooth Classic
Bluetooth adalah teknologi berorientasi koneksi. Koneksi harus dibuat terlebih dahulu antara perangkat yang mendukung Bluetooth sebelum melakukan transfer data. Bluetooth adalah teknologi nirkabel yang menggunakan gelombang radio berenergi rendah mengirim data nirkabel antar perangkat berkemampuan Bluetooth. Bluetooth mirip seperti Wi-Fi yang beroperasi melalui gelombang radio, namun Bluetooth bisa bekerja antara dua perangkat yang diaktifkan dan tidak memerlukan tambahan peralatan jaringan seperti router atau modem, menjadikannya pilihan yang populer untuk mengirim data antar perangkat elektronik seluler dalam jarak dekat dalam jarak maksimum mencapai 50 meter.
TOOLS
ESP32
Breadboard
16x2 LCD display
Male-to-female jumper cables
Male-to-male jumper cables
Micro-to-USB data cables
LED 5mm F5
BMP280 sensor
330 Ohm resistor
Smartphone
TUTORIAL
Pertama-tama Buka Arduino IDE Kamu, dan buka File > Contoh > BluetoothSerial > SerialtoSerialBT.
2. Kita perlu melakukan pengecekan terhadap konektivitas ESP32 yang kita miliki. Untuk melakukan percobaanya silahkan upload kode berikut pada arduino kita.
#include "BluetoothSerial.h" #if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED) #error Bluetooth is not enabled! Please run `make menuconfig` to and enable it BluetoothSerial SerialBT; void setup() { Serial.begin(115200); SerialBT.begin("ESP32test"); //Bluetooth device name Serial.println("The device started, now you can pair it with bluetooth!"); } void loop() { if (Serial.available()) { SerialBT.write(Serial.read()); } if (SerialBT.available()) { Serial.write(SerialBT.read()); } delay(20); } |
3. Lalu buka serial monitor dan ketika selesai upload tekan tombol EN pada ESP32. Maka nanti akan muncul notifikasi Bluetooth seperti gambar di bawah ini :
4. Install “Serial Bluetooth Terminal” pada smartphone kita.
5. Setelah berhasil menginstall aktifkan Bluetooth di smartphone kita dan buka pengaturan Bluetooth. Pasangkan smartphone kita dengan ESP32test, Kemudian, buka aplikasi Serial Bluetooth Terminal. Lalu pilih ESP32test seperti gambar dibawah ini :
6. Klik ikon di bagian atas untuk terhubung ke ESP32. Kamu harus mendapatkan pesan "Terhubung" sesuai gambar dibawah ini :
7. Setelah itu, ketik sesuatu di aplikasi Serial Bluetooth Terminal. Misalnya, “Hello”.
8. Kamu akan langsung menerima pesan itu di Arduino IDE Serial Monitor.
9. Kamu juga dapat bertukar data antara Serial Monitor dan smartphone kamu. Ketik sesuatu di chat atas Serial Monitor dan tekan tombol "Kirim".
10. Kamu akan langsung menerima pesan itu di Aplikasi Serial Bluetooth Terminal.
Percobaan menyalakan LED dengan Bluetooth Terminal
Pada tahap ini kita akan memulai percobaan pertama yaa.. dengan mencoba menyalakan dan mematikan lampu LED menggunakan koneksi Bluetooth ke ESP32 kita. Buatlah rangakaiannya seperti pada gambar di bawah ini :
Untuk lebih jelasnya lagi, bisa lihat panduan pemasangan pinnya di bawah ini :
Pin 3V3 ESP32 -> sisi positif breadboard
Pin GND ESP32 -> sisi negatif breadboard
Pin GPIO23 ESP32 -> Kaki panjang LED
Resistor menghubungkan kaki pendek LED dengan sisi negatif breadboard
2. Setelah semuanya siap, kamu dapat melanjutkan menulis program untuk ESP32. Berikut kodenya :
Rui Santos Complete project details at https://randomnerdtutorials.com *********/ // Load libraries #include "BluetoothSerial.h" #include <OneWire.h> #include <DallasTemperature.h> // Check if Bluetooth configs are enabled #if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED) #error Bluetooth is not enabled! Please run `make menuconfig` to and enable it // Bluetooth Serial object BluetoothSerial SerialBT; // GPIO where LED is connected to const int ledPin = 25; // GPIO where the DS18B20 is connected to const int oneWireBus = 32; // Setup a oneWire instance to communicate with any OneWire devices OneWire oneWire(oneWireBus); // Pass our oneWire reference to Dallas Temperature sensor DallasTemperature sensors(&oneWire); // Handle received and sent messages String message = ""; char incomingChar; String temperatureString = ""; // Timer: auxiliar variables unsigned long previousMillis = 0; // Stores last time temperature was published const long interval = 10000; // interval at which to publish sensor readings void setup() { pinMode(ledPin, OUTPUT); Serial.begin(115200); // Bluetooth device name SerialBT.begin("ESP32"); Serial.println("The device started, now you can pair it with bluetooth!"); } void loop() { unsigned long currentMillis = millis(); // Send temperature readings if (currentMillis - previousMillis >= interval){ previousMillis = currentMillis; sensors.requestTemperatures(); temperatureString = String(sensors.getTempCByIndex(0)) + "C " + String(sensors.getTempFByIndex(0)) + "F"; SerialBT.println(temperatureString); } // Read received messages (LED control command) if (SerialBT.available()){ char incomingChar = SerialBT.read(); if (incomingChar != '\n'){ message += String(incomingChar); } else{ message = ""; } Serial.write(incomingChar); } // Check received message and control output accordingly if (message =="Y"){ digitalWrite(ledPin, HIGH); } else if (message =="N"){ digitalWrite(ledPin, LOW); } delay(20); } |
3. Setelah itu config di terminal Bluetooth aplikasi kita kalau M1 adalah Y kalau M2 adalah N. seperti gambar di bawah ini :
4. Kemudian kita jalankan program dan hasilnya menjadi seperti ini :
2. Bluetooth Low Energy (BLE)
Bluetooth Low Energy disingkat BLE, adalah varian Bluetooth yang hemat daya. Aplikasi utama BLE adalah transmisi data dalam jumlah kecil (bandwidth rendah) jarak pendek. Tidak seperti Bluetooth yang selalu aktif, BLE tetap berada dalam mode sleep terus-menerus kecuali saat koneksi dimulai. Hal ini membuatnya mengkonsumsi daya yang sangat rendah. BLE mengkonsumsi daya sekitar 100x lebih sedikit dibandingkan Bluetooth Classic (tergantung kasus penggunaan).
Dengan Bluetooth Hemat Energi, ada dua jenis perangkat: server dan klien. ESP32 dapat bertindak sebagai klien atau sebagai server.
Dalam proyek ini, kita akan menetapkan ESP32 sebagai server dan smartphone kita sebagai pemindai/klien.
TOOLS
ESP32
Micro-to-USB data cable
Smartphone
TUTORIAL
Sebelum memulai programnya kita perlu mendownload aplikasi dan Install nRF Connect for Mobile pada smartphone kita :
2. Hubungkan ESP32 dengan Laptop atau PC menggunakan kabel data micro-to-USB dan klik Select Board lalu pilih DOIT ESP32 DEVKIT V1. Buka Arduino IDE, dan buka File > Contoh > ESP32 BLE Arduino dan pilih contoh BLE_server seperti gambar dibawah ini :
3. Setelah semuanya siap, kamu dapat melanjutkan menulis program untuk ESP32. Berikut kodenya :
#include <BLEDevice.h> #include <BLEUtils.h> #include <BLEServer.h> // See the following for generating UUIDs: // https://www.uuidgenerator.net/ #define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b" #define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8" void setup() { Serial.begin(115200); Serial.println("Starting BLE work!"); BLEDevice::init("ESP32 Test"); BLEServer *pServer = BLEDevice::createServer(); BLEService *pService = pServer->createService(SERVICE_UUID); BLECharacteristic *pCharacteristic = pService->createCharacteristic( CHARACTERISTIC_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE ); pCharacteristic->setValue("Hello World says Neil"); pService->start(); // BLEAdvertising *pAdvertising = pServer->getAdvertising(); // this still is working for backward compatibility BLEAdvertising *pAdvertising = BLEDevice::getAdvertising(); pAdvertising->addServiceUUID(SERVICE_UUID); pAdvertising->setScanResponse(true); pAdvertising->setMinPreferred(0x06); // functions that help with iPhone connections issue pAdvertising->setMinPreferred(0x12); BLEDevice::startAdvertising(); Serial.println("Characteristic defined! Now you can read it in your phone!"); } void loop() { // put your main code here, to run repeatedly: delay(2000); } |
4. Setelah berhasil diupload, hasilnya dapat diperiksa melalui aplikasi nRF Connect for Mobile seperti gambar di bawah ini :
Percobaan nyalakan LED bawaan ESP32 menggunakan BLE
Kita akan memulai percobaan kedua... Pertema hubungkan ESP32 dengan Laptop atau PC menggunakan kabel data micro-to-USB dan klik Select Board lalu pilih DOIT ESP32 DEVKIT V1. Dan unggah kode berikut :
#include <BLEDevice.h> #include <BLEServer.h> #include <BLEUtils.h> #include <BLE2902.h> #define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" #define CHARACTERISTIC_UUID_TX "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" #define CHARACTERISTIC_UUID_RX "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" BLECharacteristic *pCharacteristic; bool deviceConnected = false; int txValue = 0; 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 rxValue = pCharacteristic->getValue();
if (rxValue.length() > 0) { Serial.println("===START=RECEIVE==="); Serial.print("Receiver Value: "); for (int i = 0; i < rxValue.length(); i++) { Serial.print(rxValue[i]); } Serial.println(); if (rxValue.find("1") != -1) { Serial.println("Turning ON!"); digitalWrite(LED_BUILTIN, HIGH); } else if (rxValue.find("0") != -1){ Serial.println("Turning OFF!"); digitalWrite(LED_BUILTIN, LOW); } Serial.println(); Serial.println("===END=RECEIVE==="); } }
}; void setup() { Serial.begin(9600);pinMode(LED_BUILTIN, OUTPUT);
BLEDevice::init("MyESP32");BLEServer *pServer = BLEDevice::createServer(); pServer->setCallbacks(new MyServerCallbacks());
BLEService *pService = pServer->createService(SERVICE_UUID); pCharacteristic = pService->createCharacteristic( CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY );
pCharacteristic->addDescriptor(new BLE2902());BLECharacteristic *pCharacteristic = pService->createCharacteristic( CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE );
pCharacteristic->setCallbacks(new MyCallbacks());
pService->start();
pServer->getAdvertising()->start(); Serial.println("Waiting for a client connection to notify..."); } void loop() { if (deviceConnected) { txValue = random(0,20);char txString[8]; dtostrf(txValue, 1, 2, txString); pCharacteristic->setValue(txString); pCharacteristic->notify(); Serial.println("Sent value: " + String(txString)); delay(500); } } |
2. Tekan tombol EN pada ESP32
3. Buka aplikasi nRF Connect. Jangan lupa aktifkan Bluetooth
4. Klik “SCAN”
6. Hubungkan ke ESP32 Kamu
7. Klik pada Layanan UART Nordik
8. Klik tombol unduh pada karakteristik dengan properti notifikasi untuk mendapatkan nilai yang dikirim dari ESP32
9. Klik tombol unggah pada karakteristik dengan properti tulis, ketik nilai tulis 1 atau 0 untuk menghidupkan atau mematikan LED bawaan ESP32. Jangan lupa ubah jenis inputannya menjadi Teks (UTF-8).
10. Dan hasilnya seperti yang ku Upload dibawah ini yaa :
Akhirnya selesai sudah penjelasan pada blog ini. Terimakasih semuanya telah membaca project ke-7 ini sampai habis. Sampai jumpa di project aku ke-8 ya teman-teman semua. BYE👋🏻
Comments