A. Tujuan Pembelajaran
B. Indikator Pembelajaran
Mahasiswa mampu :
2|Page
PRAKTIKUM 1
B. Prosedur Percobaan
1. Unduh Kode Sumber
https://github.com/RuiSantosdotme/Cloud-Weather-Station-ESP32-
ESP8266/blob/master/code/SensorData_Table.sql
https://github.com/RuiSantosdotme/Cloud-Weather-Station-ESP32-
ESP8266/blob/master/code/esp-database.php
https://github.com/RuiSantosdotme/Cloud-Weather-Station-ESP32-
ESP8266/blob/master/code/esp-post-data.php
https://github.com/RuiSantosdotme/Cloud-Weather-Station-ESP32-
ESP8266/blob/master/code/esp-style.css
https://github.com/RuiSantosdotme/Cloud-Weather-Station-ESP32-
ESP8266/blob/master/code/esp-weather-station.php
3|Page
6) Sketsa Arduino untuk ESP32/ESP8266:
https://github.com/RuiSantosdotme/Cloud-Weather-Station-ESP32-
ESP8266/blob/master/code/ESP_HTTP_POST_MySQL.ino
Tujuan dari proyek ini adalah untuk memiliki nama domain dan akun
hosting Anda sendiri yang memungkinkan Anda untuk menyimpan
pembacaan sensor dari ESP32 atau ESP8266. Anda dapat
memvisualisasikan bacaan dari mana saja di dunia dengan mengakses
domain server Anda sendiri.
4|Page
1) Anda memiliki ESP32 atau ESP8266 yang mengirimkan pembacaan
sensor ke server Anda sendiri. Untuk ini, Anda memiliki papan Anda
terhubung ke router Anda;
Layanan Hosting
Saat membeli akun hosting, Anda juga harus membeli nama domain.
Inilah yang membuat proyek ini menarik: Anda dapat membuka nama
domain Anda (http://example.com) dan melihat pembacaan ESP Anda.
6|Page
2. Masukkan nama Database yang Anda inginkan. Dalam kasus saya,
nama databasenya adalah esp_data. Kemudian, tekan tombol "Langkah
Berikutnya":
7|Page
3. Ketik nama pengguna Database Anda dan atur kata sandi. Anda harus
menyimpan semua detail itu, karena Anda akan membutuhkannya nanti
untuk membuat koneksi database dengan kode PHP Anda.
8|Page
Setelah membuat database dan pengguna Anda, kembali ke
dashboard cPanel dan cari “phpMyAdmin”.
Di bilah sisi kiri, pilih nama basis data Andacontoh_esp_datadan buka tab
"SQL".
10 | P a g e
4. PHP Script HTTP POST – Menerima dan Memasukkan Data ke Database
MySQL
Di bagian ini, kita akan membuat skrip PHP yang bertanggung jawab
untuk menerima permintaan masuk dari ESP32 atau ESP8266 dan
memasukkan data ke dalam database MySQL.
11 | P a g e
Catatan: jika Anda mengikuti tutorial ini dan Anda tidak terbiasa
dengan PHP atau MySQL, saya sarankan untuk membuat file yang sama
persis ini. Jika tidak, Anda harus memodifikasi sketsa ESP yang
disediakan dengan jalur URL yang berbeda.
Edit file yang baru dibuat ( esp-post-data.php ) dan salin cuplikan berikut:
<!--
Rui Santos
Complete project details at
https://RandomNerdTutorials.com/cloud-weather-station-esp32-
esp8266/
12 | P a g e
Permission is hereby granted, free of charge, to any
person obtaining a copy
of this software and associated documentation files.
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$api_key = test_input($_POST["api_key"]);
if($api_key == $api_key_value) {
$sensor = test_input($_POST["sensor"]);
$location = test_input($_POST["location"]);
$value1 = test_input($_POST["value1"]);
$value2 = test_input($_POST["value2"]);
$value3 = test_input($_POST["value3"]);
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
13 | P a g e
return $data;
}
<!--
Rui Santos
Complete project details at
https://RandomNerdTutorials.com/cloud-weather-station-esp32-
esp8266/
14 | P a g e
$username = "REPLACE_WITH_YOUR_USERNAME";
// REPLACE with Database user password
$password = "REPLACE_WITH_YOUR_PASSWORD";
// Create connection
$conn = new mysqli($servername, $username, $password,
$dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
function getAllReadings($limit) {
global $servername, $username, $password, $dbname;
// Create connection
$conn = new mysqli($servername, $username, $password,
$dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Create connection
$conn = new mysqli($servername, $username, $password,
$dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Create connection
$conn = new mysqli($servername, $username, $password,
$dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
16 | P a g e
$sql = "SELECT MIN(" . $value . ") AS min_amount FROM
(SELECT " . $value . " FROM SensorData order by reading_time
desc limit " . $limit . ") AS min";
if ($result = $conn->query($sql)) {
return $result->fetch_assoc();
}
else {
return false;
}
$conn->close();
}
// Create connection
$conn = new mysqli($servername, $username, $password,
$dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Create connection
$conn = new mysqli($servername, $username, $password,
$dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
17 | P a g e
}
http://example.com/esp-post-data.php
18 | P a g e
Anda juga perlu menambahkan file CSS untuk menata dasbor Anda,
beri nama: esp-style.css :
/**
Rui Santos
Complete project details at
https://RandomNerdTutorials.com/cloud-weather-station-esp32-
esp8266/
19 | P a g e
}
}
table {
margin-left: auto;
margin-right: auto;
}
div {
margin-left: auto;
margin-right: auto;
}
h2 { font-size: 2.5rem; }
.header {
padding: 1rem;
margin: 0 0 2rem 0;
background: #f2f2f2;
}
h1 {
font-size: 2rem;
font-family: Arial, sans-serif;
text-align: center;
text-transform: uppercase;
}
.content {
display: flex;
}
.mask {
position: relative;
overflow: hidden;
display: block;
width: 12.5rem;
height: 6.25rem;
20 | P a g e
margin: 1.25rem;
}
.semi-circle {
position: relative;
display: block;
width: 12.5rem;
height: 6.25rem;
background: linear-gradient(to right, #3498db 0%,
#05b027 33%, #f1c40f 70%, #c0392b 100%);
border-radius: 50% 50% 50% 50% / 100% 100% 0% 0%;
}
.semi-circle::before {
content: "";
position: absolute;
bottom: 0;
left: 50%;
z-index: 2;
display: block;
width: 8.75rem;
height: 4.375rem;
margin-left: -4.375rem;
background: #fff;
border-radius: 50% 50% 50% 50% / 100% 100% 0% 0%;
}
.semi-circle--mask {
position: absolute;
top: 0;
left: 0;
width: 12.5rem;
height: 12.5rem;
background: transparent;
transform: rotate(120deg) translate3d(0, 0, 0);
transform-origin: center center;
backface-visibility: hidden;
transition: all 0.3s ease-in-out;
}
.semi-circle--mask::before {
content: "";
position: absolute;
top: 0;
21 | P a g e
left: 0%;
z-index: 2;
display: block;
width: 12.625rem;
height: 6.375rem;
margin: -1px 0 0 -1px;
background: #f2f2f2;
border-radius: 50% 50% 50% 50% / 100% 100% 0% 0%;
}
#tableReadings th {
padding: 10px;
background-color: #2f4468;
color: white;
}
22 | P a g e
Edit file yang baru dibuat ( esp-weather-station.php ) dan salin kode
berikut:
<!--
Rui Santos
Complete project details at
https://RandomNerdTutorials.com/cloud-weather-station-esp32-
esp8266/
23 | P a g e
$last_reading = getLastReadings();
$last_reading_temp = $last_reading["value1"];
$last_reading_humi = $last_reading["value2"];
$last_reading_time = $last_reading["reading_time"];
<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
$result = getAllReadings($readings_count);
if ($result) {
while ($row = $result->fetch_assoc()) {
$row_id = $row["id"];
$row_sensor = $row["sensor"];
$row_location = $row["location"];
$row_value1 = $row["value1"];
$row_value2 = $row["value2"];
$row_value3 = $row["value3"];
$row_reading_time = $row["reading_time"];
// Uncomment to set timezone to - 1 hour (you
can change 1 to any number)
26 | P a g e
//$row_reading_time = date("Y-m-d H:i:s",
strtotime("$row_reading_time - 1 hours"));
// Uncomment to set timezone to + 7 hours (you
can change 7 to any number)
//$row_reading_time = date("Y-m-d H:i:s",
strtotime("$row_reading_time + 7 hours"));
echo '<tr>
<td>' . $row_id . '</td>
<td>' . $row_sensor . '</td>
<td>' . $row_location . '</td>
<td>' . $row_value1 . '</td>
<td>' . $row_value2 . '</td>
<td>' . $row_value3 . '</td>
<td>' . $row_reading_time . '</td>
</tr>';
}
echo '</table>';
$result->free();
}
?>
<script>
var value1 = <?php echo $last_reading_temp; ?>;
var value2 = <?php echo $last_reading_humi; ?>;
setTemperature(value1);
setHumidity(value2);
function setTemperature(curVal){
//set range for Temperature in Celsius -5 Celsius to
38 Celsius
var minTemp = -5.0;
var maxTemp = 38.0;
//set range for Temperature in Fahrenheit 23
Fahrenheit to 100 Fahrenheit
//var minTemp = 23;
//var maxTemp = 100;
function setHumidity(curVal){
//set range for Humidity percentage 0 % to 100 %
var minHumi = 0;
var maxHumi = 100;
Jika Anda mencoba mengakses nama domain Anda di jalur URL berikut,
Anda akan melihat yang berikut:
http://example.com/esp-weather-station.php
28 | P a g e
Jika Anda melihat halaman web dengan nilai kosong di browser Anda,
itu berarti semuanya sudah siap. Di bagian berikutnya, Anda akan
mempelajari cara memasukkan data dari ESP32 atau ESP8266 ke dalam
database.
Proyek ini kompatibel dengan papan ESP32 dan ESP8266. Anda hanya
perlu merakit sirkuit sederhana dan mengunggah sketsa yang disediakan
untuk memasukkan suhu, kelembapan, tekanan, dan lainnya ke dalam
basis data Anda setiap 10 menit.
29 | P a g e
Bagian yang Diperlukan
1) ESP32 / ESP8266
2) Sensor BME280
3) Kabel jumper
4) Breadboard
skema
30 | P a g e
Jadi, merakit sirkuit Anda seperti yang ditunjukkan pada diagram skema
berikut ( Panduan untuk ESP32 dengan BME280 dan ESP32 BME280 Web
Server ).
31 | P a g e
Rakit sirkuit Anda seperti pada diagram skema berikutnya jika Anda
menggunakan papan ESP8266 ( baca Panduan untuk ESP8266 dengan
BME280 ).
Kode ESP32/ESP8266
Ikuti salah satu tutorial berikutnya tergantung pada papan yang Anda
gunakan:
32 | P a g e
(https://randomnerdtutorials.com/esp32-bme280-arduino-ide-
pressure-temperature-humidity/)
Instal Board ESP8266 di Arduino IDE
(https://randomnerdtutorials.com/how-to-install-esp8266-board-
arduino-ide/) – Anda juga perlu menginstal Library BME280 dan library
Adafruit_Sensor (https://randomnerdtutorials.com/esp8266-bme280-
arduino-ide/)
/*
Rui Santos
Complete project details at Complete project details at
https://RandomNerdTutorials.com/cloud-weather-station-esp32-
esp8266/
*/
#ifdef ESP32
#include <WiFi.h>
#include <HTTPClient.h>
#else
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#endif
#include <Wire.h>
#include <Adafruit_Sensor.h>
33 | P a g e
#include <Adafruit_BME280.h>
/*#include <SPI.h>
#define BME_SCK 18
#define BME_MISO 19
#define BME_MOSI 23
#define BME_CS 5*/
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
34 | P a g e
Serial.println("Connecting");
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address:
");
Serial.println(WiFi.localIP());
void loop() {
//Send an HTTP POST request every 10 minutes
if ((millis() - lastTime) > timerDelay) {
//Check WiFi connection status
if(WiFi.status()== WL_CONNECTED){
WiFiClient client;
HTTPClient http;
35 | P a g e
+ "&location=" + sensorLocation
+ "&value1=" + String(bme.readTemperature())
+ "&value2=" +
String(bme.readHumidity()) + "&value3=" +
String(bme.readPressure()/100.0F) + "";
Serial.print("httpRequestData: ");
Serial.println(httpRequestData);
if (httpResponseCode>0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
// Free resources
http.end();
}
else {
Serial.println("WiFi Disconnected");
}
36 | P a g e
lastTime = millis();
}
}
Anda perlu mengubah baris berikut dengan kredensial jaringan Anda: SSID
dan kata sandi. Kode dikomentari dengan baik di mana Anda harus
membuat perubahan.
Proyek ini sudah cukup lama, jadi kami tidak akan membahas secara detail
cara kerja kode, tetapi inilah ringkasan singkatnya:
37 | P a g e
Inisialisasi BME280 untuk mendapatkan bacaan
String httpRequestData =
"api_key=tPmAT5Ab3j7F9&sensor=BME280&location=Office&value1=
24.75&value2=49.54&value3=1005.14";
Demonstrasi
Setelah menyelesaikan semua langkah, biarkan papan ESP Anda
mengumpulkan beberapa bacaan dan mempublikasikannya ke server
Anda. Jika semuanya benar, inilah yang akan Anda lihat di Serial Monitor
Arduino IDE Anda:
38 | P a g e
Jika Anda membuka nama domain Anda di jalur URL ini:
http://example.com/esp-weather-station.php
39 | P a g e
Ada bidang tempat Anda dapat mengetikkan jumlah bacaan untuk
divisualisasikan, serta jumlah bacaan untuk statistik ini: minimum,
maksimum, dan rata-rata. Secara default diatur ke 20. Misalnya, jika Anda
mengetik 30 dan menekan tombol perbarui, Anda akan melihat bahwa
halaman web Anda memperbarui dan menghitung ulang semua nilai.
40 | P a g e
Anda juga dapat membuka phpMyAdmin untuk mengelola data yang
tersimpan diSensorDatameja. Anda dapat menghapusnya, mengedit, dll ...
41 | P a g e
42 | P a g e