Komunikasi Menggunakan Modul Bluetooth HC-05

From Indonesian Research And Development Center
Jump to: navigation, search

Pendahuluan Bambang Aji, 15 April 2012[edit]

Tutorial ini akan membahas cara menggunakan modul bluetooth HC-05 untuk melakukan komunikasi antara arduino dan perangkat lain. Modul HC-05 adalah modul bluetooth yang dapat berfungsi sebagai master atau sebagai slave. Jika Anda hanya ingin menggunakan arduino sebagai slave, maka Anda dapat menggunakan modul bluetooth HC-06 karena modul tersebut secara default hanya dapat berfungsi sebagai slave. Modul HC-05 pada tutorial ini menggunakan chipset buatan Cambridge Silicon Radio (CSR) BC417143 dan telah terpasang pada breakout board. Berikut ini adalah gambar modul HC-05 beserta keterangan pinoutnya:


Arduino-hc05-pinout.jpg


Keterangan pinout di atas adalah sebagai berikut:

  • EN fungsinya untuk mengaktifkan mode AT Command Setup pada modul HC-05. Jika pin ini ditekan sambil ditahan sebelum memberikan tegangan ke modul HC-05, maka modul akan mengaktifkan mode AT Command Setup. Secara default, modul HC-05 aktif dalam mode Data.
  • Vcc adalah pin yang berfungsi sebagai input tegangan. Hubungkan pin ini dengan sumber tegangan 5V.
  • GND adalah pin yang berfungsi sebagai ground. Hubungkan pin ini dengan ground pada sumber tegangan.
  • TX adalah pin yang berfungsi untuk mengirimkan data dari modul ke perangkat lain (mikrokontroler). Tegangan sinyal pada pin ini adalah 3.3V sehingga dapat langsung dihubungkan dengan pin RX pada arduino karena tegangan sinyal 3.3V dianggap sebagai sinyal bernilai HIGH pada arduino.
  • RX adalah pin yang berfungsi untuk menerima data yang dikirim ke modul HC-05. Tegangan sinyal pada pin sama dengan tegangan sinyal pada pin TX, yaitu 3.3V. Untuk keamanan, sebaiknya gunakan pembagi tegangan jika menghubungkan pin ini dengan arduino yang bekerja pada tegangan 5V. Pembagi tegangan tersebut menggunakan 2 buah resistor. Resistor yang digunakan sebagai pembagi tegangan pada tutorial ini adalah 1K ohm dan 2K ohm. Untuk lebih jelasnya, dapat dilihat pada bagian implementasi koneksi antara modul HC-05 dan arduino UNO.
  • STATE adalah pin yang berfungsi untuk memberikan informasi apakah modul terhubung atau tidak dengan perangkat lain.

Seperti dijelaskan di atas, modul HC-05 memiliki dua mode kerja yaitu mode AT Command dan mode Data. Modul HC-05 menggunakan mode Data secara default. Berikut ini adalah keterangan untuk kedua mode tersebut:

  • AT Command. Pada mode ini, modul HC-05 akan menerima instruksi berupa perintah AT Command. Mode ini dapat digunakan untuk mengatur konfigurasi modul HC-05. Perintah AT Command yang dikirimkan ke modul HC-05 menggunakan huruf kapital dan diakhiri dengan karakter CRLF (\r\n atau 0x0d 0x0a dalam heksadesimal).
  • Data. Pada mode ini, modul HC-05 dapat terhubung dengan perangkat bluetooth lain dan mengirimkan serta menerima data melalui pin TX dan RX. Konfigurasi koneksi serial pada mode ini menggunakan baudrate: 9600 bps, data: 8 bit, stop bits: 1 bit, parity: None, handshake: None. Adapun password default untuk terhubung dengan modul HC-05 pada mode Data adalah 0000 atau 1234.

Berikut ini adalah contoh menggunakan mode AT Command pada modul HC-05 untuk mengatur password yang akan digunakan ketika modul tersebut melakukan pairing ke perangkat lain seperti ponsel, tablet atau komputer:

  • Langkah ini menggunakan adapter FTDI (USB to Serial). Anda dapat pula menggunakan adapter lainnya, namun kemungkinan Anda perlu melakukan penyesuaian. Hubungkan adapter FTDI dengan modul HC-05 sesuai dengan skema berikut ini (namun jangan hubungkan pin Vcc dari adapter FTDI ke modul HC-05):


Arduino-hc05-ftdi.png


  • Sebelum menghubungkan pin Vcc adapter FTDI ke modul HC-05, terlebih dahulu tekan dan tahan tombol yang berada pada modul HC-05 sambil menghubungkan pin Vcc pada FTDI ke Vcc pada modul HC-05. Hal tersebut untuk mengaktifkan mode AT Command pada modul HC-05. Jika Anda modul HC-05 berada pada mode AT Command, maka LED yang berada pada modul tersebut akan berkedip setiap 2 detik.
  • Selanjutnya, gunakan serial monitor pada IDE arduino atau screen, putty dan lain sebagainya untuk berkomunikasi dengan modul HC-05. Atur kecepatan koneksi serial dengan nilai 38400 bps dan atur juga agar setiap perintah yang dikirimkan diakhiri dengan karakter CRLF.
  • Setelah itu, periksa apakah koneksi antara modul HC-05 dan komputer sudah terhubung dengan baik dengan memasukkan perintah AT pada serial monitor/screen/putty.
  • Untuk mengganti password default yang digunakan untuk pairing antara modul HC-05 dan perangkat bluetooth lainnya, gunakan perintah (ganti nilai 4444 sesuai dengan password yang ingin Anda gunakan) AT+PSWD=4444. Berikut ini adalah contoh sesi AT Command menggunakan serial monitor pada arduino IDE:


Arduino-hc05-at command.png

Implementasi[edit]

Berikut ini adalah skema koneksi antara arduino UNO dan modul HC-05:


Arduino-hc05-uno.png


Resistor pembagi tegangan pada skema di atas fungsinya untuk menurunkan tegangan sinyal yang dikirim dari pin Tx pada arduino ke pin Rx pada modul HC-05. Untuk menghitung nilai resistor yang digunakan, digunakan hukum Ohm seperti ini:

Vout = Vin * (R2 / (R2 + R1))

Jika nilai resistor R1 adalah 1K Ohm dan nilai resistor R2 adalah 2K Ohm, maka hasil perhitungan menggunakan rumus di atas adalah:

Vout = 5 * (2 / (2 + 1))
     = 5 * (2/3)
     = 3.33V

Pada tutorial ini digunakan nilai resistor yang berbeda dengan nilai di atas, namun hasil perhitungannya tidak beda jauh. Nilai R1 yang digunakan pada tutorial ini adalah 4.7K Ohm, sedangkan nilai R2 adalah 9.1K Ohm. Perhitungannya adalah sebagai berikut:

Vout = 5 * (9.1 / (9.1 + 4.7))
     = 3.29V

Pada skema di atas bisa terlihat bahwa komunikasi serial antara arduino UNO dan modul HC-05 dilakukan dengan menggunakan pin hardware serial pada arduino UNO, sehingga Anda harus melepaskan koneksi antara modul HC-05 dan arduino UNO ketika mengunggah sketch. Anda dapat menggunakan pustaka SoftwareSerial sebagai alternatif agar Anda tidak perlu melepaskan dan memasang koneksi ke modul HC-05 ketika mengunggah sketch yang baru. Jika Anda menggunakan arduino Leonardo atau pro micro, maka Anda tidak perlu melepaskan koneksi antara arduino dan modul HC-05. Untuk arduino Mega, Anda cukup menghubungkan modul HC-05 ke pin Serial1 (TX1 dan RX1).

Selanjutnya akan dibahas mengenai cara mengendalikan RGB LED yang terhubung pada arduino melalui komunikasi bluetooth antara modul HC-05 dan perangkat lain misalnya ponsel, tablet atau komputer. RGB LED yang digunakan pada tutorial ini adalah tipe common anode, yaitu terdapat 1 buah kaki/pin yang terhubung dengan kutub positif sumber tegangan dan 3 buah kaki yang terhubung dengan kutub negatif sumber tegangan. Ke-3 buah kaki tersebut adalah untuk setiap warna merah, hijau dan biru. Untuk lebih jelasnya, berikut ini adalah pinout dari RGB LED tipe common anode:


Rgb led common anode.png


Karena arduino UNO beroperasi pada tegangan 5V, maka Anda perlu memasang resistor pada setiap kaki katoda. Resistor ini biasa disebut dengan istilah current limiting resistor dan nilainya dapat dihitung dengan menggunakan hukum Ohm. Perlu diperhatikan bahwa tegangan (forward voltage) pada kaki untuk tiap warna pada LED tersebut berbeda, sehingga jika menggunakan nilai resistor yang sama untuk setiap kaki pada LED tersebut, maka intensitas cahaya yang dihasilkan akan berbeda. Berikut ini adalah tegangan untuk tiap warna pada RGB LED tersebut:

  • Merah: 2V
  • Hijau: 3.2V
  • Biru: 3.2V

Sedangkan arus untuk tiap kaki katoda pada RGB LED tersebut adalah 20mA. Dengan menggunakan rumus hukum Ohm, maka berikut ini adalah nilai resistor yang digunakan untuk tiap kaki katoda pada RGB LED tersebut:

  • Merah: R = (5V - 2V) / 0.02A = 150 Ohm
  • Hijau: R = (5V - 3.2V) / 0.02A = 90 Ohm
  • Biru: R = (5V - 3.2V) / 0.02A = 90 Ohm

Nilai resistor di atas adalah nilai relatif yang dapat Anda ganti dengan nilai resistor yang lebih tinggi karena resistor dengan nilai seperti perhitungan di atas sangat jarang ditemukan (atau mungkin tidak ada walaupun Anda mungkin dapat menggunakan resistor secara paralel untuk memperoleh nilai tersebut, namun akan menambah kerumitan rangkaian yang Anda buat). Pada tutorial ini, digunakan resistor dengan nilai 150 Ohm untuk warna merah, 100 Ohm untuk warna hijau dan 100 Ohm untuk warna biru. Selanjutnya adalah membuat rangkaian antara arduino, modul bluetooth HC-05 dan RGB LED. Rangkaiannya cukup sederhana seperti ini:


Arduino-hc05-uno rgb led.png


Setelah menghubungkan rangkaian di atas, lanjutkan dengan mengunggah sketch untuk mengendalikan RGB LED tersebut. Cara yang digunakan untuk mengendalikan tiap warna pada RGB LED tersebut adalah dengan memanfaatkan Pulse Width Modulation (PWM). Untuk lebih jelasnya, Anda dapat membaca tutorial mengenai PWM pada tautan ini. Berikut ini adalah sketch untuk rangkaian di atas:

#include <SoftwareSerial.h>

#define LED_R    9                              // definisi pin yang terhubung dengan LED merah
#define LED_G   10                              // definisi pin yang terhubung dengan LED hijau
#define LED_B   11                              // definisi pin yang terhubung dengan LED biru

SoftwareSerial ss(3, 2);                        // inisialisasi pin untuk software serial (pin 3 = Rx, pin 2 = Tx)
long i;                                         // variabel untuk menerima input warna dari modul bluetooth

void setup() {
  ss.begin(9600);                               // mulai koneksi software serial menggunakan kecepatan 9600 bps

  pinMode(LED_R, OUTPUT);                       // atur pin untuk LED merah sebagai OUTPUT
  pinMode(LED_G, OUTPUT);                       // atur pin untuk LED hijau sebagai OUTPUT
  pinMode(LED_B, OUTPUT);                       // atur pin untuk LED biru sebagai OUTPUT

  digitalWrite(LED_R, HIGH);                    // atur kondisi awal LED merah (padam)
  digitalWrite(LED_G, HIGH);                    // atur kondisi awal LED hijau (padam)
  digitalWrite(LED_B, HIGH);                    // atur kondisi awal LED biru (padam)
}

void loop() {
  if (ss.available() > 0) {                     // periksa apakah ada data yang diterima dari modul bluetooth HC-05
    i = ss.parseInt();                          // isi variabel i dengan nilai integer yang diterima melalui serial bluetooth

    analogWrite(LED_R, 255 - (i >> 16));        // atur intensitas cahaya LED merah sesuai dengan nilai yang diterima
    analogWrite(LED_G, 255 - (i >> 8) & 0xff);  // atur intensitas cahaya LED hijau sesuai dengan nilai yang diterima
    analogWrite(LED_B, 255 - (i & 0xff));       // atur intensitas cahaya LED biru sesuai dengan nilai yang diterima
  }
}

Jika Anda menggunakan sistem operasi Linux, maka Anda dapat menggunakan langkah-langkah berikut ini untuk mengendalikan modul bluetooth HC-05. Berikut ini adalah langkah-langkah yang digunakan untuk mengendalikan modul HC-05 yang terhubung dengan arduino dan RGB LED yang telah dibahas pada langkah di atas:

  • Pertama, pastikan bahwa bluetooth service pada sistem operasi Linux yang Anda gunakan telah aktif dengan menggunakan perintah:
# systemctl status bluetooth.service
  • Jika bluetooth service belum aktif, maka gunakan perintah berikut ini untuk mengaktifkannya:
# systemctl start bluetooth.service
  • Setelah itu gunakan perintah hciconfig untuk melihat perangkat bluetooth pada komputer yang Anda gunakan:
# hciconfig
hci0: Type: BR/EDR  Bus: USB
  BD Address: XX:XX:XX:XX:XX:XX  ACL MTU: 310:10  SCO MTU: 64:8
  DOWN
  RX bytes:7071 acl:76 sco:0 events:479 errors:0
  TX bytes:3902 acl:92 sco:0 commands:292 errors:0
  • Dari perintah di atas, bisa terlihat bahwa perangkat bluetooth tidak aktif (down). Gunakan perintah berikut untuk mengaktifkannya:
# hciconfig hci0 up
  • Selanjutnya, gunakan perintah sdptool search SP seperti berikut ini untuk mencari modul HC-05:
# sdptool search SP
Inquiring ...
Searching for SP on 98:D3:XX:XX:XX:XX ...
Service Name: Dev B
Service RecHandle: 0x10004
Service Class ID List:
  "Serial Port" (0x1101)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 1
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100
  • Dari informasi di atas, bisa terlihat bahwa MAC (Media Access Control) modul HC-05 adalah 98:D3:XX:XX:XX:XX. Gunakan MAC address tersebut untuk melakukan koneksi dengan modul HC-05 menggunakan aplikasi rfcomm seperti ini:
# rfcomm -AMr connect 0 98:D3:XX:XX:XX:XX
Connected /dev/rfcomm0 to 98:D3:XX:XX:XX:XX on channel 1
Press CTRL-C for hangup
  • Selanjutnya, Anda dapat menjalankan aplikasi seperti screen pada terminal lain untuk melakukan koneksi dengan modul HC-05 dengan perintah seperti ini:
% screen /dev/rfcomm0 9600
  • Setelah itu, Anda tinggal memasukkan kombinasi kode warna yang ingin Anda tampilkan pada RGB LED dalam format desimal. Misalnya, Anda ingin menampilkan warna merah yang dalam notasi hexadesimal adalah 0xff0000, maka Anda mengetikkan 16711680.
  • Anda dapat juga menggunakan skrip untuk mengatur warna pada modul HC-05 yang terhubung dengan arduino dan LED RGB. Berikut ini adalah contoh skrip python yang memanfaatkan pustaka pyserial untuk mengatur warna pada rangkaian LED RGB:
#!/bin/env python
import serial                                               # gunakan modul pyserial

with serial.Serial('/dev/rfcomm0', 9600) as s:              # inisialisasi modul pyserial dengan menggunakan kecepatan 9600 bps
    while True:                                             # perulangan agar pengguna dapat mengubah warna tanpa harus keluar dari skrip
        try:                                                # baris ini untuk penanggulangan eksepsi (exception handler)
            c = int(raw_input("[?] Warna RGB (hex): "), 0)  # variabel c akan diisi dengan input warna dari pengguna dalam format integer
            if c == 0:                                      # input berupa angka 0 berarti pengguna ingin keluar dari skrip
                break                                       # keluar dari perulangan untuk menghentikan skrip
            elif c > 0xffffff:
                print "[!] Nilai RGB tidak valid"           # jika pengguna memasukkan nilai yang tidak valid, maka tampilkan pesan kesalahan
                continue                                    # dan ulangi input nilai warna
            s.write(str(c))                                 # kirim kombinasi warna yang diinginkan pengguna ke modul HC-05

        except:                                             # jika terdapat eksepsi (exception)
            break                                           # maka cukup abaikan dan keluar dari aplikasi
  • Jika skrip tersebut dijalanakan, maka tampilannya kurang lebih seperti ini:
[?] Warna RGB (hex): 0xff0000
[?] Warna RGB (hex): 0x00ff00
[?] Warna RGB (hex): 0x0000ff
[?] Warna RGB (hex): 0x3399ff
[?] Warna RGB (hex): 0xff8000
[?] Warna RGB (hex): 0xff00ff
[?] Warna RGB (hex): 0
%
  • Hasilnya dapat dilihat pada gambar di bawah ini:


Arduino-hc05-standalone.jpg


  • Jika Anda menggunakan ponsel/tablet dengan sistem operasi android, maka Anda dapat mengunduh aplikasi blueterm dari situs googleplay.


Penutup[edit]

Modul HC-05 ini sebenarnya dapat dieksplorasi lebih jauh karena CSR (pada saat tutorial ini ditulis CSR telah diakuisisi oleh Qualcomm) sebagai pembuat chipset BC417143 pernah menyediakan SDK untuk chipset tersebut yang dikenal dengan nama Bluelab. Namun, saat ini SDK tersebut sulit untuk ditemukan. Anda dapat juga menggunakan firmware alternatif dari hasil reverse engineering yang dilakukan oleh beberapa pihak. Selain menggunakan menggunakan HC-05, Anda dapat memilih modul lain seperti modul bluetooth HM-10 atau HM-11 yang telah mendukung protokol bluetooth 4.x khususnya jika Anda tertarik untuk mengembangkan perangkat untuk kebutuhan Internet of Things (IoT). Sekian tutorial kali ini, semoga bermanfaat. Terima kasih kepada Tuhan Yang Maha Esa, Maxindo, N3 dan Anda yang telah membaca tutorial ini.


Referensi[edit]