Ebook Internet of Things Dengan ESP8266 Arduino MQTT JS Web PHP Bootstrap Dan MySQL
Ebook Internet of Things Dengan ESP8266 Arduino MQTT JS Web PHP Bootstrap Dan MySQL
Penyusun:
Ajang Rahmat
Daftar Isi
Daftar Isi..................................................................................................................... 1
Profil Penyusun......................................................................................................... 2
A. Persiapan Sebelum Tempur................................................................................. 3
A.1. Penginstalan Arduino IDE...............................................................................3
A.2. Add Library Board ESP8266 pada Arduino IDE............................................. 3
A.3. Penginstalan XAMPP......................................................................................4
A.4. Penginstalan Sublime Code Editor................................................................. 5
Komponen Yang Digunakan................................................................................................. 6
B. Merangkai dan Testing Hardware........................................................................ 7
B.1. Membaca Nilai Sensor Cahaya LDR.............................................................. 7
B.2. Menyalakan Lampu Melalui Relay.................................................................. 9
B.3. Menghubungkan ke WiFi & MQTT Broker.................................................... 10
C. Final Rangkaian dan Final Program.................................................................. 13
C.1. Final Rangkaian Alat.....................................................................................13
C.2. Final Program Arduino..................................................................................13
C.2.1. Menambahkan Library:.........................................................................13
C.2.2. Konfigurasi WiFi dan MQTT:................................................................ 14
C.2.3. Membuat Object, Konfigurasi Pin dan Variabel Millis:.......................... 15
C.2.4. Fungsi Koneksi WiFi.............................................................................15
C.2.5. Fungsi Koneksi MQTT..........................................................................16
C.2.6. Fungsi Menerima Pesan MQTT........................................................... 17
C.2.7. Fungsi Membaca dan Mengirim Data Sensor...................................... 18
C.2.8. Konfigurasi Awal...................................................................................18
C.2.9. Loop Utama..........................................................................................19
D. Real Time Controlling Dan Monitoring Web..................................................... 20
D.1. Buat dan Buka Proyek Baru......................................................................... 20
D.2. Buat File mqtt-library.js................................................................................. 21
D.3. Buat File scripts.js.........................................................................................21
D.4. Buat File index.php....................................................................................... 23
E. Mari Lebih Kreatif Membuat Desain Web.......................................................... 25
Tunggu Versi Full Version…................................................................................................26
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 1
Profil Penyusun
Masih bingung mau diisi apa, ya udah barangkali mau mutualan di Media Sosial bisa
coba follow aja:
● Instagram : https://instagram.com/ajangrahmat
● Facebook : https://www.facebook.com/ajangrahmat
● YouTube : https://www.youtube.com/@ProgrammerSehat
● TikTok : https://www.tiktok.com/@programmersehat
● Email : [email protected]
● WhatsApp : 0812-8793-1296
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 2
A. Persiapan Sebelum Tempur
Akan tetapi untuk pemula saya rekomendasikan versi 1 aja, tepatnya Arduino IDE
versi 1.8.19, silahkan download melalui link berikut:
https://downloads.arduino.cc/arduino-1.8.19-windows.exe
Cara Instalasi:
2. Buka Preferences:
Pergi ke menu "File" di Arduino IDE dan pilih "Preferences".
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 3
5. Instalasi ESP8266 Core:
Di kotak pencarian di pojok kanan atas, ketik "esp8266".
Kamu akan melihat "esp8266 by ESP8266 Community".
Sebelum Install Pilih Versi 2.7.4
Klik pada tombol "Install" di sebelahnya.
Tunggu sampai proses instalasi selesai.
https://sourceforge.net/projects/xampp/files/XAMPP%20Windo
ws/8.1.25/xampp-windows-x64-8.1.25-0-VS16-installer.exe
Cara Instalasi:
2. Ikuti petunjuk instalasi yang muncul. Pilih komponen yang ingin Kamu instal
(biasanya Apache, MySQL, PHP, dan phpMyAdmin sudah dipilih secara
default).
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 4
3. Pilih lokasi instalasi (Biarkan saja di Data C) dan tunggu hingga proses
instalasi selesai.
4. Setelah instalasi selesai, XAMPP akan diinstal di direktori yang Kamu
pilih. Pastikan untuk mengingat direktori ini karena Kamu akan
menggunakannya untuk mengakses file konfigurasi dan data proyek Kamu.
https://www.sublimetext.com/download_thanks?target=win-x64
Cara instalasi:
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 5
Komponen Yang Digunakan
Berikut adalah komponen yang digunakan pada praktikum, kamu bisa beli sendiri di
marketplace atau bisa beli di tokopedia kami:
2 komponen tersebut kalau mau beli di Kelas Robot, bisa lewat link berikut:
https://www.tokopedia.com/kelasrobot/nodemcu-amica-shield-nodemcu-amica
-kelas-robot-v1-amica
Komponen tersebut kalo mau beli di Kelas Robot, bisa lewat link berikut:
https://www.tokopedia.com/kelasrobot/ldr-sensor-cahaya-analog-sensor-for-ar
duino
Komponen yang lampu, fitting, kabel dan steker bisa beli di toko listrik terdekat aja
ya, cukup mudah dicari dan didapatkan.
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 6
B. Merangkai dan Testing Hardware
void setup() {
Serial.begin(115200);
}
void loop() {
nilaiSensor = analogRead(pinSensor);
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 7
nilaiPersen = map(nilaiSensor, 0, 1023, 0, 100);
Serial.print(nilaiSensor);
Serial.print(", ");
Serial.println(nilaiPersen);
delay(1000);
}
Kemudian sebelum Upload, jangan lupa untuk Pilih Board dan Port yang sesuai,
pada menu Tools.
Catatan:
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 8
B.2. Menyalakan Lampu Melalui Relay
void setup() {
pinMode(relay, OUTPUT);
digitalWrite(relay, HIGH);
}
void loop() {
digitalWrite(relay, LOW);
delay(2000);
digitalWrite(relay, HIGH);
delay(3000);
}
Jika sudah di upload, hasilnya lampu akan menyala selama 2 detik kemudian mati
selama 3 detik dan akan berulang terus menerus.
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 9
B.3. Menghubungkan ke WiFi & MQTT Broker
WiFi sudah tersedia pada Board NodeMCU ESP8266, artinya Kamu tidak perlu
merangkai apapun kali ini.
https://github.com/256dpi/arduino-mqtt/archive/refs/
heads/master.zip
Hasil download arduino-mqtt-master.zip tidak perlu di ekstrak, langsung
tambahkan saja ke Arduino IDE dengan cara:
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 10
Baik jika proses menambahkan Library ke Arduino IDE sudah berhasil, silakan
gunakan coding dibawah ini:
#include <ESP8266WiFi.h>
#include <MQTT.h>
const char ssid[] = "Nokia G10";
const char pass[] = "tes12345";
WiFiClient net;
MQTTClient client;
unsigned long lastMillis = 0;
void connect() {
while (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi.");
delay(1000);
}
String clientId = "ESP8266Client-" + String(random(0xffff),
HEX);
while (!client.connect(clientId.c_str(), "public", "public")) {
Serial.println("MQTT.");
delay(1000);
}
Serial.println("\nconnected!");
client.subscribe("/hello");
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, pass);
client.begin("broker.emqx.io", net);
client.onMessage(messageReceived);
}
void loop() {
client.loop();
if (!client.connected()) {
connect();
}
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 11
if (millis() - lastMillis > 1000) {
lastMillis = millis();
client.publish("/hello", "world");
}
}
Sebelum Upload Silahkan Masukan Nama WiFi dan Password pada variabel ssid
dan pass. Jika Berhasil output pada Serial Monitor akan muncul seperti ini:
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 12
C. Final Rangkaian dan Final Program
Silakan masukan satu persatu coding berikut, sambil melihat penjelasan codingnya
ya, agar lebih memahami setiap perintahnya:
// Library
#include <ESP8266WiFi.h>
#include <MQTT.h>
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 13
2. MQTT.h: Library ini digunakan agar perangkat ESP8266 dapat berkomunikasi
dengan server MQTT untuk mengirim dan menerima pesan dari perangkat
lain yang terhubung ke server yang sama.
// Konfigurasi WiFi
const char ssid[] = "namaWiFi";
const char pass[] = "passwordWiFi";
// Konfigurasi MQTT
const char mqttServer[] = "broker.emqx.io";
const int mqttPort = 1883;
String topicRelay = "STMIK/ALFATH/78762181/relay";
String topicSensor = "STMIK/ALFATH/78762181/sensor";
1. const char ssid[] = "namaWiFi";: Ini menetapkan nama jaringan WiFi yang
ingin dihubungkan oleh perangkat.
2. const char pass[] = "passwordWiFi";: Ini menetapkan kata sandi WiFi yang
sesuai dengan jaringan yang ditentukan sebelumnya.
3. const char mqttServer[] = "broker.emqx.io";: Ini menetapkan alamat server
MQTT yang akan digunakan oleh perangkat.
4. const int mqttPort = 1883;: Ini menetapkan port MQTT yang digunakan oleh
server.
5. String topicRelay = "STMIK/ALFATH/78762181/relay";: Ini menetapkan
topik untuk komunikasi relay melalui MQTT.
6. String topicSensor = "STMIK/ALFATH/78762181/sensor";: Ini menetapkan
topik untuk komunikasi sensor melalui MQTT.
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 14
C.2.3. Membuat Object, Konfigurasi Pin dan Variabel Millis:
// Membuat Object
WiFiClient net;
MQTTClient client;
// Konfigurasi Pin
const byte pinSensor = A0;
const byte pinRelay = D5;
1. WiFiClient net; dan MQTTClient client;: Membuat objek net dari kelas
WiFiClient dan objek client dari kelas MQTTClient untuk mengelola koneksi
WiFi dan MQTT.
2. const byte pinSensor = A0; dan const byte pinRelay = D5;:
Mengkonfigurasi pin yang digunakan dalam program, di mana pinSensor
untuk sensor (A0) dan pinRelay untuk relay (D5).
3. unsigned long lastMillis = 0;: Mendeklarasikan variabel lastMillis sebagai
unsigned long dan menginisialisasinya dengan nilai 0, kemungkinan
digunakan untuk melacak waktu terakhir suatu operasi dilakukan dalam
program menggunakan fungsi millis().
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 15
Fungsi connectWiFi() bertujuan untuk menghubungkan perangkat ke jaringan WiFi
yang telah ditentukan sebelumnya. Proses koneksi dilakukan sebagai berikut:
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 16
Fungsi connectMQTT() bertujuan menghubungkan perangkat ke server MQTT yang
telah ditentukan sebelumnya. Proses koneksi:
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 17
3. Mengatur status pin relay sesuai dengan nilai payload. Jika payload adalah
"ON", maka pin relay akan dinyalakan (LOW), dan jika payload bukan "ON",
maka pin relay akan dimatikan (HIGH).
// Konfigurasi Awal
void setup() {
pinMode(pinRelay, OUTPUT);
digitalWrite(pinRelay, HIGH);
Serial.begin(115200);
}
Bagian dari program yang berisi konfigurasi awal yang dilakukan saat perangkat
dijalankan. Prosesnya adalah sebagai berikut:
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 18
1. pinMode(pinRelay, OUTPUT);: Mengatur pin yang digunakan untuk relay
(pinRelay) sebagai OUTPUT, yang berarti pin tersebut akan digunakan untuk
mengirimkan sinyal keluar dari perangkat.
2. digitalWrite(pinRelay, HIGH);: Mengatur nilai awal pin relay menjadi HIGH,
yang artinya relay dalam keadaan mati saat perangkat pertama kali
dijalankan.
3. Serial.begin(115200);: Memulai komunikasi serial dengan kecepatan
baudrate 115200 bps, sehingga perangkat dapat berkomunikasi dengan
komputer atau perangkat lain melalui Serial Monitor.
// Loop Utama
void loop() {
client.loop();
if (!client.connected()) {
connectWiFi();
connectMQTT();
}
if (millis() - lastMillis > 1000) {
lastMillis = millis();
readAndPublishSensorData();
}
}
Bagian dari program yang berisi loop utama yang dijalankan secara terus-menerus
oleh perangkat. Prosesnya adalah sebagai berikut:
1. client.loop();: Memeriksa dan menangani pesan masuk atau keluar dari klien
MQTT.
2. if (!client.connected()) { connectWiFi(); connectMQTT(); }: Memeriksa
apakah klien MQTT terhubung dengan server. Jika tidak, maka melakukan
koneksi ulang ke WiFi dan MQTT.
3. if (millis() - lastMillis > 1000) { lastMillis = millis();
readAndPublishSensorData(); }: Memeriksa apakah sudah waktunya untuk
membaca data sensor dan mengirimnya melalui MQTT. Jika sudah melewati
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 19
interval 1 detik, maka membaca dan mengirim data sensor, kemudian
mengupdate nilai lastMillis.
Kemudian di folder xampp, masuk ke folder htdocs, dan buat folder baru dengan
nama iotcloud pada folder htdocs.
Selanjutnya silahkan buka Sublime, lalu di Sublime ke menu File > Open Folder…
iotcloud yang ada di htdocs.
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 20
D.2. Buat File mqtt-library.js
Buat file baru dengan tekan ctrl+n, lalu copas code yang ada di link berikut:
https://gist.githubusercontent.com/ajangrahmat/834
b0457db230d073f606b97ad63cc60/raw/53286d2580a
95fb6e0bcaa7867236792b21f6871/mqtt-library.js
Lalu paste, dan simpan dengan tekan ctrl+s dan beri nama mqtt-library.js
client.onConnect = () => {
client.subscribe(topicSensor);
client.subscribe(topicRelay);
};
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 21
}
document.getElementById('relay').innerHTML =
message.toString();
}
};
function publish_led(message) {
client.publish(topicRelay, message, options);
}
client.connect();
Itu adalah potongan kode JavaScript yang digunakan untuk menghubungkan dan
berinteraksi dengan MQTT. Mari saya jelaskan baris per baris:
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 22
5. client.onConnect = () => { ... }: Ini adalah fungsi yang akan dipanggil ketika
klien berhasil terhubung ke broker. Di dalamnya, klien berlangganan ke topik
sensor dan relay.
6. client.onMessage = (topic, message) => { ... }: Fungsi yang akan dipanggil
ketika klien menerima pesan dari broker. Ini memeriksa topik dari pesan yang
diterima, kemudian memperbarui elemen HTML sesuai dengan pesan yang
diterima. Jika pesan berasal dari topik sensor, nilai sensor akan diperbarui.
Jika pesan berasal dari topik relay, elemen HTML untuk relay akan diperbarui
dan warna teksnya akan diubah sesuai dengan pesan yang diterima.
7. function publish_led(message) { ... }: Fungsi ini digunakan untuk
menerbitkan pesan ke topik relay dengan pesan yang ditentukan sebagai
argumen. Ini memungkinkan pengendali untuk mengirimkan pesan ke relay,
mengatur apakah relay harus dihidupkan atau dimatikan.
8. client.connect();: Memulai koneksi klien ke broker MQTT. Setelah koneksi
berhasil dibuat, onConnect akan dipanggil, dan klien akan mulai
berlangganan topik-topik yang diperlukan.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,
initial-scale=1.0">
<title>IoT Cloud</title>
</head>
<body >
<p>Status Koneksi:
<strong id="status" style="color:red">
DISCONNECTED
</strong>
</p>
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 23
<p>Kontrol LED</p>
<p>Status: <strong style="color:red"
id="relay">OFF</strong></p>
<button onclick="publish_led('ON')">Lampu ON</button>
<button onclick="publish_led('OFF')">Lampu OFF</button>
<p>Nilai Sensor:</p>
<h1 id="sensor">0</h1>
<script
src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
<script src="mqtt-library.js"></script>
<script src="scripts.js"></script>
</div>
</body>
</html>
Itu adalah kode HTML sederhana yang menampilkan elemen-elemen HTML untuk
mengontrol dan memantau perangkat IoT melalui protokol MQTT. Mari saya jelaskan
setiap bagian:
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 24
yang menunjukkan status koneksi. Status ini awalnya ditetapkan sebagai
"DISCONNECTED" dan diberi warna merah.
10. <p>Kontrol LED</p>: Ini adalah paragraf yang menunjukkan kontrol LED.
11. <p>Status: <strong style="color:red" id="relay">OFF</strong></p>: Ini
adalah paragraf yang menunjukkan status LED. Status ini awalnya ditetapkan
sebagai "OFF" dan diberi warna merah.
12. <button onclick="publish_led('ON')">Lampu ON</button> dan <button
onclick="publish_led('OFF')">Lampu OFF</button>: Ini adalah tombol
untuk menghidupkan dan mematikan LED. Ketika tombol ditekan, fungsi
publish_led() akan dipanggil dengan argumen yang sesuai ("ON" atau "OFF").
13. <p>Nilai Sensor:</p>: Ini adalah paragraf yang menunjukkan nilai sensor.
14. <h1 id="sensor">0</h1>: Ini adalah elemen judul utama yang menampilkan
nilai sensor. Nilai ini awalnya ditetapkan sebagai "0".
15. <script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>: Ini
adalah tag <script> untuk memuat pustaka MQTT yang diperlukan.
16. <script src="mqtt-library.js"></script> dan <script
src="scripts.js"></script>: Ini adalah tag <script> untuk memuat file
JavaScript yang berisi logika koneksi dan pengaturan serta file JavaScript
yang berisi fungsi-fungsi khusus untuk mengontrol dan memantau perangkat
melalui protokol MQTT.
17. </body>: Penutup elemen tubuh.
18. </html>: Penutup elemen HTML utama.
● Bootstrap : https://getbootstrap.com
● Flowbite : https://flowbite.com
● Apache ECharts : https://echarts.apache.org
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 25
Tunggu Versi Full Version…
Ebook atau panduan ini dibuat berdasarkan Workshop yang dilakukan selama 1
hari, jadi baru selesai sampai sini saja.
Setelah kamu berhasil membuat praktikum Real Time Monitoring dan Controlling,
langkah berikutnya adalah Data Logger ke DBMS MySQL.
Silahkan di praktekan terlebih dahulu dan ditunggu reviewnya, dan silahkan juga
untuk bergabung di komunitas WA kami:
https://chat.whatsapp.com/DB9gXNfc7MWImZe0Ee4eGX
***
Jika Ebook versi Full Versionnya selesai, akan diinfokan lebih awal di group
whatsapp tersebut.
Terimakasih.
IoT ESP8266 Arduino, MQTT JS, Web PHP Bootstrap dan MySQL - Hal. 26