{"id":1188,"date":"2020-02-19T09:04:49","date_gmt":"2020-02-19T02:04:49","guid":{"rendered":"http:\/\/wiki.rdd-tech.com\/?post_type=ht_kb&#038;p=1188"},"modified":"2020-08-18T13:51:57","modified_gmt":"2020-08-18T06:51:57","slug":"pengenalan-mqtt","status":"publish","type":"ht_kb","link":"https:\/\/wiki.rdd-tech.com\/index.php\/knowledge-base\/pengenalan-mqtt\/","title":{"rendered":"Pengenalan MQTT"},"content":{"rendered":"\n<h3 id=\"1-apa-itu-mqtt\" >1. Apa itu MQTT?<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote\"><p>MQTT adalah singkatan dari <em>MQ Telemetry Transport<\/em> yaitu sebuah protokol jaringan <em>publish-subscribe<\/em> yang dapat mengirimkan pesan antar perangkat, bersifat terbuka (<em>open<\/em>), berstandar ISO (ISO\/IEC PRF 20922) dan berbobot ringan dan biasanya beroperasi pada TCP\/IP.<\/p><cite> <a href=\"https:\/\/en.wikipedia.org\/wiki\/MQTT\">https:\/\/en.wikipedia.org\/wiki\/MQTT<\/a> <\/cite><\/blockquote>\n\n\n\n<p>MQTT pada data telemetri berfungsi sebagai pengumpul data (<em>broker<\/em>) dari berbagai perangkat yang terhubung padanya.<\/p>\n\n\n\n<h3 id=\"2-aplikasi-mqtt-pada-arduino-iot\" >2. Aplikasi MQTT pada Arduino IoT<\/h3>\n\n\n\n<p>Penerapan MQTT juga bisa diterapkan pada platform mikrokontroler <em>mainstream<\/em> contohnya Arduino. Terdapat banyak penyedia layanan MQTT gratis contohnya HiveMQ ( <a href=\"http:\/\/www.hivemq.com\/demos\/websocket-client\/\">http:\/\/www.hivemq.com\/demos\/websocket-client<\/a>) namun seperti pepatah mengatakan &#8220;ada harga ada barang&#8221; layanan MQTT gratis biasanya tidak aman <em>(secure<\/em>) karena data yang dikirim dan diterima tidak di-<em>encrypt<\/em> sama sekali sehingga orang lain dapat dengan mudah mengakses data kita dengan mudah. Berikut dibawah ini merupakan contoh pengaplikasian MQTT pada Arduino MKR1000.<\/p>\n\n\n\n<p>Alat dan bahan yang dibutuhkan:<\/p>\n\n\n\n<ol><li>Arduino MKR1000 development board @ 1 unit<\/li><li>Arduino IDE<\/li><li>PC @ 1 unit<\/li><li>Koneksi WiFi<\/li><\/ol>\n\n\n\n<p>Upload program dibawah ini.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;WiFi101.h>\r\n#include &lt;PubSubClient.h>\r\n\r\n\/\/ Update these with values suitable for your network.\r\n\r\nconst char* ssid = \"SSID\";\r \/\/ wifi name\nconst char* password = \"PASSWORD\";\r \/\/wifi password\nconst char* mqtt_server = \"broker.mqttdashboard.com\";\r\n\r\n\r\nWiFiClient MKRClient;\r\nPubSubClient client(MKRClient);\r\n\/\/IPAddress IP(192,168,1,23);\r\nIPAddress ReadIP;\r\nlong lastMsg = 0;\r\nchar msg&#91;50];\r\nint value = 0;\r\n\r\nvoid setup_wifi() {\r\n\r\n  delay(10);\r\n  \/\/ We start by connecting to a WiFi network\r\n  Serial.println();\r\n  Serial.print(\"Connecting to \");\r\n  Serial.println(ssid);\r\n\r\n  WiFi.begin(ssid, password);\r\n\r\n  while (WiFi.status() != WL_CONNECTED) {\r\n    delay(500);\r\n    Serial.print(\".\");\r\n  }\r\n\r\n  randomSeed(micros());\r\n\r\n  Serial.println(\"\");\r\n  Serial.println(\"WiFi connected\");\r\n  Serial.println(\"IP address: \");\r\n  ReadIP = WiFi.localIP();\r\n  Serial.println(ReadIP);\r\n}\r\n\r\nvoid callback(char* topic, byte* payload, unsigned int length) {\r\n  Serial.print(\"Message arrived &#91;\");\r\n  Serial.print(topic);\r\n  Serial.print(\"] \");\r\n  for (int i = 0; i &lt; length; i++) {\r\n    Serial.print((char)payload&#91;i]);\r\n  }\r\n  Serial.println();\r\n\r\n  \/\/ Switch on the LED if an 1 was received as first character\r\n  if ((char)payload&#91;0] == '1') {\r\n    digitalWrite(LED_BUILTIN, LOW);   \/\/ Turn the LED on (Note that LOW is the voltage level\r\n    \/\/ but actually the LED is on; this is because\r\n    \/\/ it is active low on the ESP-01)\r\n  } else {\r\n    digitalWrite(LED_BUILTIN, HIGH);  \/\/ Turn the LED off by making the voltage HIGH\r\n  }\r\n\r\n}\r\n\r\nvoid reconnect() {\r\n  \/\/ Loop until we're reconnected\r\n  while (!client.connected()) {\r\n    Serial.print(\"Attempting MQTT connection...\");\r\n    \/\/ Create a random client ID\r\n    String clientId = \"MKR1000Client-\";\r\n    clientId += String(random(0xffff), HEX);\r\n    \/\/ Attempt to connect\r\n    if (client.connect(clientId.c_str(),\"mqtt_user\",\"mqtt_password\")) {\r\n      Serial.println(\"connected\");\r\n      \/\/ Once connected, publish an announcement...\r\n      client.publish(\"outTopic\", \"hello world\");\r\n      \/\/ ... and resubscribe\r\n      client.subscribe(\"RDD\/inTopic\");\r\n    } else {\r\n      Serial.print(\"failed, rc=\");\r\n      Serial.print(client.state());\r\n      Serial.println(\" try again in 5 seconds\");\r\n      \/\/ Wait 5 seconds before retrying\r\n      delay(5000);\r\n    }\r\n  }\r\n}\r\n\r\nvoid setup() {\r\n  \/\/WiFi.config(IP);\r\n  pinMode(LED_BUILTIN, OUTPUT);     \/\/ Initialize the LED_BUILTIN pin as an output\r\n  Serial.begin(115200);\r\n  setup_wifi();\r\n  client.setServer(mqtt_server, 1883);\r\n  client.setCallback(callback);\r\n}\r\n\r\nvoid loop() {\r\n\r\n  if (!client.connected()) {\r\n    reconnect();\r\n  }\r\n  client.loop();\r\n\r\n  long now = millis();\r\n  if (now - lastMsg > 2000) {\r\n    lastMsg = now;\r\n    ++value;\r\n    snprintf (msg, 50, \"hello world #%ld\", value);\r\n    Serial.print(\"Publish message: \");\r\n    Serial.println(msg);\r\n    client.publish(\"RDD\/outTopic\", msg);\r\n  }\r\n}<\/code><\/pre>\n\n\n\n<p>Selanjutnya adalah akseslah  <a href=\"http:\/\/www.hivemq.com\/demos\/websocket-client\/\">http:\/\/www.hivemq.com\/demos\/websocket-client\/<\/a>  pada web browser. Maka akan muncul tampilan sebagai berikut.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"989\" height=\"585\" src=\"http:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture0.png\" alt=\"\" class=\"wp-image-1190\" srcset=\"https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture0.png 989w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture0-300x177.png 300w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture0-768x454.png 768w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture0-50x30.png 50w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture0-920x544.png 920w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture0-600x355.png 600w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture0-320x189.png 320w\" sizes=\"(max-width: 989px) 100vw, 989px\" \/><figcaption>HiveMQ MQTT dasboard<\/figcaption><\/figure>\n\n\n\n<p>Lalu tekan Connect, maka bulatan merah akan berubah menjadi hijau yang menandakan HiveMQ telah tersambung.<\/p>\n\n\n\n<p>Klik tanda panah kebawah (vv) pada subscriptions maka akan muncul seperti dibawah.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"944\" height=\"360\" src=\"http:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture1-1.png\" alt=\"\" class=\"wp-image-1192\" srcset=\"https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture1-1.png 944w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture1-1-300x114.png 300w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture1-1-768x293.png 768w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture1-1-50x19.png 50w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture1-1-920x351.png 920w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture1-1-600x229.png 600w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture1-1-320x122.png 320w\" sizes=\"(max-width: 944px) 100vw, 944px\" \/><figcaption>HiveMQ subscription<\/figcaption><\/figure>\n\n\n\n<p>Lalu, tambahkan subscription dengan mengklik add new topic Subcription. Maka akan muncul seperti pada gambar dibawah.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"623\" height=\"253\" src=\"http:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture2.png\" alt=\"\" class=\"wp-image-1193\" srcset=\"https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture2.png 623w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture2-300x122.png 300w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture2-50x20.png 50w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture2-600x244.png 600w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/02\/Capture2-320x130.png 320w\" sizes=\"(max-width: 623px) 100vw, 623px\" \/><figcaption>Form topik subscription<\/figcaption><\/figure>\n\n\n\n<p>Isilah test topic dengan &#8220;RDD\/outTopic&#8221; dan QoS nya disetting 0. Lalu klik tombol Subscribe. Setelah diklik maka data akan muncul pada kolom messages seperti pada gambar dibawah. Jika tidak muncul coba klik tanda panah kebawah disamping kolom messages.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"549\" src=\"https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/08\/SS_HiveMQ_1-1024x549.png\" alt=\"\" class=\"wp-image-1413\" srcset=\"https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/08\/SS_HiveMQ_1-1024x549.png 1024w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/08\/SS_HiveMQ_1-300x161.png 300w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/08\/SS_HiveMQ_1-768x412.png 768w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/08\/SS_HiveMQ_1-50x27.png 50w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/08\/SS_HiveMQ_1-1536x824.png 1536w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/08\/SS_HiveMQ_1-920x494.png 920w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/08\/SS_HiveMQ_1-600x322.png 600w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/08\/SS_HiveMQ_1-320x172.png 320w, https:\/\/wiki.rdd-tech.com\/wp-content\/uploads\/2020\/08\/SS_HiveMQ_1.png 1920w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"author":4,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0},"ht_kb_category":[10],"ht_kb_tag":[],"_links":{"self":[{"href":"https:\/\/wiki.rdd-tech.com\/index.php\/wp-json\/wp\/v2\/ht_kb\/1188"}],"collection":[{"href":"https:\/\/wiki.rdd-tech.com\/index.php\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/wiki.rdd-tech.com\/index.php\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/wiki.rdd-tech.com\/index.php\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/wiki.rdd-tech.com\/index.php\/wp-json\/wp\/v2\/comments?post=1188"}],"version-history":[{"count":6,"href":"https:\/\/wiki.rdd-tech.com\/index.php\/wp-json\/wp\/v2\/ht_kb\/1188\/revisions"}],"predecessor-version":[{"id":1415,"href":"https:\/\/wiki.rdd-tech.com\/index.php\/wp-json\/wp\/v2\/ht_kb\/1188\/revisions\/1415"}],"wp:attachment":[{"href":"https:\/\/wiki.rdd-tech.com\/index.php\/wp-json\/wp\/v2\/media?parent=1188"}],"wp:term":[{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/wiki.rdd-tech.com\/index.php\/wp-json\/wp\/v2\/ht_kb_category?post=1188"},{"taxonomy":"ht_kb_tag","embeddable":true,"href":"https:\/\/wiki.rdd-tech.com\/index.php\/wp-json\/wp\/v2\/ht_kb_tag?post=1188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}