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


Script 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


Kemudian pilih file library yang telah di download sebelumnya.


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.


Jika sudah terinstall cara membuka Copper klik toollbar pada pojok kanan atas layar PC, kemudian akn muncul seperti gambar di bawah, 
1. Copy link yang muncul pada Copper
2. Kemudian paste


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".


Ketika di klik Ping maka akan terlihat pada Serial Monitor Arduino nilai yang tertampil akan bertambah ketika di klik Ping.