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 2 MQTT - Kontrol device menggunakan API Geeknesia
Selain berfungsi untuk mengirimkan data sensor ke Geeknesia, device arduino pun dapat dikontrol dari Geeknesia. Contoh paling sederhana yaitu untuk mengontrol lampu on/off. Untuk dapat melakukan hal tersebut, perlu ditambahkan sebuah fungsi baru pada device arduino yaitu subscribe pada topik tertentu. Hal yang sangat penting adalah Arduino dapat terhubung dengan Internet.
Kelengkapan
- Arduino UNO dengan LAN Socket (Ethernet Shield)
- Kabel Data
- Kabel LAN (RJ45)
- Koneksi Internet
1. Pasang LED atau Relay pada pin 7 seperti gambar berikut
2. Arduino main code : (Download file dan program lengkap dalam bentuk .rar pada attachment dan unrar, sesuaikan konfigurasi pada program kemudian upload ke arduino)
#include <SPI.h> // memanggil library Spi ( Serial peripheral Interface) protokol komunikasi datas sercara serial
#include <Ethernet.h> // memanggil library ethernet
#include <PubSubClient.h> // memanggil library PubSubClient
// Settingan network(IP Address).
int pinLED =A0;// Menentukan pinLED yang akan digunakan
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
byte ip[] = { 192, 168, 100, 34 }; //Sesuaikan alamat IP dengan jaringan lokal
byte dns2[] = {8,8,8,8};
byte gateway[] = { 192, 168, 100, 1 }; // sesuaikan alamat ip dengan Gateway jaringan
char pubschar [20];
char message_buff[250];
char message_buff_call[200];
char *deviceId = "Device-Id"; // isikan sesuai dengan device ID yang didapatkan dari geeknesia.com
char *Username = "Username"; // isikan sesuai dengan name yang didapatkan dari geeknesia.com
char *Password = "Password"; //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
// Fungsi ini yang akan dipanggil oleh MQTT jika menerima data
// Pesan yang dikirim melalui MQTT tersimpan pada payload
// Oleh karena itupayload lah yang akan menampung perintah
// untuk device tersebut
void callback(char* topic, byte* payload, unsigned int length) // fungsi untuk menunggu data yang dikirimkan dari server
{
int i = 0;
for(i=0; i<length; i++)
{
message_buff_call[i] = payload[i];
}
message_buff_call[i] = '\0';
String msgString = String(message_buff_call);
Serial.println(msgString);
if(msgString.equals("ON")) // kondisi jika data yang dikirimkan dari server sama dengan "ON"
{
Serial.println("ON");
digitalWrite(pinLED,HIGH);
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
}
if(msgString.equals("OFF")) // kondisi jika data yang dikirimkan dari server sama dengan "OFF"
{
Serial.println("OFF");
digitalWrite(pinLED,LOW);
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
}
}
// Tambahkan PubSubClient object
EthernetClient ethClient;
PubSubClient client("geeknesia.com", 1883, callback, ethClient);
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 setup() {
Serial.begin(9600); // deklarasi boutrate yang dipakai untuk komunikasi serial
Ethernet.begin(mac, ip,dns2,gateway); //deklarasi mac, ip, dns, dan gateway
Serial.print("My IP address: ");
Serial.println(Ethernet.localIP());// memberi keluaran ip address
pinMode(pinLED,OUTPUT); // deklarasi pin LED sebagai Output
digitalWrite(pinLED,LOW);
}
// Jika mqtt client belum terkoneksi maka harus menjalankan fungsi
// connect dengan parameter device id yang ada pada detail device
// dan melakukan subscribe pada topic khusus untuk menerima pesan
// perintah untuk device tersebut
// perintah client.loop digunakan untuk memeriksa koneksi mqtt secara
// berkala dan mengubah return value dari fungsi client.connected
void loop() {
if (!client.connected())
{
client.connect("Device-Id"); // isikan sesuai device ID
client.subscribe("Published Topic"); // isikan sesuai Published Topic
}
client.loop();
}
3. Untuk editing program buka file "mainCode.ino"
4. IP sesuaikan dengan jaringan lokal yang sedang digunakan
5. Sesuaikan penamaan Button pada program Arduino dan website Geeknesia
6. Sesuaikan Device-Id dan Topic Published
7. "PubSubClient.cpp" dan "PubSubCLient.h" merupakan library tidak perlu di edit.
8. upload program ke arduino
9. Pengujian :
Jika klik Button ON, maka LED akan menyala dan Status
akan menampilkan “Aktif”.