Jobsheet Praktikum IoT
Jobsheet Praktikum IoT
Oleh:
Sekolah Vokasi
Universitas Diponegoro
Modul 1
Menyalakan lampu LED melalui jaringan lokal.
Tujuan praktikum pada pertemuan ketiga adalah melakukan koneksi antara modul Wemos dengan
jaringan/website. Praktikum ini dilakukan secara sederhana pada awal pengenalan modul nodemcu
esp8266 dan perangkat lain
Web server merupakan perangkat untuk menyimpan, memproses dan mengirimkan halaman web
ke client (browser pada smartphone atau Laptop/PC). Komunikasi yang digunakan pada web
server menggunakan protocol Hypertext Transfer Protocol (HTTP). Client menggunakan link
untuk melakukan request halaman dengan HTTP dan server mengirimkan response berisi halaman
web yang tersedia.
Pada modul praktikum 3 ini, Nodemcu esp8266 NodeMCU akan digunakan sebagai web server.
ESP 8266
Project Board
4 Lampu LED
Resistor 330 Ω
Laptop dengan Software Arduino IDE
Desain Rangkaian
Pin D0 – D3 dijadikan output pengendalian LED. Kemudian masukkan koding dibawah ini :
#include <ESP8266WiFi.h>
WiFiServer server(80);
void setup()
{
Serial.begin(115200);
pinMode(LED, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
digitalWrite(LED, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
void loop()
{
WiFiClient client = server.available();
if (!client)
{
return;
}
Serial.println("Waiting for new client");
while(!client.available())
{
delay(1);
}
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
if(request.indexOf("/LED3=ON") != -1)
{
digitalWrite(LED3, HIGH); // Turn ON LED
value = HIGH;
}
if(request.indexOf("/LED3=OFF") != -1)
{
digitalWrite(LED3, LOW); // Turn OFF LED
value = LOW;
}
if(request.indexOf("/LED4=ON") != -1)
{
digitalWrite(LED4, HIGH); // Turn ON LED
value = HIGH;
}
if(request.indexOf("/LED4=OFF") != -1)
{
digitalWrite(LED4, LOW); // Turn OFF LED
value = LOW;
}
/*------------------HTML Page Creation---------------------*/
if(digitalRead(LED) == HIGH)
{
client.print("ON");
}
else
{
client.print("OFF");
}
client.println("<br><br>");
client.println("<a href=\"/LED=ON\"\"><button>ON</button></a>");
client.println("<a href=\"/LED=OFF\"\"><button>OFF</button></a><br />");
client.println("<br><br>");
client.print("LED 2 Merah: ");
client.println("<br><br>");
if(digitalRead(LED2) == HIGH)
{
client.print("ON");
}
else
{
client.print("OFF");
}
client.println("<br><br>");
client.println("<a href=\"/LED2=ON\"\"><button>ON</button></a>");
client.println("<a href=\"/LED2=OFF\"\"><button>OFF</button></a><br />");
client.println("<br><br>");
client.println("<img src='https://cdn-icons-png.flaticon.com/512/2338/2338808.png'
width='50px' height='50px'></img>");
client.println("<br><br>");
client.print("LED 3: ");
client.println("<br><br>");
if(digitalRead(LED3) == HIGH)
{
client.print("ON");
}
else
{
client.print("OFF");
}
client.println("<br><br>");
client.println("<a href=\"/LED3=ON\"\"><button>ON</button></a>");
client.println("<a href=\"/LED3=OFF\"\"><button>OFF</button></a><br />");
client.println("<br><br>");
client.print("LED4: ");
client.println("<br><br>");
if(digitalRead(LED4) == HIGH)
{
client.print("ON");
}
else
{
client.print("OFF");
}
client.println("<br><br>");
client.println("<a href=\"/LED4=ON\"\"><button>ON</button></a>");
client.println("<a href=\"/LED4=OFF\"\"><button>OFF</button></a><br />");
client.println("</html>");
delay(1);
Serial.println("Client disonnected");
Serial.println("");
}
Selanjutnya upload koding diatas kedalam NodeMCU sesuai board dan port pada Arduino IDE
Pastikan laptop, smartphone dan device apapun yang ingin digunakan untuk mengendalikan
LED dengan Web Server harus menggunakan WiFi hotspot yang sama dengan NodeMCU
yang sedang kita gunakan.
Modul 2
Menggerakkan motor servo dengan aplikasi Blynk
Tujuan praktikum pertemuan ke 4 adalah bisa melakukan perintah pada Motor Servo
menggunakan aplikasi yang disediakan oleh android.
Nodemcu esp8266
Project Board
Kabel Jumper
Motor Servo DC
Rangkaian Percobaan
Coding
// Template ID, Device Name and Auth Token are provided by the Blynk.Cloud
// See the Device Info tab, or Template settings
#define BLYNK_FIRMWARE_VERSION "0.1.0"
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Servo.h>
Servo servo;
BLYNK_WRITE(V3)
{
servo.write(param.asInt());
}
void setup()
{
// Debug console
Serial.begin(115200);
servo.attach(2);
}
void loop()
{
Blynk.run();
}
2. Pada aplikasi blynk buatlah aplikasi control servo (anda boleh menggunakan referensi yang ada
atau dari gambar dibawah)
3. Analisa data
Gunakan HP anda untuk menggerakkan servo sebesar 45 derajat, 90 derajat, dan lain-lain
Modul 3
Monitoring suhu dengan aplikasi thingspeak
Praktikum monitoring suhu dengan menggunakan Thingspeak merupakan salah satu praktikum
untuk melakukan monitoring jarak jauh terhadap suhu dan kelembapan di lingkungan sekitar. Pada
beberapa keadaan, pengontrollan suhu dan kelembapan sangat diperhatikan untuk menjaga
kualitas benda-benda yang ada di ruangan itu.
Tujuan praktikum pertemuan ke 5 adalah mampu mengukur besaran yang dibaca sensor dan
menampilkan kedalam bentuk grafik pada website Thingspeak. Pada praktikum ini dilakukan
pembacaan dari sensor dan menguploadnya kedalam sistem cloud sehingga praktikan bisa
menggunakan cloud data base yang digunakan pedoman pembuatan smart device.
Nodemcu esp8266
Sensor dht 11
Project Board
Kabel Jumper
Laptop
Desain Rangkaian
Coding
#include "DHT.h"
#include <ESP8266WiFi.h>
#define DHTPIN 0
WiFiClient client;
void setup(){
Serial.begin(115200);
delay(10);
dht.begin();
Serial.println("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pass);
delay(500);
Serial.println(".");
Serial.println("");
Serial.println("WiFi connected");
void loop()
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h)||isnan(t)){
return;
if(client.connect(server, 80)){
postStr += "&field1=";
postStr += String(t);
postStr += "&field2=";
postStr += String(h);
postStr += "\r\n\r\n";
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(h);
client.stop();
Serial.println("Waiting...");
delay(1000);
B. Teori Dasar
Message Queuing Telemetry Transport (MQTT) adalah salah satu protokol komunikasi dengan
mengirimkan pesan yang dibentuk melalui TCP/IP. Protokol ini dirancang untuk komunikasi
machine to machine yang tidak memiliki alamat khusus dengan model pesan publish-subscribe.
MQTT terdiri dari Publisher, Broker dan Subscriber. Publisher berfungsi sebagai pengirim pesan,
Subscriber sebagai penerima pesan dan Broker berfungsi sebagai penyampai pesan dari pengirim
ke penerima. Mikrokontroller, Komputer, Smartphone dapat berfunsgi sebagai publisher maupun
subscriber.
D. Desain Rangkaian
E. Coding
Anda bisa mengggunakan coding dibawah ini atau bisa mengkesplore dari sumber yang
lainnya
/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/esp8266-nodemcu-mqtt-publish-
dht11-dht22-arduino/
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/
#include "DHT.h"
#include <ESP8266WiFi.h>
#include <Ticker.h>
#include <AsyncMqttClient.h>
#define DHTPIN 14
float temp;
float hum;
AsyncMqttClient mqttClient;
Ticker mqttReconnectTimer;
WiFiEventHandler wifiConnectHandler;
WiFiEventHandler wifiDisconnectHandler;
Ticker wifiReconnectTimer;
void connectToWifi() {
Serial.println("Connecting to Wi-Fi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.println("Connected to Wi-Fi.");
connectToMqtt();
wifiReconnectTimer.once(2, connectToWifi);
void connectToMqtt() {
Serial.println("Connecting to MQTT...");
mqttClient.connect();
}
void onMqttConnect(bool sessionPresent) {
Serial.println("Connected to MQTT.");
Serial.println(sessionPresent);
if (WiFi.isConnected()) {
mqttReconnectTimer.once(2, connectToMqtt);
Serial.println("Subscribe acknowledged.");
Serial.println(packetId);
Serial.println(qos);
}
void onMqttUnsubscribe(uint16_t packetId) {
Serial.println("Unsubscribe acknowledged.");
Serial.println(packetId);
}*/
Serial.print("Publish acknowledged.");
Serial.println(packetId);
void setup() {
Serial.begin(115200);
Serial.println();
dht.begin();
wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect);
wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect);
mqttClient.onConnect(onMqttConnect);
mqttClient.onDisconnect(onMqttDisconnect);
//mqttClient.onSubscribe(onMqttSubscribe);
//mqttClient.onUnsubscribe(onMqttUnsubscribe);
mqttClient.onPublish(onMqttPublish);
mqttClient.setServer(MQTT_HOST, MQTT_PORT);
// If your broker requires authentication (username and password), set them below
//mqttClient.setCredentials("REPlACE_WITH_YOUR_USER",
"REPLACE_WITH_YOUR_PASSWORD");
connectToWifi();
void loop() {
previousMillis = currentMillis;
// New DHT sensor readings
hum = dht.readHumidity();
temp = dht.readTemperature();
//temp = dht.readTemperature(true);