LoRa Modulation Basics (English)

LoRa is a spread spectrum modulation technology patented by Semtech. LoRa is a derivative of Chirp Spread Spectrum (CSS) which lowers data rate to improve sensitivity. If you want to place LoRa in the OSI Layer, implementation of LoRa modulation exists on the physical layer and can’t be bound to other layers above it. This allows LoRa to adapt with several robust connections. This article is made to discuss several LoRa basic concepts as a reference to develop LoRa-based systems

Spread Spectrum Technology

For someone well-versed in Telecommunication, the Shannon-Hartley Theorem is no longer something foreign. This theorem explains about the canal capacity of a communication link using specific bandwidth with noise in the canal. I won’t write in the full theorem and details, but from the derivation of the mathematical formula, we can find that by increasing bandwidth, the performance between link communication with Noise-to-Signal ratio level will improve. In Spread Spectrum technology, you’ll usually hear that Noise-to-Signal ratio compared to Signal-to-Noise ratio because the power of a signal is usually below the noise floor

Just like the Shannon-Hartley theorem, bigger bandwidth can compensate for SNR degradation in the radio canal. In a Spread Spectrum system, the sent data is multiplied with Spreading Code, also known as Chip Sequence. Chip Sequence usually has a frequency far higher than the information frequency which resulted in a wider bandwidth when both signals are multiplied. On the receiver side, the received signal will be multiplied with the same chip sequence signal to obtain the original data

Picture 1. Spread Spectrum Illustration

LoRa Spread Spectrum

LoRa modulation provides alternatives for Spread Spectrum communication which are low power and low cost compared to the conventional Spread Spectrum technique. LoRa modulation uses chirp signal, which is a signal with a frequency which varies over time. By using this method, the complexity for the receiver side will be reduced. The output signal from this modulation matches the bandwidth used by the chirp signal

In LoRa modulation, the data with a certain bit rate that we want to transmit will be multiplied with a chirp signal with a certain Chip Rate. The Chip Rate is far larger than the data signal we want to send, which then became the Bandwidth from modulated LoRa signal

Aside from Bandwidth, there is also Spreading Factor. If Bandwidth shows chip rate, Spreading Factor shows how much chip is used to represent a symbol. Other than that, Spreading Factor also shows how many bits contained in a symbol

LoRa also has a mechanism called Forward Error Correction (FEC). FEC configuration can be done using the Coding Rate parameter. Just like a normal radio communication, noise can affect the performance of a system. By adding redundancy using FEC, the LoRa-based system designer can decrease the bit rate to increase the system’s reliability

To design a LoRa-based system, you have to pay attention to these three parameters to get an appropriate bit rate, decent enough range, and a nice reliability

Edit Aug 05/2018: The terminology in Spread Spectrum parameter had been corrected to make it more accurate

Bluetooth HC-05 AT Commands (English)

Bluetooth is one of the simplest communication modules which can be bought at a relatively cheap price. HC-05 Bluetooth Module can be easily found in many online shop websites around fifty thousand rupiahs. Before we further out discussion, I’ll talk about several Bluetooth basic concepts


Bluetooth is a wireless technology standard for short-distance communication. Bluetooth uses 2.4 GHz frequency, which is a free-to-use frequency channel, with a low power limitation. Bluetooth standard encompasses quite a lot of protocols, one of which is RFCOMM Protocol. The Bluetooth Module which we usually find normally uses this protocol. RFCOMM Protocol is pretty popular because there is a lot of APIs available using this protocol. In addition, this protocol, commonly called as Emulation Port, can be integrated to many applications using RS-232 as its communication interface

Generic Bluetooth RFCOMM Modules

After knowing several of Bluetooth basic concepts, it’s time to see how Bluetooth works directly. For this demonstration, I’ll try using Bluetooth Module: Tokopedia (Disclaimer: No intention of promoting).

Picture  1. Bluetooth HC 05 Module

The Bluetooth Module as depicted in Picture 1 is a Module based on Bluetooth Chip BC417. This module has several output pins such as STATE, RX, TX, GND, +5V, and EN. To use this module, it’s enough to connect the RX, TX, GND, and +5V pins.

The 5V pin, or VCC Pin, in this module is actually connected to the LDO Voltage Regulator in this Bluetooth Module Board. I tried to see what kind of Regulator is being used, but it’s pretty hard to find a datasheet for this SMD component. Before I talked about how AT programming commands are, I’ll test the serial port using this Bluetooth Module first

Connect the Bluetooth TX pin with RX Raspberry Pi, RX Bluetooth with TX Raspberry Pi, VCC with +5V Raspberry Pi and GND with GND Raspberry Pi. I’ll turn on the minicom to open the serial port (/dev/ttyS0) using baudrate 9600. The test display result should be as shown in Picture 2

Picture 2. Serial Port Receive Outcome via Bluetooth

AT Commands Bluetooth

After finished testing the Serial communication, the next thing to try is the AT Commands. Several configurations such as Bluetooth name and PIN and also baud rate could be done through AT Commands. To do that, I made a short script in Python to execute this function. Before trying this script, make sure Raspberry Pi had been installed with Python and PySerial package (python-serial)

# apt-get install python-serial

Before I give the source code from AT Command Configuration, it’s important to know that entering AT commands can be done in three ways. The first is to give 3.3 Volt input to the 34th pin in the Bluetooth Module. This will make the module enter a Full AT Commands mode, where all AT Commands can be accessed and baudrate from the module is 38400. The second method is by pressing a button before the module turned on and make sure the button is still pressed as the configuration process continues (this is effectively similar to the first method), which makes the module enter a Full AT Commands mode. The third method is that after the module is turned on, press a button on the module and keep it pressed when doing the configuration. The module will then enter a Semi AT Command mode where the baudrate is still the normal serial communication baudrate (9600 baud default). If you forgot what baudrate you had set for your serial communication baudrate, it’s better to program your Bluetooth in 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)

result = bluetooth.read(100)
print result

result = bluetooth.read(100)
print result

To use the program above, change “/dev/ttyS0” into “/dev/ttyACM0” if using PL011 Hardware UART from Raspberry Pi. Only use “/dev/ttyS0” if you’re using mini UART. Set baudrate according to the module’s baudrate or put in 38400 if you want to enter Full AT Command mode

To change the name and baudrate, Bluetooth module can be configured in a Semi AT Command mode, which is why my set of processes are to press a button, run attest.py script, and let go of the button when it finished

Picture 3. Output from program attest.py

That’s all from me this time, leave a comment if you have a problem in setting up the Bluetooth

Adding GitHub Libraries in KiCad

Open Source Library adalah salah satu kelebihan dari KiCad, setiap minggunya, library KiCad di-update melalui GitHub dari KiCad. Artikel ini ditulis untuk menunjukkan cara instalasi library tambahan untuk KiCad, dan sebagai contoh akan menambahkan library dari pihak ketiga seperti Digi-Key ataupun Sparkfun Electronics. Library Digi-Key dan Sparkfun dapat diakses pada tautan di bawah ini:

  1. SparkFun Library: https://github.com/sparkfun/SparkFun-KiCad-Libraries
  2. Digi-Key Library: https://github.com/digikey/digikey-kicad-library

Sebagai contoh, artikel kali ini akan menunjukkan cara menambahkan library Sparkfun pada KiCad 5.0.0 untuk Ubuntu 18.04

Cloning the Library via GitHub

Library dapat diakses melalui GitHub, di mana semua orang dapat membagikan library-nya dan dapat berkontribusi pada library open source yang ada di GitHub. Jika ada tambahan baru di library, menggunakan Git, perbaharuan versi menjadi lebih mudah dan tidak memakan banyak space pada hard disk, karena hanya file tambahan yang diunduh ulang dan bukan keseluruhan file. Untuk mengunduh library Sparkfun pada GitHub, pastikan Anda punya package git dan lakukan command di bawah ini:

$ git clone https://github.com/sparkfun/SparkFun-KiCad-Libraries.git

Setelah selesai mengunduh Anda dapat melihat beberapa folder yang berisi Library dan pelengkap lainnya, dan juga dokumen tambahan. Contoh hasil unduhan library tersebut dapat dilihat pada Gambar 1.

Screenshot from 2018-08-13 21-56-02
Gambar 1. Hasil clone dari repositori library KiCad dari SparkFun

Adding the Library in KiCad

Setelah memiliki Library yang diinginkan, selanjutnya buka program KiCad untuk menambahkan library yang sudah diunduh. Sebelumnya, buat Project baru melalui menu File > New > New Project.

Akses “Environment Variable Configuration” pada menu Preferences > Configure Paths. Tambahkan Environment Variable baru menggunakan tombol “Add”, beri nama “KICAD_SPARKFUN_SYMBOL” dan tunjukkan letak foldernya melalui tombol “Browse”.

Screenshot from 2018-08-13 22-13-56
Gambar 2. Penambahan Environment Variable

Setelah menambahkan Environment Variable, buka Eeschema (Schematic Editor) dan buka menu Preferences > Manage Symbol Libraries. Tekan tombol “Browse Libraries…” dan pilih semua library yang ingin ditambahkan lalu tekan “Open”

Screenshot from 2018-08-13 22-22-33
Gambar 3. Penambahan Library Symbol untuk Pembuatan Skematik

Buka Pcbnew (PCB Layout Editor) dan buka menu Preferences > Manage Footprint Libraries. Lalu, tekan tombol “Browse Libraries…” dan pilih semua folder .pretty yang ingin ditambahkan lalu tekan “OK”

Screenshot from 2018-08-13 22-38-44
Gambar 4. Penambahan Library Footprint untuk Pembuatan PCB Layout

Sekian artikel kali ini untuk menambahkan library pada KiCad, selanjutnya saya akan membahas pembuatan PCB sederhana menggunakan KiCad. Selamat mencoba KiCad!



Installing KiCad: Open Source PCB Designer Suite

KiCad adalah sebuah open source software untuk membuat skematik, layout PCB dan Gerber. KiCad dapat digunakan di Windows, Linux, dan macOS, dan dilisensikan di bawah GNU GPL v3. KiCad dibuat oleh Jean Pierre Charras, seorang dosen dari Universitas Grenoble. KiCad juga disponsori oleh CERN dan banyak perkembangan KiCad yang dilakukan oleh pegawai CERN. Jika Anda tertarik untuk membantu perkembangan KiCad, Anda dapat melakukannya melalui CERN.

Saya tertarik untuk mencoba aplikasi ini untuk melakukan proyek-proyek sederhana untuk hobi. KiCad menjadi pilihan yang sesuai karena bersifat open source sehingga siapapun dapat menggunakannya. Selain itu kelebihan dari KiCad adalah library yang diupdate setiap minggunya, Anda dapat mengakses library-nya dengan GitHub. Adafruit yang banyak menghasilkan modul-modul, maupun development board juga menggunakan KiCad untuk menghasilkan produk-produk mereka.

Ubuntu Installation

Saya mencoba instalasi kali ini dengan Ubuntu 18.04, Anda dapat melihat instruksi instalasi pada link ini: KiCad Ubuntu

Saya akan menjelaskan cara instalasi KiCad PCB v5 di Ubuntu 18.04, pertama hal yang Anda harus lakukan adalah menambahkan ppa berikut:

# add-apt-repository -y ppa:js-reynaud/kicad-5

(Ubuntu 16.04) Jika Anda menggunakan Ubuntu 16.04, lakukan apt-get update sebelum instalasi KiCad:

# apt-get update
# apt-get install kicad

Anda akan mengunduh sekitar 391MB dan setelah instalasi KiCad akan memakan disk space sebesar 4,970MB. Setelah selesai, Anda sudah dapat membuka KiCad melalui terminal, ataupun melalui Launcher.

Screenshot from 2018-08-09 19-56-37
Gambar 1. Terminal setelah instalasi KiCad dan tampilan aplikasi KiCad

Saya berencana memulai seri artikel membahas penggunaan KiCad, selanjutnya saya akan membahas cara menambahkan library dari GitHub KiCad. Selamat mencoba KiCad!

Raspberry Pi Zero Headless Setup (English)

Do you want to try playing around with Raspberry Pi? Maybe you have encountered several problems such as no monitor to configure Raspberry Pi, no keyboard to write the commands, or no LAN cable. Maybe you have the same problem as mine, owning Raspberry Pi Zero W which can only be accessed through Wireless, USB using micro USB, or mini HDMI. If you have Raspberry Pi Zero and want to start playing around with Raspberry, please read this guide to start installing your Raspberry Pi!

Picture 1. Raspberry Pi Zero Wireless

Instalasi Operating System Raspbian Stretch Lite

Several things you need to start are as followed:

  1. Raspberry Pi Zero Wireless (make sure it’s not a Raspberry Pi without WiFi)
  2. Micro SD Card (Class 10 is better so the Read/Write Disk operations are better)
  3. 2A Handphone Charger
  4. Laptop with SD Card Reader (Micro-SD Adapter, if necessary)
  5. Wireless Router or Mobile WiFi Hotspot

The first thing you need to do is to put in your SD Card into your computer, then format it if you have installed Raspbian on that SD Card. You can format it using SD Card Formatter (sdcard.org).

For a comparison, Picture 2 shows the formatting using quick format Windows dan SD Card Formatter. Windows Formatter can only format the F:\ partition in SD Card, while SD Card Formatter can format all of SD Card.

Screenshot 2018-04-01 22.40.45
Picture 2. Formatting Comparison between Windows Formatter and SD Card Formatter

After doing Quick Format using SD Card Formatter, you can add Raspbian OS in SD Card. First thing you need to do is to download ZIP File from Raspbian OS Stretch Lite. Download from the Raspberry Pi official website for Raspbian Stretch Lite, with kernel Linux 4.9. There are two variants of Raspbian Stretch, which are the Desktop and Lite variants. Lite is the version without GUI, while the Desktop one had GUI so it can be connected to a monitor and keyboard and used like a normal computer.

After you have Raspbian Stretch Lite and a formatted SD Card, the next process is to flash Raspbian Stretch Lite on SD Card Formatter. My most favorable method is by using the Etcher program. This program can be downloaded from Etcher.io and it’s easy to use

Screenshot 2018-04-01 23.00.17

Picture 3. Choosing Raspbian Stretch Lite to flash on SD Card using Etcher program

SSH Server dan WiFi Setup

To access Raspberry Pi without monitor or keyboard, you need an SSH Server and a WiFi connection. On the computer you’re using to configure Raspberry Pi, make sure you have an SSH client so you can use PuTTY.

To turn on SSH, you need to create an “ssh” file on the boot partition in SD Card that you flashed using Raspbian OS. Make sure you made the ssh file without any extension (not even .txt). It didn’t need to contain anything, just ensure that there is a file named “ssh”

Screenshot 2018-04-01 23.16.44

Picture 4. Installing SSH Server using SSH file without any extension in the SD Card for Raspbian

After adding the SSH server, the second thing you need to do is to create a “wpa_supplicant.conf” file on the boot partition. The content of this file is as follows:

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


Use Notepad to write those, and make sure you saved it as “wpa_supplicant.conf”, not in .txt extension. Picture 5 shows the result of creating “wpa_supplicant” file which is placed in the boot partition (F:\). Change NAMA_WIFI_ANDA with the SSID your WiFi is using, and PASSWORD_ANDA according to the WiFi password.

Picture 5. wpa_supplicant file configuration for the WiFi connection

After installing the Raspbian OS and adding the necessary files according to the instructions above, eject the SD Card and plug it into Raspberry Pi Zero.

Accessing SSH Raspberry Pi from PC

After ensuring that the created files are according to this tutorial, turn on Raspberry Pi Zero for the first time using the SD Card which had been installed with Raspbian OS and configured to be accessed using SSH through WiFi. Check the IP Address of your Raspberry Pi to access it using Raspberry Pi. You can use your Router’s DHCP Table to know which IP address is your Raspberry Pi’s. An example of that is shown in picture 6.

Picture 6. IP Address from Raspberry Pi Zero

After that, you can open PuTTY to access SSH from Raspberry Pi with the IP Address you obtained through your DHCP Router. You can login using

login as: pi
pi@'s password: raspberry

Make sure you follow the instructions above, using “pi” as your login name and “raspberry” for your password. After that, you can access Raspberry Pi Zero through SSH to change your password. You can do that using the command:

$ passwd

You’ll be asked to fill the old password (raspberry) and fill in the new one. After you filled it, make sure the SSH Server from Raspberry Pi is turned on permanently. You can do that by using this command as root (sudo):

# raspi-config

By accessing raspi-config, you’ll be shown the interface below like in Picture 7 on your PuTTY window screen. Direct the pointer to the “Interfacing Options” and press Enter.

Picture 7. Raspberry Configuration Tool Interface (Raspi-Config)

After accessing Interfacing Options, choose P2 SSH to access SSH Server configuration. You’ll be asked “Would you like the SSH server to be enabled?” Choose Yes and press Enter. You’ll then see “The SSH server is enabled”. After you’re redirected to the front page, press Finish to exit. You’ll be able to access Raspberry Pi via SSH without using Monitor or Keyboard after this, but ensure that you have WiFi with the same SSID and Password as the configuration you had done

Still have more questions? Please ask in this blog post. Good luck experimenting with your Raspberry Pi.

Install Python 3.6. On Raspbian (English)

Do you want to use Python 3.6 on Raspberry Pi? When you run Python in Raspberry Pi, the version called is usually v2.7. This blog post will discuss how to change the default Python 2.7 into Python 3.6.

Before I begin the tutorial, I want to explain one thing which is commonly seen in Linux tutorials, the ‘$’ and ‘#’ annotations. When writing a command in Linux Terminal’s common documents, both annotations are commonly used as prefixes. The reason for that is in Linux Terminal, when the user isn’t accessing root, will show the ‘$’ annotation. If the Terminal is showing ‘#’, then the user is accessing root. In the document which showed Linux commands, ‘#’ means the command must be accessed as root (or with sudo)

The first thing that can be done is to check if your default Python is on version 3.x or 2.x. You can use this command to make sure of that

$ python --version
Picture 1. Python version prior to upgrading to 3.6.4

There are a few things that must be done to change Python 2.7 into Python 3.6. The first thing is to ensure that several package dependencies must have been installed in Raspberry Pi. To make sure, you can use the command below

# 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

After executing those programs, you can download the source code for Python 3.6 from Python’s official website. Python 3.6 source code is provided in tar.xz, which means you have to unpack it. But before you download it with wget, make sure your file is in the /tmp/ directory, so it will be deleted after you 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
Picture 2. Result after downloading and extracting the source code from Python 3.6.4

After you finished extracting as in Picture 2, you can see that the source code is at /tmp/Python-3.6.4. To continue with the installation, access Python-3.6.4 directory

$ cd Python-3.6.4

After opening the directory, follow the process below to install Python 3.6.4:

$ ./configure
$ make
# make altinstall

After installing Python 3.6, you’ll see that Python default is still the same as the previous Python (in my case, still 2.7.13). To change the default Python that is being used, you have to use update-alternatives. First, make sure that you know where to install Python 3.6. and that the installed Python 3.6 can be accessed. Use both these commands to know where Python 3.6 is

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

After knowing the position of executable Python 3.6, do update-alternatives to add Python 2.7.13 and Python 3.6.4 as Python alternatives. Picture 3 shows the output from command to find out where the executable files from Python2.7, Python3.5 dan Python3.6. Add all those executable Python-s as alternatives from Python

Picture 3. Python executable locations from root OS Raspbian directory

You will then find out the positions, which are /usr/bin/ for Python2.7 and Python3.5 and /usr/local/bin/ for Python3.6 which is just installed. Include the alternative /usr/bin/python using these commands:

# 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

After adding it as the order above, Python 3.6 will automatically become the default for Python. If you run call python –version, it will show the output like in Picture 4


Picture 4. Automatic version change for Python into Python 3.6.4

If you want to reconfigure your Python back into Python 2.7.13, you can run the command as follows:

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

After executing the commands above, you’ll be asked to input the number you want to use as your default Python. Type 1 if you want to use Python 2.7.13 because of one reason or another (for example, the library you’re using still uses Python 2.7). After selecting which version you want, you can check the default version using ‘python –version’ command dan the result will show like in Picture 5.

Picture 5. Changing back the default version of Python into Python 2.7.13

You can use the configuration commands below to select which version you want to use. You can do this if the newest Python version is available and you want to add it into Raspberry Pi. If you have any questions, don’t hesitate to ask them in this blog. Have fun experimenting!

Spreading Factor, Bandwidth, Coding Rate and Bit Rate in LoRa

Pada artikel sebelumnya saya membahas beberapa konsep dasar pada Spread Spectrum dan secara khusus saya membahas modulasi LoRa dan menyinggung beberapa parameter yang ada pada LoRa. Beberapa parameter tersebut adalah Spreading Factor, Bandwidth, dan Coding Rate. Ketiga parameter tersebut yang akan menentukan seberapa sensitif performa receiver LoRa dan seberapa cepat bit rate dari data yang dikirimkan. Parameter tersebut akan saya bahas secara singkat dalam artikel ini, dengan harapan pembaca dapat memahami konsep dan dapat mengimplementasikannya dalam merancang sistem berbasis LoRa.

Gambar 1. Spektrogram sinyal LoRa hasil pembacaan melalui SDR (source: DecodingLora)


Seperti yang dibahas sebelumnya, LoRa adalah modulasi chirp spread spectrum. Sinyal data yang dikirim direpresentasikan dengan sinyal chirp dari f_{min} sampai dengan f_{max} yang dapat dilihat pada Gambar 1. Dalam modulasi LoRa, symbol yang dikirim dapat divariasikan menggunakan parameter Spreading Factor dan Bandwidth. Sesuai Application Note Semtech AN1200.22, satu simbol memakan waktu transmit sebesar T_S yang dapat dilihat pada persamaan:

T_S = \frac{2^{SF}}{BW}


Bandwidth adalah lebar frekuensi yang dipakai untuk memodulasi data sinyal. Pada Gambar 1, nilai Bandwidth ini dapat dilihat dari lebar penggunaan frekuensi dari f_{min} dengan f_{max} . Selain itu, Bandwidth juga merepresentasikan chip rate dari modulasi sinyal LoRa.

R_C = BW

Spreading Factor

Nilai Spreading Factor (SF) menunjukkan seberapa banyak chip yang dipakai untuk merepresentasikan satu simbol. Semakin banyak chip yang digunakan untuk merepresentasikan satu simbol, maka semakin besar processing gain dari sistem receiver. Semakin besar nilai SF, semakin besar processing gain, hal ini memungkinkan receiver untuk dapat menerima sinyal data yang memiliki SNR negatif.

R_S = \frac{BW}{2^{SF}}

Spreading Factor menunjukkan banyaknya chip yang digunakan untuk merepresentasikan 1 simbol, dengan faktor eksponensial 2. Sehingga 1 simbol dapat terdiri dari N chip dimana N = 2^{SF} , untuk merepresentasikan bit dilakukan cyclic shift untuk merepresentasikan simbol yang dikirim. Mengetahui terdapat N chip, maka dapat dihasilkan nilai simbol antara 0 sampai N-1, atau berarti 1 simbol dapat merepresentasikan SF bits.

R_b = SF * \frac{BW}{2^{SF}}

Coding Rate

Implementasi modulasi LoRa juga menambahkan forward error correction (FEC), implementasi ini dilakukan dengan melakukan enkode 4 bit data dengan redundansi menjadi 5 bit, 6 bit,  7 bit, ataupun 8 bit. Menggunakan redundansi ini membuat sinyal LoRa lebih tahan terhadap interferensi singkat, nilai Coding Rate (CR) perlu diatur sesuai dengan kondisi kanal yang dipakai, jika terdapat banyak interferensi sebaiknya nilai CR ditingkatkan. Namun perlu diperhatikan bahwa kenaikan nilai CR juga meningkatkan waktu transmisi.

R_b = SF \frac{\big[\frac{4}{4+CR}\big]}{\big[\frac{2^{SF}}{BW}\big]}

Automatic Position Reporting System

Automatic Position Reporting System atau APRS adalah protokol komunikasi digital antara stasiun radio amatir dengan jumlah besar yang dapat mencakup area yang luas. APRS merupakan sistem radio paket yang dapat digunakan untuk mengirim berbagai informasi taktis, seperti cuaca, lokasi, pesan, dan berbagai event spesial atau emergency dalam waktu real time. Sistem APRS dibuat oleh Bob Bruniga (WB4APR) sejak lebih dari 25 tahun yang lalu, namun sistem ini masih aktif digunakan oleh banyak stasiun radio amatir.

Layaknya berbagai sistem radio amatir yang masih ada sampai sekarang, APRS juga sudah terintegrasi dengan jaringan internet. Anda dapat memantau berbagai macam informasi taktis melalui APRS, contoh website yang menunjukkan data APRS adalah APRS.fi. Pada Gambar 1, Anda dapat melihat banyak stasiun cuaca pada kota Tucson, Arizona, USA. Melihat banyaknya stasiun cuaca, perlu diketahui bahwa salah satu tradisi radio amatir di Amerika Serikat adalah layanan publik. Salah satu layanan publik tersebut adalah pengamatan cuaca. Operator radio amatir yang memiliki stasiun cuaca menggunakan APRS untuk membagikan datanya.

Walaupun bernama Position Reporting system, tujuan APRS ini sendiri bukan sebagai GPS Tracker system. Perkembangan APRS memang dipicu oleh perkembangan GPS pada zamannya, namun sebenarnya APRS adalah sistem komunikasi dua arah yang diperuntukkan untuk komunikasi taktis secara real-time.

Screenshot 2018-08-03 18.24.54
Gambar 1. Screenshot aktivitas radio amatir Tucson, Arizona, USA

APRS Radio Network

Setelah mengetahui sistem APRS dan salah satu aplikasinya, selanjutnya akan dibahas komponen dari sebuah sistem APRS. Pada sistem APRS, Anda akan sering mendengar istilah sebagai berikut:

  1. Terminal Node Controller
  2. Digipeater
  3. APRS-IS iGate

Terminal Node Controller adalah modem radio digital yang dipakai. Modem ini umumnya berbasis dari Bell 202 Modem, atau modem Audio Frequency Shift Keying dengan baudrate sebesar 1200 baud.

Digipeater adalah repeater digital yang mampu mengirimkan kembali paket data agar lebih banyak stasiun yang dapat mendengar informasi tersebut. Digipeater umumnya memiliki daya yang tinggi dan diletakkan pada gedung tinggi sehingga dapat memiliki jangkauan yang luas.

APRS-IS iGate adalah perangkat APRS yang terhubung dengan internet sehingga dapat me-relay pesan yang diterima pada gelombang RF dan memasukkannya ke server APRS-IS. Setelah dari server APRS-IS, Anda dapat melihat paket-paket tersebut melalui berbagai website APRS ataupun software APRS lainnya.

Untuk memulai memasuki dunia APRS, hal pertama yang perlu dipastikan adalah Anda sudah memiliki callsign radio amatir, jika di Indonesia, Anda dapat mendaftar melalui SDPPI Postel Kemkominfo. Anda akan mengikuti Ujian Nasional Amatir Radio, lalu jika lulus Anda akan menerima Sertifikat Kecakapan Amatir Radio, lalu Anda dapat mengurus Izin Amatir Radio. Setelah memiliki Izin Amatir Radio, pastikan untuk mempunyai Izin Penguasaan Perangkat Radio Amatir. Jika Anda tidak ingin melakukan transmisi, mendengarkan transmisi APRS diperkenankan untuk siapapun, dengan modal TNC dan Radio HT Anda dapat memulai bermain dengan APRS.

Sekian informasi singkat tentang APRS yang bisa saya sampaikan, informasi lebih detail tentang masing-masing komponen dari APRS akan saya sampaikan dilain kesempatan.


  1. http://www.aprs.org/
  2. http://www.aprs.fi/

LoRa Modulation Basics

LoRa adalah teknologi modulasi spread spectrum yang dipatenkan oleh Semtech. LoRa merupakan turunan dari Chirp Spread Spectrum (CSS) yang menurunkan data rate untuk meningkatkan sensitivitas. Jika Anda ingin menaruh LoRa dalam model OSI layer, implementasi modulasi LoRa berada pada Physical layer dan tidak terikat dengan implementasi layer atas tertentu. Hal ini memungkinkan LoRa untuk diadaptasi dengan berbagai jaringan yang sudah matang. Artikel ini dibuat untuk membantu menjelaskan beberapa konsep dasar LoRa sebagai referensi pengembangan sistem berbasis LoRa.

Spread Spectrum Technology

Bagi seseorang yang familiar dengan ilmu Telekomunikasi, pasti tidak asing lagi dengan teorema Shannon-Hartley. Teorema ini menjelaskan kapasitas kanal dari sebuah link komunikasi menggunakan bandwidth tertentu dengan adanya noise dalam kanal tersebut. Saya tidak akan menulis dengan detail penurunan rumus Shannon-Hartley, namun dari penurunan rumusnya, dapat diketahui bahwa dengan menaikkan bandwidth, performa link komunikasi dengan noise-to-signal ratio tertentu akan lebih baik. Pada teknologi Spread Spectrum, umumnya Anda mendengar Noise-to-Signal ratio dibandingkan dengan Signal-to-Noise ratio karena sejatinya daya sinyal umumnya berada di bawah noise floor. 

Sesuai dengan teorema Shannon-Hartley, bandwidth yang lebih besar dapat mengompensasi degradasi dari SNR pada kanal radio. Pada sistem Spread Spectrum, data yang ingin dikirim dikalikan dengan spreading code, atau dikenal juga dengan chip sequence. Chip sequence ini umumnya memiliki frekuensi yang jauh lebih tinggi, sehingga jika kedua sinyal dikalikan, bandwidth dari keluaran sinyal akan lebih lebar dari bandwidth data asli. Pada sisi penerima, sinyal yang diterima akan dikalikan kembali dengan sinyal chip sequence yang sama untuk mendapatkan data awal kembali.

Gambar 1. Ilustrasi Spread Spectrum

LoRa Spread Spectrum

Modulasi LoRa menyediakan alternatif komunikasi Spread Spectrum yang rendah daya, rendah biaya dari teknik spread spectrum konvensional. Modulasi LoRa menggunakan sinyal chirp, yaitu sinyal yang frekuensinya terus berubah. Penggunaan metode ini mengurangi kompleksitas pada desain penerima. Sinyal hasil keluaran dari modulasi ini sesuai dengan bandwidth dari sinyal chirp yang digunakan

Saya sekali lagi tidak akan mendalami detail penurunan rumus, pada modulasi LoRa, data dengan bit rate yang kita inginkan akan ditransmisi akan dikalikan dengan sinyal chirp dengan chip rate tertentu, chip rate ini jauh lebih besar dari sinyal data yang ingin dikirim, besarnya chip rate ini adalah Bandwidth dari hasil sinyal LoRa yang telah dimodulasi.

Selain Bandwidth, terdapat juga Spreading Factor, jika Bandwidth menunjukkan chip rate, Spreading Factor menunjukkan seberapa banyak chip yang digunakan untuk merepresentasikan satu simbol. Selain itu, Spreading Factor juga menunjukkan seberapa banyak bit yang terkandung dalam satu simbol.

Selain itu, LoRa juga memiliki mekanisme Forward Error Correction, pengaturan FEC dapat dilakukan melalui parameter Coding Rate. Layaknya komunikasi radio pada umumnya, pengaruh noise dapat merusak performa sistem, dengan menambahkan redudansi menggunakan FEC, perancang sistem berbasis LoRa dapat mengurangkan bit rate untuk menaikkan kehandalan sistem.

Untuk membuat desain sistem berbasis LoRa, Anda harus perhatikan ketiga parameter ini untuk mendapatkan bit rate yang sesuai, range yang mumpuni dan kehandalan sistem yang cukup baik.

Edit Aug 05/2018: Terminologi pada parameter spread spectrum telah dikoreksi sehingga akurat

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.


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).

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.

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)

result = bluetooth.read(100)
print result

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.

Gambar 3. Output dari program attest.py

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