1 #include <ESP8266WiFi.h>
2 #include <PubSubClient.h>
Kemudian, kita perlu mendeklarasikan beberapa variabel global untuk
koneksi kita. Tentunya, kita, memerlukan kredensial untuk mengakses
WiFi, untuk menghubungkan diri ke jaringan WiFi. Berikut adalah
potongan kode yang digunakan untuk menyetel kredensial untuk
menghubung ke WiFi:
1 WiFiClient espClient;
2 PubSubClient client(espClient);
?
1 Serial.begin(115200);
2 WiFi.begin(ssid, password);
3 while (WiFi.status() != WL_CONNECTED) {
4 delay(500);
5 Serial.print("Connecting to WiFi..");
6 }
1 client.setServer(mqttServer, mqttPort);
1 client.setCallback(callback);
1 while (!client.connected()) {
2 Serial.println("Connecting to MQTT...");
3 if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {
4 Serial.println("connected");
5 } else {
7 Serial.println(client.state());
8 delay(2000);
9 }
}
10
1 client.subscribe("esp/test");
1 void setup() {
2 Serial.begin(115200);
3 WiFi.begin(ssid, password);
6 Serial.println("Connecting to WiFi..");
7 }
client.setServer(mqttServer, mqttPort);
9
client.setCallback(callback);
10
while (!client.connected()) {
11
Serial.println("Connecting to MQTT...");
12
if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {
13
Serial.println("connected");
14
} else {
15
Serial.print("failed with state ");
16
Serial.println(client.state());
17
delay(2000);
18 }
19 }
20 client.publish("esp/test", "Hello from ESP8266");
21 client.subscribe("esp/test");
22 }
23
Fungsi Callback
Setelah inisialisasi, kita perlu menentukan fungsi callback, yang akan
menangani pesan masuk dari topik yang kita subscribe.
Argumen dari fungsi ini adalah nama topik, payload (dalam byte) dan
ukuran dari pesannya. Fungsi ini mestinya cukup mengembalikan
void/kosong.
6 Serial.print((char)payload[i]);
7 }
8 Serial.println();
9 Serial.println("-----------------------");
}
10
Main loop
Pada fungsi main loop, kita hanya akan memanggil metode loop dari
PubSubClient. Fungsi ini harus dipanggil secara reguler agar
memungkinkan client untuk memproses pesan masuk dan menjaga
koneksinya dengan server.
?
1 void loop() {
2 client.loop();
3 }
1 #include <ESP8266WiFi.h>
2 #include <PubSubClient.h>
10 PubSubClient client(espClient);
11 void setup() {
12 Serial.begin(115200);
WiFi.begin(ssid, password);
13
while (WiFi.status() != WL_CONNECTED) {
14
delay(500);
15
Serial.println("Connecting to WiFi..");
16
}
17
Serial.println("Connected to the WiFi network");
18
client.setServer(mqttServer, mqttPort);
19
client.setCallback(callback);
20
while (!client.connected()) {
21 Serial.println("Connecting to MQTT...");
22 if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {
23 Serial.println("connected");
24 } else {
26 Serial.println(client.state());
27 delay(2000);
28 }
29 }
43 void loop() {
44 client.loop();
45 }
46
1 #include <ESP8266WiFi.h>
2 #include <PubSubClient.h>
delay(500);
19 Serial.println("Connecting to WiFi..");
20 }
22 client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
23
while (!client.connected()) {
24
Serial.println("Connecting to MQTT...");
25
if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {
26
Serial.println("connected");
27
} else {
28
Serial.print("failed with state ");
29
Serial.println(client.state());
30
delay(2000);
31 }
32 }
33 client.publish("esp/test", "Hello from ESP8266");
34 client.subscribe("esp/test");
35 client.subscribe("esp/saklar");
36 client.subscribe("esp/dimmer");
37 }
Serial.println(topic);
40
Serial.print("Message:");
41
for (int i = 0; i < length; i++) {
42
Serial.print((char)payload[i]);
43
}
44
Serial.println();
45
Serial.println("-----------------------");
46
if (strcmp(topic,"esp/saklar")==0){
47
if((char)payload[0] == '1')
48 {
49 digitalWrite(D1, HIGH);
50 Serial.println("Turning on lamp");
51 }
52 else{
53 digitalWrite(D1, LOW);
66 NOW = millis();
68 dataSensor = analogRead(A0);
70 if(dataSensorMapped != dataSensorMappedBefore){
87 delay(2000);
88 }
89 }
90 }
91
92
93
cloudmqtt_websocket_ui.jpg
Web Interfacing
Setelah dapat dilakukan kontrol dan monitoring perangkat IoT
melalui Internet, selanjutnya pada sesi ini dilanjutkan dengan
membuat antarmuka web moderen sederhana untuk kontrol &
monitoring sistem IoT yang telah dibuat.
tampilan_web_interface_untuk_kontrol_monitoring.jpg
Tampilan yang dibuat menggunakan beberapa framework pemrograman web seperti Bootstrap 3
untuk membuat komponen UI seperti tombol, slider dan progress bar, juga framework javascript
jQuery untuk memanipulasi data dan MQTTPaho untuk menangani koneksi dan integrasi dengan
CloudMQTT. File yang berisi kode sumber web interface telah disediakan untuk mempermudah
pengujian, pada file index.html perlu dilakukan beberapa penyesuaian seperti alamat server, nomer
port, username dan password dari instance CloudMQTT kita. Berikut adalah kode lengkap dari file
index.html yang berisi web interface:
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="utf-8">
17 <!--[if lt IE 9]>
18 <script src="<a href="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js">https://oss.maxcdn.com/ht
20 <![endif]-->
21 <script type="text/javascript">
jQuery(document).ready(function(){
22
// Create a client instance
23
client = new Paho.MQTT.Client("postman.cloudmqtt.com", 38155,"WebIface");
24
//Example client = new Paho.MQTT.Client("m11.cloudmqtt.com", 32903, "web_" + parseInt(Math.random() *
25
// set callback handlers
26
client.onConnectionLost = onConnectionLost;
27
client.onMessageArrived = onMessageArrived;
28
var options = {
29
useSSL: true,
30 userName: "isi username",
31 password: "isi password",
32 onSuccess:onConnect,
33 onFailure:doFail
34 }
36 client.connect(options);
function onConnect() {
38
// Once a connection has been made, make a subscription and send a message.
39
console.log("onConnect");
40
client.subscribe("/cloudmqtt");
41
client.subscribe("esp/sensor");
42
/*message = new Paho.MQTT.Message("Hello CloudMQTT");
43
message.destinationName = "/cloudmqtt";
44
client.send(message);*/
45
}
46
function doFail(e){
47 console.log(e);
48 }
49 // called when the client loses its connection
50 function onConnectionLost(responseObject) {
52 console.log("onConnectionLost:"+responseObject.errorMessage);
}
53
}
54
// called when a message arrives
55
function onMessageArrived(message) {
56
console.log("onMessageArrived:"+message.payloadString);
57
if(message.destinationName == "esp/sensor"){
58
$('#pgbar-sensor').css({'width': message.payloadString+'%'});
59
$('#pgbar-sensor').attr({'aria-valuenow': message.payloadString});
60
$('#pgbar-sensor').html(message.payloadString+'%');
61 }
62 }
63 });
64 </script>
65 <style type="text/css">
66 .slider.slider-horizontal {
67 width: 100%;
68 height: 20px;
}
69
.text-bold {
70
font-weight: bold;
71
}
72
</style>
73
</head>
74
<body>
75
<div class="container">
76
<div class="row">
77
<div class="col-sm-12 text-center">
78 <h1>My IoT Dashboard</h1>
79 <hr>
80 <div class="panel panel-primary">
82 <div class="panel-body">
83 <div class="progress">
96 <hr>
97 <div class="form-group">
99 </div>
100 </div>
</div>
101
</div>
102
<
103
</div>
104
</div>
105
<!-- Include all compiled plugins (below), or include individual files as needed -->
106
<script src="js/bootstrap.min.js"></script>
107
<script src="js/bootstrap-toggle.min.js"></script>
108
<script src="js/bootstrap-slider.min.js"></script>
109 <script type="text/javascript">
110 // jQuery Script
111
112
113
114
115 jQuery(document).ready(function(){
116 $("#slider-dimmer").slider();
130
131
132
133
Kode program dari Web Interface yang telah dibuat dapat diakses
secara lokal melalui komputer/laptop. Namun untuk implementasi
riil, interface ini dapat diunggah secara privat ke internet sehingga
dapat diakses melalui alamat domain, misalnya seperti
dashboardsaya.com. Dengan demikian, antarmuka dapat diakses dari
mana saja melalui perangkat apapun yang mendukung teknologi web
modern.
Ringkasan
Pada pelatihan ini kita mempelajari microcontroller basic dan internet
of things. Mikrokontroler dipelajari karena teknologi IoT pada
umumnya menggunakan mikrokontroler sebagai perangkat keras
pengambil data dan pengendali instrument yang hendak dihubungkan
ke Internet. Teknologi IoT memungkinkan segala macam benda mati
maupun benda hidup untuk memiliki kemampuan komputasi dan
terhubung satu sama lain. Dengan demikian, mereka dapat saling
bertukar data dan meningkatkan fungsi dan efisiensi.
Secara teknis, kita menggunakan NodeMCU sebagai development
board untuk mempermudah percobaan implementasi teknologi IoT,
dibantu dengan Arduino IDE untuk memprogram. Selanjutnya,
CloudMQTT mengambil peran sebagai broker online yang bertindak
sebagai penengah antara alat kita dan web interface yang kita buat.
Sehingga antara alat kita dan web interface yang berisi tampilan
berupa tombol, slider dan progress bar dapat berinteraksi dengan alat
kita secara online melalui Internet. Apabila kita memiliki banyak alat,
maka masing-masing alat juga dapat berinteraksi satu sama lain tanpa
melibatkan manusia di dalamnya. Mereka dapat bertukar data melalui
metode publish dan subscribe dari library client MQTT yang kita pakai
yaitu PubSubClient.
Selanjutnya, apa yang telah kira pelajari pada pelatihan ini dapat
memberikan kita bayangan, bagaimana suatu benda mati/hidup dapat
ditingkatkan fungsi dan efisiensinya menggunakan teknologi IoT. Kita
dapat menambahkan lebih banyak lagi perangkat sensor dan aktuator
untuk mencapai tujuan di dunia nyata, seperti yang telah dipaparkan
pada bagian pengenalan IoT. Teknologi IoT dapat digunakan di semua
bidang, mulai dari bisnis, kesehatan, pertanian, hingga rumahan dan
edukasi. Berbagai materi dan pengetahuan tambahan mengenai
konsep, arsitektur, hingga tutorial untuk implementasi teknis dari
teknologi IoT telah tersedia melimpah di Internet.