IOT Basic Tutorial

Last updated: January 31 th, 2017

Geeknesia Microcontroller & IOT Starter Kit

Geeknesia Kit

Sebuah Starter Kit Lengkap dari Geeknesia untuk mempelajari IOT dan Micro Controller dengan mudah melalui praktek secara langsung.
Starter Kit ini menyediakan development board ESP 8266 tipe WeMos D1 yang compatible dengan board arduino sehingga mudah dipahami, muda diperlajari, dan mudah dimengerti. Dalam kit ini tersedia komponen elektronik lengkap untuk berbagai keperluan tutorial dan project real.

Read More or Buy Now !

Part 1 MQTT - Arduino to Geeknesia

Untuk para pemula yang baru mempelajari konsep IoT disarankan mencoba tutorial ini sebagai langkah awal mempelajari IoT karena Arduino adalah salah satu tools termudah yang dapat dipelajari. 

Pada tutorial ini, kita akan mencoba mengirimkan dummy data yang akan di-generate oleh button trigger, kemudian data dikirimkan ke geeknesia melalui protokol MQTT. 

Koneksi Arduino dengan Internet dilakukan melalui kabel LAN, pastikan koneksi anda stabil.

 

1. Registrasi dan menambahkan device :

 

2. Persiapkan Hardware dan Software yang akan digunakan

    Kelengkapan :

    Hardware :

  • Arduino UNO 
  • LAN Socket (Ethernet Shield)
  • Kabel Data
  • Koneksi LAN
  • Push Button
  • Koneksi Internet
  • Kabel Jumper

    Gambar 1. Papan sirkuit Arduino Uno

    Gambar 2. Papan Sirkuit Ethernet Shield

     Gambar 3. Konfigurasi Arduino Uno dengan Ethernet Shield

     

     Software 

  • download software pada link berikut lalu lakukan install: 

    Arduino Software

  • setelah install Arduino software, install library PubSubClient dengan langkah berikut:
    • masuk ke menu Sketch >> Include Library >> lalu pilih Manage Libraries..



    • Pada kolom search, ketik “PubSubClient” lalu install/Update ..


  • 3. Susun komponen sesuai dengan konfigurasi gambar 

 

 

4. Buka program Arduino lalu copy dan save code berikut. 

Catatan: Hapus space setelah tanda < setelah fungsi #include
#include < SPI.h> // memanggil library Spi ( Serial peripheral Interface) protokol komunikasi datas sercara serial
#include < PubSubClient.h> // memanggil library pubsubclient protokol untuk client dapat mengirim pesan ke server 
#include < Ethernet.h> // memanggil library ethernet

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x3B, 0xB6 }; 
byte ip[] = { 192, 168, xxx, xxx }; //Sesuaikan alamat IP dengan jaringan lokal
byte dns2[] = {8, 8, 8, 8};
byte gateway[] = { 192, 168, xxx, xxx }; // sesuaikan alamat ip dengan Gateway  jaringan 
int data1;
int pinButton = A0;
char pubschar1 [20];
char message_buff[250];
char message_buff_call[200];
EthernetClient ethClient; // deklarasi penamaan EthernetClient menjadi ethClient 
PubSubClient client("geeknesia.com", 1883, ethClient);// deklarasi alamat server, port MQTT, media yang digunakana 

char *deviceId = "device-cc3ce6eedf9e115869376c1589xxxxxx";  // isikan sesuai dengan device ID yang didapatkan dari geeknesia.com
char *Username = "ff6f6027d437cd63735e2ab6dexxxxxx";// isikan sesuai  dengan name yang didapatkan dari geeknesia.com
char *Password = "c989acc76f04651fec0485e5c3xxxxxx";//isikan sesuai dengan passord yang didapatkan dari geeknesia .com
String deviceCredential = String(Username) + ":" + String(Password);// deklarasi untuk mempermudah penggunana username dan penggunaan name dan password dalam kodingan

void setup()
{
  Serial.begin(9600); // deklarasi penggunaan boutrate serial
  delay(500);
  Ethernet.begin(mac, ip, dns2, gateway); // deklarasi penggunaan mac,ip,dns,dan gateway 
  pinMode(pinButton, INPUT_PULLUP); //deklarasi sebagai input dan dengan internal pull up
}

void senddata(char* topic,String credential, char *var1, String nilai1) //fungsi untuk mempermudah pada saat pengiriman data
{
  String pubString  = "{\"code\":\""; 
  pubString +=credential;  
  pubString +="\",";
  pubString +="\"attributes\":{\"";
  pubString +=String(var1)+"\":\""+nilai1+"\"";
  pubString +="}}";
  char message_buff[pubString.length()+1];
  pubString.toCharArray(message_buff, pubString.length()+1);
  client.publish("iot/data",message_buff);
  Serial.println(message_buff);    
}

void loop()
{
  if (!client.connected())// fungsi untuk mengecek apakah device sudah terhubung dengan server atau belum 
  {
    client.connect(deviceId, NULL, NULL, "iot/will", 2, 64, deviceId);
    Serial.println("Disconnect");
  }

  if (digitalRead(pinButton) == HIGH) //karena pin di setting sebagai input dengan internal pull-up maka ketika switch di tekan kondisi berubah ke logika 1 ( HIGH ) 
  {
    Serial.println("Aktif");
    data1 = digitalRead(2);
    senddata(deviceId,deviceCredential,"Status","Aktif");
    // data yang dikirim adalah deviceid, username dan password, attributes (pastikan attributes sesuai dengan apa yang di isi di geeknesia bagian device) , isi attributes yang akan ditampilkan
    delay(1000);
  }
  else if (digitalRead(pinButton) == LOW) // kondisi normal ketika switch tidak di tekan
  {
    Serial.println("Non-Aktif");
    data1 = digitalRead(2);
    senddata(deviceId,deviceCredential,"Status","Non Aktif");
    // data yang dikirim adalah deviceid, username dan password, attributes (pastikan attributes sesuai dengan apa yang di isi di geeknesia bagian device) , isi attributes yang akan ditampilkan
    delay(1000);
  }
}
 

5 Pastikan informasi attribute pada gateway anda seperti gambar di bawah ini :


 

6 Ganti device Id, user name, dan password pada coding dari gateway device anda.



7. Pengujian

·   Cek gateway device anda.

·   Button akan menampilkan status “aktif” jika saklar ditahan

·   Button akan menampilkan stauts “non aktif” jika dalam kondisi normal