MQTT dan COAP keduanya digunakan sebagai protokol IoT, namun terdapat perbedaan mendasar.
MQTT => Bisa digunakan untuk banyak komunikasi protokol dalam pengiriman informasi antara beberapa client, melalui central broker,MQTT memiliki dukungan,seperti memiliki komunikasi bus yang baik untuk live data.
COAP => Menggunakan komunikasi antar protokol untuk mengirim informasi antara client dan server, COAP lebih cocok untuk model pengalihan informasi,tidak mengambil live data atau real time data.
berikut contoh aplikasi yang menghubungkan arduino dengan broker COAP.
Alat dan bahan yang diperlukan
1. Arduino Mega
2. Ethernet Shield
3. Kabel LAN
4. Kabel Data (untuk upload program)
Download File Microcoap
Download file coap library pada link di bawah ini
https://github.com/1248/microcoap
buka file code arduino
/* * WARNING - UDP_TX_PACKET_MAX_SIZE is hardcoded by Arduino to 24 bytes * This limits the size of possible outbound UDP packets */ #include <SPI.h> #include <Ethernet.h> #include <stdint.h> #include <EthernetUdp.h> #include "coap.h" #define PORT 5683 static uint8_t mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02}; EthernetClient client; EthernetUDP udp; uint8_t packetbuf[256]; static uint8_t scratch_raw[32]; static coap_rw_buffer_t scratch_buf = {scratch_raw, sizeof(scratch_raw)}; void setup() { int i; Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } // start the Ethernet connection: if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP"); while(1); } Serial.print("My IP address: "); for (i=0;i<4;i++) { Serial.print(Ethernet.localIP()[i], DEC); Serial.print("."); } Serial.println(); udp.begin(PORT); coap_setup(); endpoint_setup(); } void udp_send(const uint8_t *buf, int buflen) { udp.beginPacket(udp.remoteIP(), udp.remotePort()); while(buflen--) udp.write(*buf++); udp.endPacket(); } void loop() { int sz; int rc; coap_packet_t pkt; int i; if ((sz = udp.parsePacket()) > 0) { udp.read(packetbuf, sizeof(packetbuf)); for (i=0;i<sz;i++) { Serial.print(packetbuf[i], HEX); Serial.print(" "); } Serial.println(""); if (0 != (rc = coap_parse(&pkt, packetbuf, sz))) { Serial.print("Bad packet rc="); Serial.println(rc, DEC); } else { size_t rsplen = sizeof(packetbuf); coap_packet_t rsppkt; coap_handle_req(&scratch_buf, &pkt, &rsppkt); memset(packetbuf, 0, UDP_TX_PACKET_MAX_SIZE); if (0 != (rc = coap_build(packetbuf, &rsplen, &rsppkt))) { Serial.print("coap_build failed rc="); Serial.println(rc, DEC); } else { udp_send(packetbuf, rsplen); } } } }
Add library, klik Sketch => Include Library => Add ,ZIP Library
Jika langsung compile default script pasti akan terjadi error, masuk ke C:\Users\Documents\Arduino\libraries\microcoap-master, kemudian hapus file main-posix.c , karena file tersebut digunakan untuk OS X/Linux.
Wiring Arduino
Pasang ethernet shield pada Arduino Mega, masukan kabel data dan kabel LAN yang telah disiapkan, kemudian Upload script.
Install Copper (Firefox Plugin)
Sebelum melanjutkan pengetesan kita harus menentukan broker yang akan dipakai, pada tutorial ini menggunakan Copper (Firefox Plugin).
Buka Firefox kemudian tambahkan Copper(Firefox Plugin) seperti gambar di bawah.
Kemudian akan muncul halaman seperti pada gambar.
Kemudian kembali ke program Arduino , Pilih Serial Monitor untuk melihat IP Address Arduino yang anda gunakan.
Catatan Penting:
"IP Address yang tertampil di serial monitor Arduino bukan IP address static melainkan dinamic (DHCP), jadi address 192.168.2.109 adalah IP yang didapat dari hasil percobaan ,jika anda mencoba pasti IP nya akan berbeda."
Kemudian buka Copper (Fiirefox Plugin), masukan IP Address Arduino 192.168.2.109 atau IP Address yang anda dapatkan, ikuti gambar di bawah ini.
coap://vs0.inf.ethz.ch/ ganti dengan coap://192.168.2.109:5683/
Klik Ping jika sudah terhubung dengan IP Address Arduino maka akan muncul "Pong: Remote responds to CoAP".