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

  1. Arduino UNO dengan LAN Socket (Ethernet Shield)
  2. Kabel Data
  3. Kabel LAN (RJ45) 
  4. 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.