Modul Praktek IoT-v01
Modul Praktek IoT-v01
Dengan ESP32
v.01
Disusun oleh:
Endar Suprih Wihidayat S.T. M.Eng
Modul ini digunakan untuk memahami berbagai macam penerapan IoT. Untuk menghemat
kebutuhan alat seminimalis mungkin namun masih bisa merepresentasikan proses secara utuh, modul ini
hanya memerlukan sebuah mikrokontroller ESP32, kabel mikro USB untuk menghubungkan dengan
komputer dan tentu saja PC atau laptop. Jadi semua kegiatan praktikum dalam modul ini menggunakan
ESP32.
Cakupan praktikum
- Menggunakan sensor,
- Mengambil data dari sensor
- Mengirimkan data sensor ke cloud,
- Menerapkan beberapa protokol komunikassi IoT
DASAR ESP32
Praktek 1 Blink
- Tujuan
o Membuat koneksi ESP32 dengan IDE Arduino
o Mengenal lingkungan kerja IDE Ardunio
o Membuat program untuk menghidupkan dan mematikan secara periodik (blink) led
internal di ESP32
o Meng-compile dan mengunggah di ESP32
- Langkah kerja
o Download Arduino di https://www.arduino.cc/en/software
o Versi stabil 1.8.16
- Kode lengkap
int LED_BUILTIN = 2;
void setup() {
pinMode (LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
- Tujuan
o Praktek ini bertujuan mengambil data suhu dari prosesor ESP32
o Prosesor ESP32 memiliki sensor suhu yang memonitor suhu prosespr.
o Suhu prosesor ini bisa di ambil untuk ditampilkan di komputer via port Com
- Langkah kerja
o Buat project baru di IDE Arduino
o Copy kode dibawah, paste ke dalam project tersebut
o Simpan dan upload
o Bila berhasil upload sebelum di pencet resetnya , buka monitor serial portnya
uint8_t temprature_sens_read();
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println("Temperature from internal sensor:");
Serial.println(((temprature_sens_read() - 32 ) / 1.8));
delay(5000);
}
- Deskripsi
o Sensor sentuh merupakan perubahan tegangan yang terjadi di pin ESP32 yang bisa
digunakan banyak hal. ESP32 memiliki 10 capacitive sensor touch. Jadi sensor ini akan
mendeteksi bila terjadi sentuhan yang menyebabkan perubahan tegangan. Lebih
lengkap tentang sensor sentuh di ESP32 bisa dilihat di
https://randomnerdtutorials.com/esp32-touch-pins-arduino-ide/
- Tujuan
o Memanfaatkan pin D4 untuk mendeteksi sentuhan dan menampilkan hasilnya di layar
komputer melalui port serial
- Langkah kerja
o Buat project baru di IDE Arduino
o Copy dan paste kode dibawah
o Upload dan reset untuk menjalankan
o Bila disentuh maka nilainya mendekati Nol (digambar tertampil 1) dan Led internal akan
dibuat berkedip dengan jeda 0.25 detik
- Kode Lengkap
void setup()
{
Serial.begin(9600);
pinMode(2, OUTPUT);
}
void loop()
{
Serial.println((touchRead(T0)));
if ((touchRead(T0)) <= 10) {
for (int count = 0; count < 5; count++) {
digitalWrite(2,HIGH);
delay(250);
digitalWrite(2,LOW);
delay(250);
}
}
}
- Tujuan
o Menggunakan modul bluetooth yang ada di ESP32 untuk menerima pesan via bluetooth
yang dikirimkan via HP
o Menggunakan modul bluetooth untuk mengirimkan data ke HP
o Pesan yang diterima digunakan untuk menghidupkan dan mematikan Led internal yang
ada di D2
o Data OFF akan mematikan led, dan data ON akan menghidupkan led
o Data yang diambil dari monitor serial, dikirimkan ke HP via bluetooth
- Langkah kerja
o Mendownload aplikasi Serial Bluetooth Terminal di Google Play, bisa dibuka di
https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_termina
l
o Buat project baru di IDE Arduino
o Copy paste kode dibawah
o Upload dan reset, sebelum reset buka terlebih dahulu monitoring serialnya
o Jalankan aplikasi Serial Bluetooth Terminal, sambungkan bluetoothnya. Untuk pertama
kali, masuk ke setting bluetooth terlebih dahulu, ddan tambahkan device baru bernama
“KelasB” (sesuai di kode program).
o Bila sudah tersambung maka data bisa dikirimkan.
o masukkan kode ON, kemudian kirim, Led internal pada ESP32 akan menyala dan
monitor terminal akan menampilkan ON
o Masukkan kode OFF, kemudian kirim, led internal akan mati, dan monitor serial akan
menampilkan OFF
o Percobaan terakhir adalah mengirimkan data dari monitor serial, kemudian dikirimkan
via bluetooth untuk ditampilkan di HP
o Ketik DATA DARI ESP32, kemudian klik send, maka seharusnya di HP pesan tersebut
akan muncul.
- Kode lengkap
#include "BluetoothSerial.h"
BluetoothSerial SerialBT;
void setup() {
pinMode(2, OUTPUT);
Serial.begin(115200);
SerialBT.begin("kelasB"); //Bluetooth device name
Serial.println("The device started, now you can pair it with bluetooth!");
}
String dataDiterima;
void loop() {
// Menyalakan Led
if (dataDiterima =="ON"){
digitalWrite(2,HIGH);
// Mematikan Led
}
if (dataDiterima =="OFF"){
digitalWrite(2,LOW);
}
delay(20);
}
IoT BASIC
Praktek 1 Menggunakan ThinkSpeak
- Deskripsi
o ThingSpeak merupakan layanan Cloud khususnya untuk IoT yang bersifat gratis.
ThinkSpeak digunakan untuk menampilkan data secara online sehingga kita bisa
memantau data yang dikirimkan ke ThingSpeak dari mana saja. Data IoT yang dikirimkan
ke ThinkSpeak bisa ditampilkan dalam bentuk grafik
o ThingSpeak memiliki layanan platform analitik IoT yang memungkinkan kita untuk
menggabungkan, memvisualisasikan, dan menganalisis aliran data langsung di cloud.
Jadi kita dapat mengirim data ke ThingSpeak dari perangkat IoT, membuat visualisasi
instan dari data langsung, dan mengirim peringatan, atau melalui proses analitik terlebih
dahulu.
o ThinkSpeak bisa di buka di https://thingspeak.com/
o Mengenai sensor suhu dan sensor hall bisa dilihat lebih lanjut di
https://randomnerdtutorials.com/esp32-hall-effect-sensor/
- Tujuan
o Menggunakan ThinkSpeak untuk menampilkan internal suhu prosesor dan sensor Hall
yang bisa mendeteksi proximity, medan magnet dll.
- Langkah Kerja
o Mendaftar di ThinkSpeak
o Mensetting Field
o Membuat project baru di IDE Arduino
o Copy Paste dari kode dibawah, sesuaikan Write API Key nya sesuai dengan yang telah
dibuat.
o Sesuaikan pula untuk setting SSID dan Password dari Wifi nya.
- Kode Lengkap
#ifdef __cplusplus
extern "C" {
#endif
uint8_t temprature_sens_read();
#ifdef __cplusplus
}
#endif
uint8_t temprature_sens_read();
#include <WiFi.h>
String apiKey = "WWIY04ROTV2V03P4"; // Enter your Write API key from ThingSpeak
const char *ssid = " Nama SSID WIFI"; // replace with your wifi ssid and
wpa2 key
const char *pass = "password WIFI";
String thingSpeakAddress = "api.thingspeak.com";
String request_string;
WiFiClient client;
void setup()
{
Serial.begin(115200);
delay(10);
Serial.println("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void loop()
{
int h = 0;
float t =0;
h = hallRead();
t = ((temprature_sens_read()-32)/1.8);
kirim_thingspeak(t, h);
delay(3000);
}
- Hasil di ThinkSpeak
o Untuk suhu, stabil di 53 an derajat. Agar lebih bagus, maka perlu diubah min dan max
dari axis Y nya menjadi 0 dan 100.
o Hasil dari sensor Hall
- Hasil di Monitor Serial
Selain dikirimkan ke ThinkSpeak, kita juga kirimkan ke Serial Port agar bisa tahu apakah
datanya telah dikirimkan dengan benar. Bila data di ThinkSpeak belum masuk, tetapi di
Serial telah muncul maka bisa dipastikan ada masalah dengan setting koneksi atau ada
masalah dengan internet, dll.
Praktek 2 ESP32 dan protokol HTPP Client
- Sumber:
o https://techtutorialsx.com/2017/05/19/esp32-http-get-requests/
o https://youtu.be/s_2cw0k6lgs
- Deskripsi
o ESP32 bisa melakukan request data via protokol HTPP. HTTP akan menarik/mengambil
sebuah halaman HTML. Biasanya request data ini dilakukan via browser, namun kali ini
kita akan menggunakan ESP32 untuk mengambilnya.
o Lebih lengkap tentang HTTP bisa dilihat disini.
- Tujuan
o Praktek kali ini kita akan menggunakan library ESP32 HTTPClient.h untuk melakukan get
pada sebuah server. Server disini bisa kita buat sendiri secara lokal (localhost) di
PC/Laptop. Atau menggunakan alamat yang ada di video.
o Hasil Get akan ditampilkan di Serial monitoring
- Langkah Kerja
o Pertama install Xampp (atau yang sejenis)
o Buat sebuah file HTML (misal : index.html), pastikan file tersebut bisa diakses langsung
dengan mencoba akses via browser.
<!DOCTYPE html>
<html>
<body>
o Lihat IP Address dari PC/Laptop yang terpasang XAMPP dengan membuka command
prompt : cmd→ ipconfig
o Misal dengan IP 192.168.1.8 dan file HTMLnya di folder arduino, maka URL get nya
menjadi http://192.168.1.8/arduino/index.html
- Membuat Kode
o Pastikan library HTTPClient.h sudah ada.
- Kode Lengkap
#include <HTTPClient.h>
#include <WiFi.h>
void setup() {
Serial.begin(115200);
delay(4000);
WiFi.begin(ssid, password);
HTTPClient http;
http.begin("http://192.168.1.8/arduino/index.html"); //Specify the
URL
int httpCode = http.GET();
//Make the request
if (httpCode > 0) { //Check for the returning code
String payload = http.getString();
Serial.println(httpCode);
Serial.println(payload);
}
else {
Serial.println("Error on HTTP request");
}
http.end(); //Free the resources
}
delay(10000);
}
- Sumber
o https://youtu.be/BaQc1E4HDnY
o https://youtu.be/ApGwxX6VVzk
o https://www.kodingindonesia.com/belajar-iot-kendali-led-dengan-web-server/
- Deskripsi
o Salah satu keunggulan dari ESP32 yaitu bisa dijadikan webserver. Jadi selain menjadi
client, ESP32 ini memiliki library untuk menjadi webserver yang bisa direquest data oleh
client.
o Jadi ESP32 akan dijadikan webserver yang di akses melalui protokol HTTP dengan URL
tertentu menggunakan browser. Setelah direquest ESP32 akan mengembalikan data atau
juga menjadi aktuator yang akan mentriger perangkat lain (bila diperlukan). Untuk
praktek berbasis hemat ini, maka yang dipicu cukup LED internal seperti halnya yang
dipakai di praktek 1 Blink Dasar ESP32
- Tujuan
o Membuat webserver di ESP32
o Melakukan perintah get menggunakan browser di PC atau HP ke webserver
o ESP32 akan mengirimkan kembali hasilnya ke browser
o ESP32 akan menghidupkan atau mematikan LED
- Langkah Kerja
o Menyiapkan library Wifi.h dan Webserver.h, pastikan sudah ada di Arduino IDE nya.
o Untuk halaman yang html yang bisa direquest oleh browser kita buat sesederhana
mungkin dan ditaruh langsung di program, tidak perlu menggunakan library tambahan.
- Kode Lengkap
Disini terlihat halaman HTML di taruh dalam variable page
#include <WebServer.h>
#include <WiFi.h>
WebServer server(80);
String page = "";
int LED_BUILTIN = 2; //Pin yang digunakan untuk mengendalikan LED
void setup(void){
//the HTML of the web page
page = "<h1>Simple NodeMCU Web Server</h1><p><a
href=\"LEDOn\"><button>ON</button></a> <a
href=\"LEDOff\"><button>OFF</button></a></p>";
//Inisialisasi pin D4 padam ketika NodeMCU pertama kali menyala
pinMode (LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
Serial.begin(115200);
WiFi.begin(ssid, password); //begin WiFi connection
Serial.println("");
server.on("/", [](){
server.send(200, "text/html", page);
});
server.on("/LEDOn", [](){
server.send(200, "text/html", page);
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
});
server.on("/LEDOff", [](){
server.send(200, "text/html", page);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
});
server.begin();
Serial.println("Web server started!");
}
void loop(void){
server.handleClient();
}
- Hasil di browser
- Hasil di ESP32
Led akan menyala saat ON ditekan dan mati saat OFF ditekan.
Led Internal (biru) akan menyala saat di tekan On
- Data yang dimunculkan yaitu: saat Wifi terkoneksi, saat tombol ON ditekan dan saat Tombol Off
ditekan.
- Sumber
o https://youtu.be/_onOKL68PU8
o http://www.iotsharing.com/2017/05/how-to-use-mqtt-to-build-smart-home-arduino-
esp32.html
o https://randomnerdtutorials.com/esp32-mqtt-publish-subscribe-arduino-ide/
o https://www.youtube.com/watch?v=MtMk6nChaW8&t=383s
- Deskripsi
o Protokol MQTT terdiri dari 3 bagian, subscriber atau yang menerima data, publisher
yang mengirimkan data dan broker yang menghubungkan antara keduanya.
o Dalam prakteknya, publisher bisa sekaligus menjadi subscriber, dan sebaliknya. Jadi
sumber data juga penerima data. Karena pada prakteknya, device dari IoT (things)
seringkali mengirimkan data, sekaligus menerima data untuk kemudian diarahkan ke
aktuator.
- Tujuan
o Praktek kali ini, kita akan menjadikan ESP32 sebagai subscriber. PC akan menjadi broker,
publisher.
o Untuk mencoba apakah broker sudah berjalan baik maka kta test dulu subcriber dan
publisher dilakukan di dalam PC/Laptop
o Setelah berhasil, kita akan menjadikan ESP32 menerima data yang di publish /
dikirimkan oleh client di PC, melalui broker,
o ESP32 kemudian akan menggunakan data yang diterima untuk menghidupkan atau
mematikan Led Internal (led biru)
- Langkah Kerja
o Mendownload broker yang ingin kita pakai : https://mosquitto.org/
o Download file installernya, pilih sesuai jenis windowsnya
o Setelah download, lakukan instalasi.
o Menjalankan broker Mosquitto dengan membuka Command Prompt
o Pastikan dibuka sebagai Admin (run as administrator), kemudian masuk ke dalam folder
tempat menginstall Mosquitto.
o Ketik Net Start Mosquitto
o Setelah di Enter, tidak ada muncul pesan apa-apa, biarkan saja, JANGAN ditutup. Kita
lanjut buka Command Prompt lagi untuk mengirimkan pesan atau menjadi Publisher.
o Kita lanjutkan sebagai publisher dengan membuka CMD baru, ketik perintah berikut:
mosquitto_pub.exe -h 127.0.0.1 -t test -m "ini adalah pesan yang dikirimkan"
- m merupakan pesan yang dikirimkan
Melakukan publish
o Lihat kembali ke CMD yang menjadi subscriber, seharusnya data yang dikirimkan sudah
masuk/tertampil seperti gambar dibawah.
o Contoh diatas, kita dapatkan IP Address nya 192.168.1.7, ini akan menjadi alamat server
MQTT.
o Setelah tahu IP Address tempat Server MQTT dipasang, maka kita tuliskan kode untuk
ESP32 sseperti tertampil dibawah, jangan lupa untuk SSID, password dan alamat IP
Address server nya menyesuaikan dengan milik masing-masing.
o Setelah diupload di ESP32, silahkan buka kembali CMD untuk publishernya. Ketikkan
perintah berikut:
mosquitto_pub -h 127.0.0.1 -t "smarthome/room1/led" -m “1”
dari perintah itu diketahui topiknya adalah: "smarthome/room1/led" sedangkan
beritanya adalah 1
o Perhatikan ESP32, apakah led biru nya sudah menyala?
o Apakah pesannya sudah muncul di serial monitor?
- Kode Lengkap
#include <WiFi.h>
#include <PubSubClient.h>
/* topics */
#define LED_TOPIC "smarthome/room1/led" /* 1=on, 0=off */
long lastMsg = 0;
char msg[20];
Serial.print("payload: ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
/* we got '1' -> on */
if ((char)payload[0] == '1') {
digitalWrite(led, HIGH);
} else {
/* we got '0' -> on */
digitalWrite(led, LOW);
}
}
void mqttconnect() {
/* Loop until reconnected */
while (!client.connected()) {
Serial.print("MQTT connecting ...");
/* client ID */
String clientId = "ESP32Client";
/* connect now */
if (client.connect(clientId.c_str())) {
Serial.println("connected");
/* subscribe topic with default QoS 0*/
client.subscribe(LED_TOPIC);
} else {
Serial.print("failed, status code =");
Serial.print(client.state());
Serial.println("try again in 5 seconds");
/* Wait 5 seconds before retrying */
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
pinMode(led, OUTPUT);
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
client.setServer(mqtt_server, 1883);
client.setCallback(receivedCallback);
}
void loop() {
if (!client.connected()) {
mqttconnect();
}
/* this function will listen for incomming
subscribed topic-process-invoke receivedCallback */
client.loop();
}
- Hasil di EP32
o Bila dikirimkan pesan 1 maka led biru akan menyala, sebaliknya bila 0 maka led
biru akan mati.
IoT FULL APPLICATION
Praktek 1 ESP32 dan Firebase
https://youtu.be/pwEBdsdUstM
https://youtu.be/jpYPIh8C_sM
https://www.electroniclinic.com/esp32-firebase-tutorial-send-sensor-data-to-google-
firebase-database/
https://youtu.be/nVrACWPXi8g