Bluetooth HC-05 AT Commands

Bluetooth adalah salah satu modul komunikasi sederhana yang dapat dibeli dengan harga relatif murah. Modul Bluetooth HC-05 dapat dengan mudah ditemukan di berbagai jejaring toko online dengan harga sekitar 50 ribu.  Sebelum membahas lebih lanjut tentang Bluetooth saya akan membahas beberapa konsep dasar Bluetooth.

Introduction

Bluetooth adalah sebuah standar teknologi nirkabel untuk komunikasi data jarak dekat. Bluetooth menggunakan frekuensi 2.4 GHz yang merupakan frekuensi bebas untuk transmit dengan batasan daya yang rendah. Standar Bluetooth mencakup banyak protokol, salah satunya adalah protokol RFCOMM. Modul Bluetooth yang umum kita jumpai ini menggunakan protokol ini. Protokol RFCOMM adalah protokol yang paling populer dalam Bluetooth karena banyaknya API yang tersedia untuk protokol ini, selain itu protokol ini, yang sering disebut serial port emulation, dapat diintegrasikan pada banyak aplikasi yang menggunakan RS-232 sebagai antarmuka komunikasinya.

Generic Bluetooth RFCOMM Modules

Setelah mengetahui beberapa konsep dasar Bluetooth, sudah waktunya untuk melihat cara kerja Bluetooth secara langsung. Untuk demonstrasi kali ini, saya mencoba dengan Bluetooth module: Tokopedia (Disclaimer: Tidak ada maksud untuk promosi).

Bluetooth
Gambar 1. Bluetooth HC 05 Module

Module Bluetooth sesuai Gambar 1 adalah modul berbasis Bluetooth chip BC417. Modul ini memiliki keluaran pin STATE, RX, TX, GND, +5V, dan EN. Untuk menggunakan modul ini, cukup koneksikan pin RX, TX, GND, dan +5V.

Pin 5V atau pin VCC di modul ini sebenarnya terhubung dengan LDO voltage regulator pada board modul Bluetooth ini. Saya coba melihat regulator yang digunakan, namun sulit menemukan datasheet dari komponen SMD ini. Sebelum saya membahas bagaimana pemrograman AT commands menggunakan Raspberry Pi, pertama saya uji coba terlebih dahulu serial port dengan Bluetooth module ini.

Koneksikan pin TX Bluetooth dengan RX Raspberry Pi, RX Bluetooth dengan TX Raspberry Pi, VCC dengan +5V Raspberry Pi dan GND dengan GND Raspberry Pi. Saya nyalakan minicom untuk membuka port serial (/dev/ttyS0) dengan baudrate 9600. Tampilan uji coba dapat dilihat pada Gambar 2.

Capture
Gambar 2. Penerimaan Serial Port via Bluetooth

AT Commands Bluetooth

Setelah berhasil komunikasi Serial, selanjutnya yang perlu dicoba adalah AT Commands, melalui AT Commands, dapat dilakukan berbagai macam konfigurasi seperti nama Bluetooth dan PIN, serta baud rate. Untuk itu saya membuat script singkat di Python untuk melaksanakan fungsi ini, sebelum mencoba script ini, pastikan Raspberry Pi sudah terinstal Python dan package PySerial (python-serial).

# apt-get install python-serial

Sebelum saya memberi source code dari AT command configuration, perlu saya tekankan bahwa untuk memasuki AT commands terdapat tiga cara, pertama memberi pin 34 pada Bluetooth Module tegangan 3.3V, jika dengan cara ini, modul akan masuk ke mode full AT commands, di mana semua AT commands dapat diakses dan baudrate dari modul adalah 38400. Cara kedua adalah menekan tombol sebelum modul menyala dan pastikan tombol tetap tertekan saat konfigurasi berlangsung (secara efektif cara ini sama dengan cara pertama), sehingga modul akan masuk dalam mode full AT command. Cara ketiga adalah setelah modul sudah menyala, tekan tombol pada modul dan tahan saat melakukan konfigurasi, modul akan memasuki mode semi AT command dimana baudrate tetap menggunakan baud rate komunikasi serial normal (9600 baud default). Jika Anda lupa baud rate komunikasi serial normal, sebaiknya program Bluetooth menggunakan full AT command mode.

# attest.py
# Sending AT commands to Bluetooth HC-05

import serial
import time

bluetooth = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=5)

bluetooth.write('AT+NAME=JosefMTD\r\n')
result = bluetooth.read(100)
print result

bluetooth.write('AT+UART=38400,0,0\r\n')
result = bluetooth.read(100)
print result

Untuk memakai program di atas, ubah “/dev/ttyS0” dengan “/dev/ttyACM0” jika Anda menggunakan PL011 Hardware UART dari Raspberry Pi, gunakan /dev/ttyS0 jika Anda menggunakan mini UART. Baudrate sesuaikan dengan baudrate modul atau masukan 38400 jika Anda ingin memasuki mode full AT command.

Untuk mengubah nama dan baudrate, modul Bluetooth dapat dikonfigurasi dalam mode Semi AT command, sehingga proses yang saya lakukan adalah menekan tombol, menjalankan script attest.py lalu melepas tombol saat program selesai berjalan.

Capture1.PNG
Gambar 3. Output dari program attest.py

Sekian dahulu post saya untuk kali ini, tinggalkan komentar jika Anda mengalami masalah setting up Bluetooth

Raspberry Pi Zero Headless Setup

Anda ingin mencoba memulai bermain dengan Raspberry Pi? Mungkin Anda memiliki permasalahan ini dalam melakukan penyetelan Raspberry Pi seperti: tidak ada monitor untuk mengonfigurasi Raspberry Pi, tidak ada keyboard untuk mengetik command, ataupun tidak ada kabel LAN. Mungkin permasalahan Anda sama seperti saya, mempunyai Raspberry Pi Zero W, yang hanya bisa diakses melalui Wireless, koneksi USB hanya dengan micro USB dan mini HDMI. Jika Anda memiliki Raspberry Pi Zero dan ingin mencoba untuk memulai bermain dengan Raspberry, silakan membaca guide ini untuk memulai instalasi Raspberry Pi Anda!

IMG_20180401_222102.jpg
Gambar 1. Raspberry Pi Zero Wireless

Instalasi Operating System Raspbian Stretch Lite

Hal yang Anda butuhkan untuk memulai adalah sebagai berikut:

  1. Raspberry Pi Zero Wireless (pastikan bukan yang Raspberry Pi tanpa WiFi)
  2. Micro SD Card (sebaiknya Class 10 agar operasi Read/Write Disk nya lebih cepat)
  3. Charger HP 2A
  4. Laptop dengan SD Card Reader (gunakan Micro-SD Adapter jika perlu)
  5. Wireless Router atau Mobile WiFi Hotspot

Hal pertama yang Anda perlu lakukan adalah masukkan SD Card ke komputer Anda, lalu format SD Card tersebut, jika Anda sudah pernah menginstalasi Raspbian sebelumnya pada SD Card tersebut dan ingin menghapusnya, Anda dapat menggunakan SD Card Formatter (sdcard.org). Sebagai perbandingan, Gambar 2 menunjukkan formatting menggunakan quick format Windows dan SD Card Formatter, Windows Formatter hanya bisa melakukan format untuk partisi F:\ di SD Card, sedangkan SD Card Formatter mampu melakukan format untuk seluruh SD Card.

Screenshot 2018-04-01 22.40.45
Gambar 2. Perbandingan format dengan Windows Formatter dan SD Card Formatter

Setelah Anda melakukan Quick Format menggunakan SD Card Formatter, Anda dapat menambahkan OS Raspbian pada SD Card. Pertama, hal yang perlu Anda lakukan adalah download ZIP file dari OS Raspbian Stretch Lite. Download dari website resmi Raspberry Pi untuk Raspbian Stretch Lite, dengan kernel Linux 4.9. Terdapat dua varian Raspbian Stretch, dengan Desktop dan Lite, Lite adalah versi tanpa GUI, sedangkan Desktop memiliki GUI sehingga dapat dihubungkan dengan monitor dan keyboard dan dipakai layaknya komputer biasa.

Setelah Anda sudah memiliki Raspbian Stretch Lite dan SD Card yang sudah di format, proses selanjutnya adalah untuk flashing Raspbian Stretch Lite pada SD Card Formatter. Cara yang paling saya suka untuk menginstalasi Raspberry Pi adalah dengan menggunakan program Etcher. Program ini dapat diunduh dari website Etcher.io, program ini mudah dipakai dan ringan.

Screenshot 2018-04-01 23.00.17
Gambar 3. Pemilihan image Raspbian Stretch Lite untuk flash pada SD Card dengan program Etcher

Setup SSH Server dan WiFi

Untuk dapat mengakses Raspberry Pi Anda tanpa membutuhkan monitor ataupun keyboard Anda membutuhkan SSH Server dan koneksi WiFi. Pada komputer yang Anda ingin pakai untuk mengonfigurasi Raspberry Pi, pastikan Anda memiliki client SSH, Anda dapat menggunakan PuTTY.

Untuk menyalakan SSH, Anda perlu membuat file “ssh” pada partition boot pada SD Card yang sudah Anda flash dengan OS Raspbian. Pastikan Anda membuat file ssh tanpa extension apapun (bukan .txt), file ini tidak perlu diisi, hanya pastikan bahwa terdapat file bernama “ssh”.

Screenshot 2018-04-01 23.16.44
Gambar 4. Instalasi SSH Server dengan menambahkan file SSH tanpa ekstensi pada SD Card dengan Raspbian

Setelah menambahkan server SSH, hal kedua yang perlu Anda lakukan adalah membuat sebuah file “wpa_supplicant.conf” pada partisi boot. Isi file tersebut sebagai berikut:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="NAMA_WIFI_ANDA"
    psk="PASSWORD_ANDA"
    priority=1
}

Gunakan Notepad untuk menulis file tersebut, pastikan Anda simpan ini sebagai wpa_supplicant.conf dan bukan .txt. Gambar 5 menunjukkan contoh hasil dari pembuatan file wpa_supplicant yang ditaruh pada partisi boot yakni di F:\. Ganti NAMA_WIFI_ANDA dengan nama SSID dari WiFi yang Anda pakai, dan PASSWORD_ANDA sesuai dengan password WiFi-nya.

ConfigureWPASupplicant
Gambar 5. Pengaturan file wpa_supplicant untuk koneksi WiFi

Setelah Anda telah melakukan instalasi OS Raspbian dan menambahkan file-file sesuai dengan petunjuk di atas, eject SD card tersebut dan pasang ke Raspberry Pi Zero.

Akses SSH Raspberry Pi dari PC

Setelah Anda memastikan file yang dibuat sudah sesuai dengan tutorial ini, nyalakan Raspberry Pi Zero untuk pertama kalinya dengan SD Card yang sudah diinstalasi dengan OS Raspbian yang sudah dikonfigurasi untuk dapat diakses dengan SSH melalui WiFi. Cek IP Address dari Raspberry Pi yang Anda miliki untuk dapat mengaksesnya melalui Raspberry Pi, Anda bisa menggunakan Tabel DHCP dari Router WiFi Anda untuk mengetahui IP Address Raspberry Pi. Contoh Tabel DHCP dari Router dapat dilihat pada Gambar 6.

Router
Gambar 6. IP Address dari Raspberry Pi Zero

Setelah itu Anda dapat membuka PuTTY untuk mengakses SSH dari Raspberry Pi dengan IP Address yang sudah Anda ketahui dari Tabel DHCP Router Anda. Setelah itu Anda dapat memasukkan login dengan menggunakan

login as: pi
pi@192.168.0.7's password: raspberry

Pastikan Anda mengikuti petunjuk di atas yakni memasukkan “pi” sebagai nama login dan password “raspberry”. Setelah itu Anda dapat mengakses Raspberry Pi Zero Anda menggunakan SSH, untuk mengubah password Anda agar tidak mudah dijebol orang maka Anda perlu memasukkan command:

$ passwd

Anda akan diminta mengisi password lama (raspberry) dan memasukkan password yang baru. Setelah Anda telah memasukkan password baru, pastikan SSH Server di Raspberry Pi sudah dalam posisi menyala secara permanen, hal ini dapat dilakukan dengan menggunakan command sebagai root (sudo):

# raspi-config

Dengan mengakses raspi-config, Anda akan melihat tampilan sesuai pada Gambar 7 pada window PuTTY Anda. Arahkan pointer ke “Interfacing Options” dan klik Enter.

RaspiConfig
Gambar 7. Tampilan Raspberry Configuration Tool (Raspi-Config)

Setelah Anda mengakses Interfacing Options, pilihlah P2 SSH untuk mengakses pengaturan SSH Server. Anda akan menemukan pilihan “Would you like the SSH server to be enabled?” pilih Yes dan tekan Enter. Anda akan melihat tulisan “The SSH server is enabled”. Setelah itu Anda akan dikembalikan ke tampilan utama, tekan Finish untuk keluar. Selanjutnya Anda akan dapat mengakses Raspberry Pi Anda via SSH tanpa perlu memikirkan adanya monitor/keyboard, pastikan ada WiFi dengan SSID dengan Password sesuai dengan penyetelan yang Anda lakukan.

Masih memiliki pertanyaan? Silakan bertanya pada blog post ini, selamat mencoba Raspberry Pi Anda.

Install Python 3.6 on Raspbian

Ingin memakai Python 3.6 pada Raspberry Pi? Namun saat Anda menjalankan program menggunakan Python di Raspberry Pi, versi Python yang dipanggil adalah versi Python 2.7. Post blog ini akan membahas bagaimana mengubah default Python 2.7 menjadi Python 3.6.

Sebelum saya memulai tutorial ini, saya ingin menjelaskan satu hal yang mungkin sering terlihat pada tutorial-tutorial Linux, yaitu anotasi $ dan #. Saat menulis command Linux Terminal di dokumen umumnya anotasi $ dan # sering dipakai sebagai prefix. Asal usul $ dan # adalah dari Terminal Linux, jika user yang dibuka bukan root, maka Terminal Linux akan menunjukkan tanda $, jika Terminal Linux menunjukkan tanda # artinya Anda sedang mengakses root. Pada dokumen yang menunjukkan command Linux, # menandakan command tersebut harus diakses sebagai root (atau dengan sudo jika bukan root).

Hal pertama yang dapat dilakukan adalah mengecek apakah Python default Anda ada pada Python 3.x atau pada Python 2.x, untuk memastikan hal ini gunakan command sebagai berikut:

$ python --version
PythonVersionStart
Gambar 1. Versi Python sebelum update ke 3.6.4

Beberapa hal perlu dilakukan untuk mengubah Python 2.7 menjadi Python 3.6. Hal pertama yang perlu diperhatikan adalah memastikan bahwa beberapa package dependencies sudah di-install pada Raspberry Pi. Pastikan dengan menggunakan command sebagai berikut:

# apt-get update
# apt-get install build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev

Setelah melaksanakan beberapa program tersebut, Anda dapat langsung mengunduh source code Python 3.6 dari website resmi Python. Source code Python 3.6 yang tersedia berupa tar.xz sehingga anda perlu melakukan proses unpack. Sebelum mengunduh dengan wget, pastikan Anda sudah di direktori /tmp/ agar source code yang Anda unduh akan terhapus secara otomatis setelah reboot.

$ cd /tmp/
$ wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz
$ tar xf Python-3.6.4.tar.xz
DownloadPythonSource
Gambar 2. Hasil unduhan dan ekstraksi dari source code Python 3.6.4

Setelah Anda berhasil mengekstrak seperti pada Gambar 2, Anda dapat melihat bahwa source code Python 3.6.4 sudah berada pada /tmp/Python-3.6.4. Untuk melanjutkan proses instalasi Python 3.6.4, akses direktori Python-3.6.4

$ cd Python-3.6.4

Setelah membuka direktori, ikuti proses ini untuk instalasi Python 3.6.4:

$ ./configure
$ make
# make altinstall

Setelah instalasi Python 3.6, Anda akan melihat bahwa Python default masih seperti Python sebelumnya, untuk saya Python masih 2.7.13. Untuk mengubah default Python yang digunakan perlu digunakan update-alternatives. Pertama, pastikan Anda tahu posisi instalasi Python 3.6 dan bahwa Python 3.6 yang sudah diinstal dapat diakses. Lakukan kedua command ini untuk mengetahui posisi Python 3.6

$ ls /usr/bin/python*
$ ls /usr/local/bin/python*

Setelah mengetahui posisi executable Python 3.6, lakukan update-alternatives untuk menambahkan Python 2.7.13 dan Python 3.6.4 sebagai alternatif Python. Gambar 3 menunjukkan hasil keluaran dari command untuk mengetahui posisi executable dari Python2.7, Python3.5 dan Python3.6. Tambahkan semua executable Python ini sebagai alternatif dari Python.

FindingPythonExecutable
Gambar 3. Lokasi Python executables pada direktori root OS Raspbian

Setelah mengetahui posisi yakni pada /usr/bin/ untuk Python2.7 dan Python3.5 dan pada /usr/local/bin/ pada Python3.6 yang baru diinstal. Lakukan proses  penambahan alternatif /usr/bin/python dengan menggunakan command sebagai berikut:

# update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
# update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2
# update-alternatives --install /usr/bin/python python /usr/local/bin/python3.6 3

Setelah menambahkan sesuai urutan di atas, Python3.6 menjadi mode automatis dari python. Jika Anda memanggil python –version akan menunjukkan keluaran seperti pada Gambar 4.

UpdateAlternativesPython
Gambar 4. Pengubahan versi otomatis Python menjadi Python 3.6.4

Jika Anda ingin mengubah kembali default Python menjadi Python 2.7.13, Anda dapat melaksanakan command sebagai berikut:

# update-alternatives --list python
# update-alternatives --config python

Setelah mengeksekusi command di atas Anda akan diminta untuk memasukkan nomor yang ingin Anda pakai sebagai mode default Python, ketik 1 jika Anda ingin kembali menggunakan Python 2.7.13 karena satu atau dua hal (misalnya akibat library yang Anda pakai masih memerlukan Python 2.7). Setelah Anda memilih Python yang Anda inginkan, Anda dapat mengecek versi Python default dengan python –version dan hasilnya akan terlihat seperti pada Gambar 5.

RevertPythonTo27From36.PNG
Gambar 5. Pengembalian versi default Python menjadi Python 2.7.13

Anda dapat menggunakan command konfigurasi di atas untuk memilih versi Python yang Anda inginkan, Anda dapat melakukan ini jika versi Python terbaru sudah tersedia dan ingin menambahkannya ke Raspberry Pi. Jika Anda memiliki pertanyaan jangan segan untuk menambahkan pertanyaan Anda di Blog ini. Selamat mencoba!

A Diary of My Electronics Engineering Hobby Begins

Hai semuanya!

Ini adalah percobaan pertama saya untuk membuat sebuah blog khusus untuk tema Teknik Elektronika. Saya seorang Sarjana Teknik Elektro. Saya akan mencoba untuk menuliskan segala percobaan yang saya lakukan untuk belajar lebih tentang Teknik Elektro.

Hey everyone!

This is my first attempt to making a blog specialized for Electronics Engineering. I am an undergraduate in Electronics Engineering. I will be posting all my endeavors to learn more about Electronics Engineering.

Keep It Simple, Stupid — Kelly Johnson