Reading requirement :
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
Pasang LED atau Relay pada pin 7 seperti gambar berikut

Arduino main code : (Download file dan program lengkap dalam bentuk .rar pada attachment dan unrar, sesuaikan konfigurasi pada program kemudian upload ke arduino)
//Import library dan deklarasi program.
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
// Settingan network(IP Address).
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
byte ip[] = { 192, 168, 100, 2 };
byte dns2[] = {8,8,8,8};
byte gateway[] = { 192, 168, 100, 1 };
char pubschar [20];
char message_buff[250];
char message_buff_call[200];
// Tambahkan PubSubClient object
EthernetClient ethClient;
PubSubClient client("geeknesia.com", 1883, callback, ethClient);
//Dibagian ini adalah bagian setup pada program, setup baud rate
// serial,setupEthernet,atau menambahkan serial print debugging
// program.
void setup() {
Serial.begin(9600);
Ethernet.begin(mac, ip,dns2,gateway);
Serial.print("My IP address: ");
Serial.println(Ethernet.localIP());
pinMode(7,OUTPUT);
digitalWrite(7,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");
client.subscribe("PUBLISHED TOPIC");
}
client.loop();
}
// 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)
{
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"))
{
Serial.println("ON");
digitalWrite(7,HIGH);
}
if(msgString.equals("off"))
{
Serial.println("OFF");
digitalWrite(7,LOW);
}
}
Untuk melakukan pengiriman perintah tersebut ke device, Anda dapat menekan tombol action pada detail device yang bersangkutan.
NB : Anda harus mengganti DEVICE-ID dan PUBLISHED TOPIC sesuai dengan device yang anda gunakan. Untuk memeriksa apakah perintah kontrol masuk atau tidak, dapat dilihat pada serial monitor arduino.