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.