IOT Basic Tutorial
Last updated: January 31 th, 2017
Geeknesia Microcontroller & IOT Starter 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.
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 :
- Lakukan registrasi untuk device baru berdasarkan petunjuk di link ini Register, Create New Project, Create New Gateway dan"Create New 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