Categories
Teknologi

Server MQTT, Instalasi dan contoh penggunaan untuk IOT

Lanjutan dari artikel sebelumnya, tulisan ini berisi cara instalasi dan contoh sederhana penggunaan server MQTT.

Sebelum melanjutkan, anda sudah harus memiliki server dengan sistem operasi linux. Apabila anda belum punya, anda bisa coba dengan virtualbox. Sistem operasi yang saya gunakan adalah Ubuntu 16.04 yang bisa di unduh disini: http://www.ubuntu.com/download

Berikut tutorialnya:
1. Tambahkan PPA Mosquitto

sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update

2. Install Mosquitto

Sudo apt install mosquitto

Untuk mengetes, saya akan menggunakan Node.JS sebagai client MQTT.

1. Install Node.JS

sudo apt install nodejs
sudo apt install npm

2. Install requirement MQTT clientside untuk node.JS

npm install mqtt --save

3. Buat file baru dengan mengetik

touch testmqtt.js
nano testmqtt.js

4. Masukan baris code dibawah

var mqtt    = require('mqtt');
var client  = mqtt.connect('mqtt://localhost');

client.on('connect', function () {
  client.subscribe('contohtopik');
  client.publish('contohtopik', 'Halo dunia');
});

client.on('message', function (topic, message) {
  console.log(message.toString());
  client.end();
});

5. Quit nano dengan ctrl+o, lalu ctrl+x

6. Jalankan client dengan mengetik

nodejs testmqtt.js
Output program
Output program

Output dari program client diatas seharusnya seperti ini:

Apabila muncul seperti baris diatas, maka selamat ! anda telah berhasil menginstall mosquitto, server MQTT !

Selanjutnya mari kita membedah sedikit client yang saya berikan.

var client  = mqtt.connect('mqtt://localhost');

Digunakan untuk mengkoneksikan client, dalam hal ini program node.js ke server MQTT. apabila server MQTT dan client dalam komputer yang berbeda, silahkan ubah localhost menjadi IP dimana server MQTT berada.

client.on('connect', function () {
  client.subscribe('contohtopik');
  client.publish('contohtopik', 'Halo dunia');
});

akan otomatis dijalankan, ketika client berhasil terkoneksi ke server MQTT, dalam hal ini melakukan dua hal, yang pertama:

  client.subscribe('contohtopik');

Fungsi ini memberitahu server MQTT , bahwa program ini ingin menerima semua pesan dalam topik ‘contohtopik’

  client.publish('contohtopik', 'Halo dunia');

Fungsi ini memberitahu server MQTT bahwa program ini akan mengirimkan pesan ‘Halo dunia’ ke seluruh pengguna server MQTT yang melakukan subscribe ke topik ‘contohtopik’

client.on('message', function (topic, message) {
  console.log(message.toString());
  client.end();
});

Baris ini digunakan untuk melakukan sesuatu terhadap pesan-pesan yang diterima oleh client ini setelah di subscribe. message adalah pesannya, sementara topic adalah topik asal pesan tersebut. Pada program ini, yang dilakukan adalah mengeprint pesan ke console.

Alur lengkap program adalah:
1. program mengkoneksikan diri ke server MQTT
2. program akan subscribe ke topik ‘contohtopik’
3. program mengirimkan ‘Halo dunia’ ke topik ‘contohtopik’
4. server MQTT meneruskan pesan ‘Halo dunia’ ke seluruh subscriber topik.
5. program menerima pesan baru
6. program memprint pesan yang diterima
7. Halo dunia dimunculkan ke console.

Yang perlu di note adalah, client MQTT ini tidak terbatas hanya di Node.JS saja. Anda bisa menggunakan bahasa pemrograman apapun seperti PHP, C , C++ , Java di platform apapun misalnya web, desktop, mobile dan embedded  seperti arduino dan ESP 8266.   Hanya saja, library client yang digunakan berbeda dan memiliki cara pemrograman yang  berbeda juga, walaupun konsep dasar publish-subscribenya tetap sama.

Berikut adalah beberapa library dalam berbagai bahasa pemrogramman, dan biasanya sudah ada tutorial penggunaanya di link tersebut.

PHP : http://www.hivemq.com/blog/mqtt-client-library-encyclopedia-mosquitto-php
C# : https://github.com/ppatierno/m2mqtt
Java : https://github.com/fusesource/mqtt-client
C/C++: https://eclipse.org/paho/
Ruby : https://github.com/njh/ruby-mqtt
Python: https://pypi.python.org/pypi/paho-mqtt/1.1

Selamat mencoba 🙂

Categories
Teknologi

Arsitektur Sistem Saklar Internet Of Things dengan ESP8266

Tulisan ini adalah kelanjutan dari tulisan Rencana Proyek Kontrol Lampu Rumah dengan internet. Tulisan ini akan membahas terutama arsitektur sistem.

Untuk merancang arsitektur, kita harus menganalisa terlebih dahulu masalah-masalah apa yang akan muncul. Kita harus melihat sistem yang akan di rancang dari berbagai sudut.

Berikut adalah list pertanyaan yang menurut saya sangat krusial:

  1. Bagaimana membuat komunikasi antara modul saklar dan server reliable?
  2. Bagaimana mengautentikasi pengguna modul saklar?
  3. Bagaimana cara menghandle lebih dari satu saklar sekaligus ?

Solusi yang saya gunakan adalah memecah problem diatas menjadi 2. Masalah nomor 1 dan 3 bisa dipecahkan menggunakan protokol MQTT. Protokol ini di gunakan untuk mengelola koneksi saklar. MQTT adalah sistem transportasi pesan berbasis publish/subscribe. Kita bisa membayangkan sistem ini seperti langganan koran. Seperti sebuah penerbit koran, Saklar melakukan broadcast bahwa dirinya bisa menerbitkan berita / pesan. Setelah itu, client bisa melakukan request langganan berita tersebut ke server MQTT. Hal ini juga berlaku 2 arah, saklar bisa berlangganan berita yang bertujuan mengubah status saklar. Tugas MQTT memanage objek apa berlangganan / menerbitkan berita apa. MQTT juga bisa di berikan password, sehingga hanya saklar & client tertentu yang dapat terkoneksi.

Berikut adalah diagram mengenai arsitektur ini:Screen Shot 2016-03-11 at 12.08.14 PM

Saklar akan mengkoneksikan diri ke server, bukan server yang mencoba mengkoneksian diri ke client. Saat saklar terkoneksi, dia akan mencoba menghubungi MQTT di VPS. Selanjutnya saklar akan mempublikasi eksistensi dirinya dan berlangganan beberapa pesan:

#Saklar akan mempublish message ini setelah terkoneksi: 
announcement,deviceName|status On/Off

#Ketika saklar menerima ini, akan mengubah status saklar
"command/"+deviceName+"/write"   

#Ketika saklar menerima ini, akan mengirim ulang pesan "announcement"
"command/"+deviceName+"/read"
    
#Ketika saklar menerima ini, akan mereset saklar
"command/"+deviceName+"/reset"

Sedangkan Server kontrol cukup berlangganan sebuah pesan:

announcement

Server kontrol berfungsi untuk  merender status masing-masing saklar sebagai situs HTML , manajemen autentikasi pengguna dan mengontrol penjadwalan. WebSocket digunakan agar semua saklar bisa dilihat statusnya secara realtime.  Saat pengguna mengubah status sebuah saklar, server kontrol akan mengirimkan pesan ke server MQTT sebagai berikut:

#Menyalakan Saklar
"command/"+deviceName+"/write",1

#Mematikan Saklar
"command/"+deviceName+"/write",0

Hal lain yang perlu di perhatikan adalah apa yang terjadi saat saklar offline. Yang kita bahas sampai saat ini adalah apa yang terjadi saat saklar online. Mekanisma sederhana yang saya lakukan adalah, mengirimkan pesan “Read” setiap beberapa menit sekali, lalu menghapus presensi di server kontrol apabila saklar tidak menjawab. Hal ini berarti saklar terdeteksi offline tidak real time, tapi saya rasa hal itu sudah lebih dari cukup untuk saat ini.

Sebagai penutup, Saya menggunakan MQTT sebagai server manajemen koneksi, Node.JS sebagai server kontrol, VPS OVH https://www.ovh.com/us/vps/ (karena harganya sangat murah) , sistem operasi Ubuntu 15.10. Tulisan selanjutnya adalah mengenai koding untuk implementasi arsitektur ini di ESP8266.

Categories
Teknologi

Cara melakukan programming pada ESP8266

Tulisan ini adalah kelanjutan dari tulisan saya yang berjudul Rencana Proyek Kontrol Lampu Rumah Terintegrasi Internet dengan ESP8266. di tulisan ini akan dibahas bagaimana melakukan programming dan contoh sederhana programnya.

Melakukan programming pada ESP8266 sangatlah mudah. Kamu hanya perlu menyiapkan ESP8266 kamu seperti di tulisan ini : https://www.gilangcp.com/2016/02/27/cara-berkomunikasi-dengan-esp8266-menggunakan-arduino/.

Lalu kamu harus menyiapkan programnya. Berikut ini adalah program sederhana untuk menyalakan pin GPIO nomor 2.

//Fungsi ini di jalankan 1 kali
void setup() {
  //Digunakan untuk mengeset GPIO pin ke 2 sebagai keluaran.
  pinMode(2,OUTPUT);
}

//Fungsi ini dijalankan berulang-ulang
void loop() {
  //Digunakan untuk set voltase GPIO pin 2 menjadi High
  digitalWrite(2,HIGH);
}

Kamu harus copy paste code tersebut ke IDE Arduino, pastikan board type sudah dipilih sebagai “Generic ESP8266 Module.”

Screen Shot 2016-03-03 at 10.20.49 AM

Selanjutnya adalah memasukan Pin RESET & pin GPIO0 ke GND di arduino. Berikut adalah diagram untuk membantu kamu melihat pin di modul.

Pin Out ESP8266
Pin Out ESP8266.

Klik Upload di Arduino IDE. Ketika tulisan status berubah menjadi uploading, lepas pin RESET dari GND nya arduino. Biarkan pin GPIO0 tetap di colok.  Pastikan pin GPIO2 tidak tercolok. Apabila error, ulangi dari awal, masukan pin RESET ke GND dan klik tombol upload, lepas pin RESET ketika status berubah menjadi uploading. proses ini tricky dan mungkin membutuhkan beberapa kali percobaan sebelum sukses.

Screen Shot 2016-03-03 at 11.04.16 AM

Ketika status sudah menjadi Done Uploading, cabut pin GPIO0 dan masukan pin RESET ke Ground, lalu cabut untuk mereset ESP8266. Anda bisa test dengan LED , dengan GPIO2 ke kaki positif LED, dan GND ke kaki negatif LED. Karena di program kita set bahwa GPIO2 HIGH, maka LED akan menyala.

GPIO menyalakan LED

Selamat! anda telah berhasil melakukan programming sederhana ESP8266. Perlu diketahui bahwa firmware AT Command bawaan akan di gantikan oleh program anda, sehingga anda tidak bisa lagi mengirim AT command ke module. Anda bisa memprogram dengan firmware bawaan, dengan mengikuti tutorial ini:

http://www.allaboutcircuits.com/projects/update-the-firmware-in-your-esp8266-wi-fi-module/

Tulisan selanjutnya akan membahas mengenai arsitektur perangkat lunak dan jaringan sistem saklar otomatis ini.

Categories
Teknologi

Cara Berkomunikasi Dengan ESP8266 Menggunakan Arduino

Tulisan ini adalah kelanjutan dari tulisan saya yang berjudul Rencana Proyek Kontrol Lampu Rumah Terintegrasi Internet dengan ESP8266. Silahkan baca tulisan tersebut untuk melihat apa tujuan, dan dimana bisa membeli bahan-bahan untuk mengikuti tulisan ini.

Hal yang paling pertama saya lakukan ketika menerima modul-modul tersebut adalah mencari tahu bagaimana cara mengkoneksikan Arduino ke komputer, dan bagaimana mengkoneksikan ESP8266 ke Arduino.

Setelah saya browsing lebih lanjut, saya salah mengira bahwa ESP8266 itu hanya sebuah modul wifi untuk Arduino. ESP8266 ternyata adalah sebuah mikrokontroler seperti Arduino, yang bisa di program dan memiliki port GPIO. Hal ini berarti modul itu bisa di koneksikan langsung ke komputer dan diprogram.

Yang menjadi masalah adalah, modul tersebut tidak memiliki port USB seperti Arduino, sehingga harus menggunakan adapter TTL serial ke USB seperti FT232RL. Kamu bisa membeli FT232RL disini seharga 80.000.

Untungnya, setelah saya pelajari lebih lanjut, Arduino bisa di hack sebagai adapter serial, sehingga kita bisa mengkoneksikan modul tanpa FT232RL. Masalahnya adalah, ESP8266 menggunakan voltase 3.3v, sedangkan voltase arduino adalah 5v. Hal ini berarti kamu beresiko merusak modul ESP8266 kamu, apabila menggunakan cara yang saya jelaskan dibawah, walaupun, saya sudah buktikan sukses melakukan hal ini.

Yang perlu di persiapkan:
1. Instalasi Arduino IDE (https://www.arduino.cc/en/Main/Software)
2. Konfigurasi SDK ESP8266 di Arduino IDE (Tutorial)

  1. Persiapkan Arduino dalam mode serial, Dengan cara menyambungkan pin RESET ke pin GROUND. (Pin ke 3 dengan pin ke 6)
    Reset-Pin
  2. Sambungkan Pin RX di modul dengan RX Arduino, TX dengan TX. Gunakan Gambar di bawah untuk melihat mana pin RX dan TX.Pin Out ESP8266
  3. Gunakan Breadboard, Sambungkan 3.3 volt (Penting! jangan gunakan VCC 5.5 Volt agar tidak merusak ESP8266 anda) Ke bagian + di breadboard, dan GND di arduino ke – di breadboard
    .Breadboard Connection
  4. Koneksikan VCC, CH_PD di ESP8266 ke + di breadboard, Sedangkan GND di modul ke – di breadboard.
  5. Silahkan koneksikan Arduino anda ke komputer, dengan Arduino IDE terbuka. Pilih Tools->Port di menu utama, sesuaikan dengan COM port Arduino anda. Setelah itu, pilih Tools->SerialMonitor. Pilih Both NL & CR, dengan BaudRate 115200. Lalu ketik “AT” dan klik Send.
    Screen Shot 2016-02-27 at 2.20.28 PM

Apabila tulisan OK, hal tersebut berarti anda telah berhasil berkomunikasi dengan ESP8266. Apabila belum, anda mungkin harus memeriksa sambungan kabel dan mencoba merubah baud rate menjadi lebih rendah. Anda bisa mencoba mencari Wifi, Koneksi ke Wifi dengan perintah-perintah AT command di bawah. Cara menuliskan perintahnya menggunakan SerialMonitor seperti diatas.

Kamu bisa melihat command command apa saja yang bisa di kirim di sini : http://wiki.iteadstudio.com/ESP8266_Serial_WIFI_Module

Selamat Mencoba!

Tulisan selanjutnya akan berfokus ke bagaimana cara memprogram dan memainkan port GPIOnya.

Categories
Teknologi

Rencana Proyek Kontrol Lampu Rumah Terintegrasi Internet

Tulisan ini adalah catatan harian proyek (Project Diary). Saya akan post terus perkembangan, kemajuan, hambatan yang saya alami saat menjalani proyek ini.

Saya dari dulu ingin sekali belajar elektronika, terutama mikrokontroller. Masalahnya adalah saya tidak mempunyai tujuan. Hasilnya adalah saya jadi malas, dan jadinya malah tidak pernah belajar.

Cukup sudah! itu yang saya katakan ke dalam diri saya. Oleh karena itulah saya menetapkan tujuan utama. Saya ingin mencoba membuat sakelar lampu kamar saya agar terhubung dengan internet, sehingga saya bisa nyalakan /  matikan menggunakan komputer. Saya juga menetapkan tujuan bonus, sistem penjadwalan.

Tentu saja membuat proyek seperti ini membutuhkan budget. Saya menetapkan budget yang saya akan keluar kan maksimal 350 ribu untuk membeli seluruh komponen yang di butuhkan. Saya tidak tahu apakah budget ini sudah cukup atau belum.

Saat mencoba menjalani proyek ini, Saya mendapatkan beberapa masalah, berikut masalah yang saya hadapi:

1. Bagaimana menyala-matikan perangkat listrik menggunakan komponen elektronik, yang menggunakan arus DC, sementara itu elektronik biasanya ?
– Setelah browsing lebih lanjut, saya mendapatkan informasi bahwa saya bisa mengontrol arus listrik menggunakan relay.
relay

2. Bagaimana cara mengontrol relay tersebut?
– Hipotesa saya adalah, saya bisa melakukan hal tersebut dengan arduino. Arduino memiliki pin output yang bisa di kontrol menggunakan programming.

3. Bagaimana cara mengkoneksikan Arduino dengan internet?
– Saya menemukan ada chip dengan nama ESP8266. ESP8266 ini adalah Wifi Receiver. Saya berharap sinyal dari ESP8266 bisa di terima oleh Arduino, yang lalu mengontrol relay. Saya berhipotesa bahwa sangat mungkin bisa membuat program di arduino untuk melakukan pengecekan ke server, apakah relay harus ON/OFF. Kemungkinan besar saya harus melakukan socket programming di arduino. Saya belum mengetahui apakah hal tersebut mungkin di lakukan Atau tidak.

ESP8266
Gambar ESP8266

4. Apakah semua komponen tersebut bisa di beli di indonesia?
– Saya terkejut bahwa seluruh komponen yang saya sebutkan di atas ternyata di jual di Tokopedia. Berikut Url komponen-komponen yang sudah saya beli dan sedang di kirim:

1. Relay 1 Channel, 5v  @Rp 19.000:
https://www.tokopedia.com/daelectronics/relay-module-1-chanel-for-arduino

2. Arduino Uno @Rp 89.000:
 https://www.tokopedia.com/tamjib/high-quality-arduino-uno-r3-board-atmega328p-1pcs-usb-cable

3. ESP8299 @58.000:
https://www.tokopedia.com/daelectronics/esp8266-serial-wifi-wireless-module-for-arduino

4. Prototyping Breadboard @25.000:
https://www.tokopedia.com/tamjib/solderless-breadboard-400-tie-point

5. Kabel Breadboard Male-Female @14.000:
https://www.tokopedia.com/bpraktis/male-to-female-dupont-cable-jumper-kabel-breadboard-20-cm-20pcs

6. Kabel Breadboard Male-Male @11.000:
https://www.tokopedia.com/hpasesoris/kabel-jumper-male-male-breadboard-arduino-wire-bread-board-cable-ab70

Total penggunaan budget: Rp. 216.000. Sisa Budget: Rp. 84.000

Note : ada beberapa komponen yang tokonya sama, sehingga biaya kirimnya bisa di tekan.

Semoga barang yang saya pesan bisa cepat di terima, sehingga saya bisa mulai menjalankan proyek ini.

Update :
Tulisan selanjutnya dari seri ini sudah saya upload:
Cara Berkomunikasi Dengan ESP8266 Menggunakan Arduino