PRAKTIK
BM5A
PROGRAM STUDI
BROADBAND MULTIMEDIA
JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI JAKARTA
2022
Langkah-langkah praktikum :
Di bagian ini kita akan melihat ESP32 sebagai web server. Kita akan membuat
web server untuk mengontrol output dari jarak jauh melalui web, dan menunjukkan
cara menampilkan pembacaan sensor di halaman web. Setelah membuat web server,
kita dapat menambahkan lebih banyak output dan pembacaan sensor sesuai
kebutuhan kita. Selain itu kita juga dapat menyesuaikan tampilan halaman web kita.
Kemudian, kita akan melindungi web server kita dengan kata sandi dan kita dapat
belajar bagaimana cara membuat web server kita dapat diakses oleh siapa saja. Di unit
ini kita akan mempelajari ap aitu web server ESP32.
Client-server Ketika kita mengetik URL di browser, yang terjadi adalah kita
mengirim permintaan melalui Hypertect Transfer Pprotocol (HTTP) ke server. Ketika
server menerima permintaan, mengirimkan tanggapan juga melalui HTTP, dan kita
dapat melihatnya di web browser. Client dan server berkomunikasi melalui k omputer
jaringan.
Server host untuk menjalankan satu atau lebih program server untuk berbagi
sumber daya mereka dengan clients. Web server sebagai perangkat lunak yang
mendengarkan HTTP yang masuk permintaan dan mengirimkan tanggapan Ketika
diminta. ESP akan bertindak sebagai host server mendengarkan permintaan HTP dari
klien.
2. Unit 2: Web Server Control Output
Source code :
Berikut hasil yang ditampilkan pada serial monitor :
GPI26 state ON
Ketika GPI 26 & 27 state ON
Source code :
<!DOCTYPE html>
<html>
<head>
<title>ESP32 Web Server</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<style>
html {
font-family: Helvetica;
display: inline-block;
margin: 0px auto;
text-align: center;
}
.button {
background-color: #4CAF50;
border: none;
color: white;
padding: 16px 40px;
text-decoration: none;
font-size: 30px;
margin: 2px;
cursor: pointer;
}
.button2 {
background-color: #555555;
}
</style>
</head>
<body>
<h1>ESP32 Web Server</h1>
<p>GPIO 26 - State</p>
<p><a href="/26/on"><button class="button">ON</button></a></p>
<p><a href="/26/off"><button class="button button2">OFF</button></a></p>
<p>GPIO 27 - State</p>
<p><a href="/27/on"><button class="button">ON</button></a></p>
<p><a href="/27/off"><button class="button button2">OFF</button></a></p>
</body>
</html>
4. Unit 4: ESP32 Web Server – HTML in Arduino IDE (Part 2/2)
Source code :
#include <WiFi.h>
WiFiServer server(80);
String header;
void setup() {
Serial.begin(115200);
pinMode(GPIO_PIN_NUMBER_26, OUTPUT);
pinMode(GPIO_PIN_NUMBER_27, OUTPUT);
digitalWrite(GPIO_PIN_NUMBER_26, LOW);
digitalWrite(GPIO_PIN_NUMBER_27, LOW);
Serial.print("Connecting to ");
Serial.println(WIFI_NAME);
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
delay(1000);
Serial.println("");
Serial.println(WiFi.localIP());
server.begin();
void loop(){
if (client) {
while (client.connected()) {
if (client.available()) {
Serial.write(new_byte);
header += new_byte;
if (new_byte == '\n') {
if (current_data_line.length() == 0)
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
if (header.indexOf("LED0=ON") != -1)
LED_ONE_STATE = "on";
digitalWrite(GPIO_PIN_NUMBER_26, HIGH);
if (header.indexOf("LED0=OFF") != -1)
LED_ONE_STATE = "off";
digitalWrite(GPIO_PIN_NUMBER_26, LOW);
if (header.indexOf("LED1=ON") != -1)
LED_TWO_STATE = "on";
digitalWrite(GPIO_PIN_NUMBER_27, HIGH);
if (header.indexOf("LED1=OFF") != -1)
LED_TWO_STATE = "off";
digitalWrite(GPIO_PIN_NUMBER_27, LOW);
client.println("<!DOCTYPE html><html>");
client.println("</style></head>");
client.println("<form><center>");
client.println("");
client.println("</center></form></body></html>");
client.println();
break;
}
else
current_data_line = "";
current_data_line += new_byte;
header = "";
client.stop();
Serial.println("Client disconnected.");
Serial.println("");
}
Ketika GPIO 26 state ON & OFF
Ketika GPIO 27 state ON & OFF
5. Unit 6: Making Your ESP32 Web Server Password Protected
Source code :
#include <WiFi.h>
WiFiServer server(80);
String header;
// Current time
// Previous time
void setup() {
Serial.begin(115200);
pinMode(output26, OUTPUT);
pinMode(output27, OUTPUT);
digitalWrite(output27, LOW);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
delay(500);
Serial.print(".");
Serial.println("");
Serial.println("WiFi connected.");
Serial.println(WiFi.localIP());
server.begin();
}
void loop(){
currentTime = millis();
previousTime = currentTime;
String currentLine = ""; // make a String to hold incoming data from the
client
currentTime = millis();
header += c;
// if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
if (currentLine.length() == 0) {
if(header.indexOf("dXNlcjpwYXNz") >= 0) {
// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
// and a content-type so the client knows what's coming, then a blank line:
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
Serial.println("GPIO 26 on");
output26State = "on";
digitalWrite(output26, HIGH);
} else if (header.indexOf("GET /26/off") >= 0) {
Serial.println("GPIO 26 off");
output26State = "off";
digitalWrite(output26, LOW);
Serial.println("GPIO 27 on");
output27State = "on";
digitalWrite(output27, HIGH);
Serial.println("GPIO 27 off");
output27State = "off";
digitalWrite(output27, LOW);
client.println("<!DOCTYPE html><html>");
// Feel free to change the background-color and font-size attributes to fit your
preferences
if (output26State=="off") {
client.println("<p><a href=\"/26/on\"><button
class=\"button\">ON</button></a></p>");
} else {
if (output27State=="off") {
client.println("<p><a href=\"/27/on\"><button
class=\"button\">ON</button></a></p>");
} else {
client.println("</body></html>");
// The HTTP response ends with another blank line
client.println();
break;
else {
client.println("Content-Type: text/html");
client.println();
client.println("<html>Authentication failed</html>");
currentLine = "";
} else if (c != '\r') { // if you got anything else but a carriage return character,
header = "";
client.stop();
Serial.println("Client disconnected.");
Serial.println("");
GPI26 state ON
Ketika GPI 26 & 27 state ON
Source Code:
#include <WiFi.h>
WiFiServer server(8888);
String header;
// Current time
// Previous time
void setup() {
Serial.begin(115200);
pinMode(output26, OUTPUT);
pinMode(output27, OUTPUT);
digitalWrite(output27, LOW);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
delay(500);
Serial.print(".");
Serial.println("");
Serial.println("WiFi connected.");
Serial.println(WiFi.localIP());
server.begin();
}
void loop(){
currentTime = millis();
previousTime = currentTime;
String currentLine = ""; // make a String to hold incoming data from the
client
currentTime = millis();
header += c;
// if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
if (currentLine.length() == 0) {
if(header.indexOf("dXNlcjpwYXNz") >= 0) {
// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
// and a content-type so the client knows what's coming, then a blank line:
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
Serial.println("GPIO 26 on");
output26State = "on";
digitalWrite(output26, HIGH);
} else if (header.indexOf("GET /26/off") >= 0) {
Serial.println("GPIO 26 off");
output26State = "off";
digitalWrite(output26, LOW);
Serial.println("GPIO 27 on");
output27State = "on";
digitalWrite(output27, HIGH);
Serial.println("GPIO 27 off");
output27State = "off";
digitalWrite(output27, LOW);
client.println("<!DOCTYPE html><html>");
// Feel free to change the background-color and font-size attributes to fit your
preferences
if (output26State=="off") {
client.println("<p><a href=\"/26/on\"><button
class=\"button\">ON</button></a></p>");
} else {
if (output27State=="off") {
client.println("<p><a href=\"/27/on\"><button
class=\"button\">ON</button></a></p>");
} else {
client.println("</body></html>");
// The HTTP response ends with another blank line
client.println();
break;
else {
client.println("Content-Type: text/html");
client.println();
client.println("<html>Authentication failed</html>");
currentLine = "";
} else if (c != '\r') { // if you got anything else but a carriage return character,
header = "";
client.stop();
Serial.println("Client disconnected.");
Serial.println("");
http://192.168.43.109:8888/
GPI26 state ON
Ketika GPI 26 & 27 state ON