0% found this document useful (0 votes)
3 views6 pages

Sensor Publisher Subscriber

The document provides instructions for using MQTT to send JSON data from an infrared sensor (Autonics BA2M-DDT) when an object is detected. It includes steps for installing the MQTT library, a sample C program for publishing data, and a subscriber program to receive and print the JSON messages. Additional notes on broker setup and monitoring are also included.

Uploaded by

semutmerah120197
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views6 pages

Sensor Publisher Subscriber

The document provides instructions for using MQTT to send JSON data from an infrared sensor (Autonics BA2M-DDT) when an object is detected. It includes steps for installing the MQTT library, a sample C program for publishing data, and a subscriber program to receive and print the JSON messages. Additional notes on broker setup and monitoring are also included.

Uploaded by

semutmerah120197
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 6

Pakai MQTT untuk kirim data dalam format JSON setiap kali sensor infrared (Autonics BA2M-

DDT) mendeteksi objek lewat.

1. Install Library MQTT (Paho C MQTT Client)

sudo apt update

sudo apt install libpaho-mqtt-dev

Pastikan broker MQTT seperti Mosquitto sudah aktif di lokal atau di server tujuan
(misalnya mqtt://192.168.1.100).

2. Contoh Program C – MQTT JSON Publisher

Berikut contoh program C-nya:

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

#define ADDRESS "tcp://192.168.1.100:1883" // Ganti dengan IP broker MQTT kamu


#define CLIENTID "Raspi_Tiang"
#define TOPIC "sensor/infrared"
#define QOS 1
#define TIMEOUT 10000L

#define SENSOR_TIANG_1 0 // GPIO17 (WiringPi pin 0)


#define SENSOR_TIANG_2 2 // GPIO27 (WiringPi pin 2)

MQTTClient client;

void send_mqtt_json(const char *tiang_id) {


char payload[256];
time_t now = time(NULL);
snprintf(payload, sizeof(payload),
"{\"tiang\":\"%s\",\"timestamp\":%ld}", tiang_id, now);
MQTTClient_message pubmsg = MQTTClient_message_initializer;
pubmsg.payload = payload;
pubmsg.payloadlen = (int)strlen(payload);
pubmsg.qos = QOS;
pubmsg.retained = 0;
MQTTClient_deliveryToken token;

MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token);


MQTTClient_waitForCompletion(client, token, TIMEOUT);
printf("MQTT Sent: %s\n", payload);
}

int main() {
// Setup GPIO
if (wiringPiSetup() == -1) {
printf("Gagal inisialisasi WiringPi\n");
return 1;
}

pinMode(SENSOR_TIANG_1, INPUT);
pinMode(SENSOR_TIANG_2, INPUT);
pullUpDnControl(SENSOR_TIANG_1, PUD_UP);
pullUpDnControl(SENSOR_TIANG_2, PUD_UP);

// Setup MQTT
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
int rc;

MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);


conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;

if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) {


printf("Gagal koneksi ke MQTT broker, code: %d\n", rc);
return -1;
}

int last_state1 = HIGH;


int last_state2 = HIGH;

while (1) {
int state1 = digitalRead(SENSOR_TIANG_1);
int state2 = digitalRead(SENSOR_TIANG_2);

if (state1 == LOW && last_state1 == HIGH) {


send_mqtt_json("tiang_1");
}

if (state2 == LOW && last_state2 == HIGH) {


send_mqtt_json("tiang_2");
}

last_state1 = state1;
last_state2 = state2;
delay(50);
}

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

return 0;
}

3. Catatan Tambahan:
 Broker MQTT bisa lokal (di Pi juga) atau di cloud (Mosquitto, HiveMQ, dll).
 Kamu bisa monitoring datanya pakai MQTT client seperti MQTT Explorer.
 Kalau mau topik-nya dibuat beda (misal sensor/tiang1, sensor/tiang2), tinggal ubah
TOPIC saat publish.
 Bisa juga disisipkan id_peserta, jarak, atau event tambahan ke JSON.
MQTT Subscriber – Bahasa C
1. Struktur Program
 Connect ke MQTT broker
 Subscribe ke topik (misalnya sensor/infrared)
 Print data JSON tiap kali ada pesan masuk

2. Contoh Kode C MQTT Subscriber


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

#define ADDRESS "tcp://192.168.1.100:1883" // Ganti dengan IP broker kamu


#define CLIENTID "Raspi_Subscriber"
#define TOPIC "sensor/infrared"
#define QOS 1
#define TIMEOUT 10000L

volatile int keepRunning = 1;

void msg_arrived(void *context, char *topicName, int topicLen, MQTTClient_message


*message) {
char *payload = (char *)message->payload;

printf("\nPesan Diterima:\n");
printf("Topik: %s\n", topicName);
printf("Payload: %.*s\n", message->payloadlen, payload);

MQTTClient_freeMessage(&message);
MQTTClient_free(topicName);
}

int main(int argc, char* argv[]) {


MQTTClient client;
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
int rc;

MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);


conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;

if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) {


printf("Gagal koneksi ke broker MQTT, code: %d\n", rc);
exit(EXIT_FAILURE);
}

MQTTClient_setCallbacks(client, NULL, NULL, msg_arrived, NULL);

if ((rc = MQTTClient_subscribe(client, TOPIC, QOS)) != MQTTCLIENT_SUCCESS) {


printf("Gagal subscribe ke topik, code: %d\n", rc);
exit(EXIT_FAILURE);
}

printf("Berhasil subscribe ke topik '%s'. Menunggu pesan...\n", TOPIC);

// Loop selamanya, tekan Ctrl+C untuk keluar


while (keepRunning) {
sleep(1);
}

MQTTClient_disconnect(client, 10000);
MQTTClient_destroy(&client);
return 0;
}

3. Build dan Jalankan


gcc -o mqtt_subscriber mqtt_subscriber.c -lpaho-mqtt3c
./mqtt_subscriber
4. Output Contoh
Jika data dikirim oleh tiang sebagai JSON:
{"tiang":"tiang_1","timestamp":1717525121}

Maka output terminal akan seperti:


Pesan Diterima:
Topik: sensor/infrared
Payload: {"tiang":"tiang_1","timestamp":1717525121}

You might also like