Pada tulisan ini kita akan bereksperimen dengan library MQTT Client yang bernama Paho dari Eclypse. Kita akan mencoba mem-PUBLISH data ke MQTT Broker menggunakan program yang kita buat menggunakan kompiler ANSI C for Windows Pelles C.

Sekilas Tentang Paho MQTT C Client

Paho adalah library MQTT Client yang ditulis dalam bahasa ANSI C. Pada awalnya, Ian Craggs penyusun library ini, menulis library ini dalam bahasa C++. Tapi demi memaksimalkan derajat portabilitas library ini, maka Ian Craggs memutuskan untuk beralih dari C++ ke C. Namun demikian, tersedia API untuk C++.

Library ini memiliki 2 versi API, yakni: Synchronous (sinkron) dan Asynchronous (asinkron). Pemanggilan fungsi-fungsi versi sinkron diawali dengan MQTTClient sedangkan fungsi-fungsi versi asinkron diawali dengan MQTTAsync.

API versi sinkron dibuat agar pemrograman menjadi lebih sederhana. Pemanggilan fungsi sinkron akan menyebabkan program terblokir (terhenti sementara) hingga pemanggilan fungsi selesai. Oleh karenanya sangat mudah membuat program dengan API versi sinkron.

Untuk menunggu pemanggilan fungsi selesai, disediakan fungsi waitForCompletion. Jadi dengan fungsi ini, API versi asinkron pun bisa jadi sinkron.

Pada eksperimen ini kita akan menggunakan versi sinkron saja supaya lebih mudah.

Paket binary dan source code library Paho MQTT C Client dapat didownload dari link berikut ini:

https://github.com/eclipse/paho.mqtt.c/releases

Sebelum tulisan ini, saya menggunakan library Paho versi 1.3.0. Namun pada eksperimen ini saya menggunakan versi terbaru yakni versi 1.3.9. Jadi sekalian update.

MQTT Broker

Untuk MQTT Broker atau MQTT Cloud, pada eksperimen ini kita akan gunakan shiftr.io. Saya sudah membuat akun Free Plan dengan Group: teknikelektrolinks, Instance: telinks dengan alamat telinks.cloud.shiftr.io dengan sebuah token seperti ditampilkan pada screenshot berikut ini.

Program kita nantinya bertugas untuk membuka koneksi ke Instance telinks dengan alamat tcp://telinks.cloud.shiftr.io port 1883. Dan setelah koneksi terjalin, program akan mem-PUBLISH beberapa data ke cloud.

Jika kita tuliskan urutan tugas program adalah sebagai berikut:

  1. Connect (buka koneksi) ke tcp://telinks.cloud.shiftr.io
  2. Jika koneksi terjalin maka lanjut ke langkah 3, jika tidak maka tampilkan error dan Selesai
  3. Komposisikan Publish Message dengan data Topic dan Payload
  4. Publish
  5. Disconnect
  6. Selesai

Topic dan Payload

Untuk Instance: telinks dengan Token: paho-pellesc-testing, kita akan membuat beberapa topic, yakni:

  • alive – sekedar untuk menyatakan bahwa MQTT Client aktif
  • room1/temp – suhu ruangan room1
  • room2/temp – suhu ruangan room2

Kode Program

/*
   Testing PUBLISH menggunakan library Paho MQTT C Client
   Chandra MDE - teknikelektrolinks.com
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "MQTTClient.h"

#define ADDRESS     "tcp://telinks.cloud.shiftr.io:1883"
#define CLIENTID    "Chandra-MDE"
#define TOPIC1      "paho-pellesc-testing/alive"
#define TOPIC2      "paho-pellesc-testing/room1/temp"
#define TOPIC3      "paho-pellesc-testing/room2/temp"
#define PAYLOAD1	"I'm Alive!"
#define QOS         1
#define TIMEOUT     10000L

int main(int argc, char* argv[])
{
    printf("Nyobain Eclipse Paho MQTT C Client Library.\n");
    printf("PUBLISH ke telinks.cloud.shiftr.io\n");
    printf("Chandra MDE - teknikelektrolinks.com\n");
    printf("MQTT Broker: shiftr.io\n\n");

    MQTTClient client;
    MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
    MQTTClient_message pubmsg = MQTTClient_message_initializer;
    MQTTClient_deliveryToken token;

    int rc, randomtemp;
    char strtemp[3];

    MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);
    conn_opts.keepAliveInterval = 30;
    conn_opts.cleansession = 1;
    conn_opts.username = "telinks";
    conn_opts.password = "yPQURweLcU8cJSCR";

    //buka koneksi
    if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
    {
        printf("Koneksi tidak berhasil, return code %d\n", rc);
        exit(EXIT_FAILURE);
    }

    for (int i=0; i<3; i++)
    {
        //publish ke paho-pellesc-testing/alive
        printf("\nPublish %s, pada TOPIC: %s\n", PAYLOAD1, TOPIC1);
        pubmsg.payload = PAYLOAD1;
        pubmsg.payloadlen = (int)strlen(PAYLOAD1);
        pubmsg.qos = QOS;
        pubmsg.retained = 0;
        MQTTClient_publishMessage(client, TOPIC1, &pubmsg, &token);
        printf("Pesan dengan token %d delivered\n", token);

        //buat data room1/temperature secara acak
        randomtemp = rand()%40 + 20;
        sprintf(strtemp, "%d", randomtemp);

        pubmsg.payload = strtemp;
        pubmsg.payloadlen = (int)strlen(strtemp);
        pubmsg.qos = QOS;
        pubmsg.retained = 0;
        printf("\nPublish %s, pada TOPIC: %s\n", strtemp, TOPIC2);  	
        MQTTClient_publishMessage(client, TOPIC2, &pubmsg, &token);
        printf("Pesan dengan token %d delivered\n", (int)token);

        //buat data room2/temperature secara acak
        randomtemp = rand()%50 + 15;
        sprintf(strtemp, "%d", randomtemp);

        pubmsg.payload = strtemp;
        pubmsg.payloadlen = (int)strlen(strtemp);
        pubmsg.qos = QOS;
        pubmsg.retained = 0;
        printf("\nPublish %s, pada TOPIC: %s\n", strtemp, TOPIC3);  	
        MQTTClient_publishMessage(client, TOPIC3, &pubmsg, &token);
        printf("Pesan dengan token %d delivered\n", (int)token);

        _sleep(2);
    }

    MQTTClient_disconnect(client, 10000);
    MQTTClient_destroy(&client);

    return rc;
}

Kode program tersebut saya tulis dan kompilasi menggunakan ANSI C Compiler for Windows Pelles C.

Hasil Eksekusi

Screenshot di bawah ini adalah tampilan Dashboard telinks.cloud.shiftr.io sebelum program publisher dijalankan.

Dan screenshot console berikut ini adalah hasil eksekusi dari program MQTT C Client.

Dengan berhasilnya koneksi dan pengiriman data (publish) ke telinks.cloud.shiftr.io, maka tampilan Dashboard pun berubah sesuai dengan adanya traffic data yang diterima. Screenshot-nya bisa dilihat pada gambar berikut ini.

Dengan munculnya animasi data yang di-publish oleh program ke telinks.cloud.shiftr.io, maka sekarang saatnya kita mengucapkan:

Alhamdulillaah, berhasil.

Nah, demikianlah laporan singkat eksperimen pemrograman IoT menggunakan library Paho MQTT C Client.

Eksperimen ini hanyalah sekedar mem-PUBLISH data saja. Pada eksperimen selanjutnya, kita akan mencoba men-SUBSCRIBE dan membaca data dari MQTT Broker.

Sampai jumpa pada tulisan selanjutnya. Semoga bermanfaat.

Pelatihan PRIVAT Online

Kami melayani Pelatihan/Bimbingan PRIVAT Online untuk materi-materi pemrograman dan perancangan sistem berbasis mikrokontroler (Arduino, 8051, STM8, PIC).

Jika Anda membutuhkan pelatihan atau bimbingan, silakan menghubungi kami melalui Whatsapp 0882-3560-7047.