aplikasi backend sensor dht22 menggunakan mysql dan flask, untuk menyimpan dan mengirim data suhu dan kelembaban dari rangkaian wokwi dengan penyimpanan dan pengambilan data berbasis waktu
program yang digunakan di wokwi
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <HTTPClient.h>
const int dhtPin = 15; // Pin untuk DHT22 sensor
#define DHTTYPE DHT22 // Definisikan tipe sensor DHT
DHT dht(dhtPin, DHTTYPE);
// Inisialisasi LCD 16x2 I2C (alamat bisa 0x27 atau 0x3F, tergantung LCD)
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* serverUrl = "http://110.239.71.90:6000/add"; // Pastikan tidak ada spasi tambahan
void setup() {
Serial.begin(115200);
// Inisialisasi DHT22 sensor
dht.begin();
// Inisialisasi LCD
lcd.begin(16, 2);
lcd.setBacklight(1); // Menyalakan backlight LCD
lcd.print("Connecting...");
// Connect to WiFi
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 30) { // Coba selama 30 detik
delay(500);
Serial.print(".");
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("Connected to WiFi!");
lcd.clear();
lcd.print("WiFi Connected");
delay(2000); // Menunggu 2 detik untuk menampilkan pesan
} else {
Serial.println("Failed to connect to WiFi.");
lcd.clear();
lcd.print("WiFi Failed");
delay(2000);
}
}
void loop() {
// Membaca suhu dan kelembaban dari sensor DHT22
float h = dht.readHumidity();
float t = dht.readTemperature(); // Menggunakan suhu dalam celcius
// Jika pembacaan sensor gagal
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
lcd.clear();
lcd.print("DHT Error");
delay(2000);
return;
}
// Menampilkan data suhu dan kelembaban pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("suhu: ");
lcd.print(t);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("kelembaban: ");
lcd.print(h);
lcd.print(" %");
// Menampilkan data di Serial Monitor
Serial.print("suhu: ");
Serial.print(t);
Serial.print(" °C");
Serial.print(" kelembaban: ");
Serial.print(h);
Serial.println(" %");
// Mengirim data ke server
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(serverUrl);
http.addHeader("Content-Type", "application/json");
// Mengirim data suhu dan kelembaban dalam format JSON
String jsonData = "{\"sensor_name\": \"DHT22\", \"suhu\": " + String(int(t)) + ", \"kelembaban\": " + String(int(h)) + "}";
int httpResponseCode = http.POST(jsonData);
// Mengecek kode respon HTTP
if (httpResponseCode > 0) {
String response = http.getString(); // Mendapatkan respon dari server
Serial.println("Data sent: " + jsonData);
Serial.println("Server response: " + response); // Menampilkan respon server
} else {
Serial.printf("Error sending data, HTTP response code: %d\n", httpResponseCode);
}
http.end();
} else {
Serial.println("WiFi not connected.");
}
delay(5000); // Tunggu 5 detik sebelum pengulangan
}
selain menggunakan wokwi untuk mengirimkan data ke vm yang diinginkan saya juga menggunakan website postman untuk mengirim dan menyimpan serta memperbarui data yang ada di vm tanpa melakukan perubahan di wokwi yang digunakan, dengan penyimpanan dan pengambilan data berbasis waktu aplikasi ini diharapkan dapat membantu dalam mengirimkan data melalui postman atau wokwi ke server vm cloud server.
catatan: jangan lupa untuk membuat database terlebih dahulu di server vm cloud sebelum membuat folder aplikasinya di vm teman - teman
berikut saya tampilkan program vm yang saya gunakan :
from flask import Flask, request, jsonify
from flask_mysqldb import MySQL
app = Flask(__name__)
# Konfigurasi MySQL
app.config['MYSQL_HOST'] = 'localhost' # Host MySQL
app.config['MYSQL_USER'] = 'root' # Username MySQL
app.config['MYSQL_PASSWORD'] = 'password' # Password MySQL
app.config['MYSQL_DB'] = 'aryagaming' # Nama database yang digunakan
# Inisialisasi MySQL
mysql = MySQL(app)
@app.route('/add', methods=['POST'])
def add_data():
try:
# Ambil data dari request
data = request.get_json()
suhu = data.get('suhu')
kelembaban = data.get('kelembaban')
# Pastikan data ada
if suhu is None or kelembaban is None:
return jsonify({"error": "Missing temperature or kelembaban data"})
# Simpan data ke database
cur = mysql.connection.cursor()
cur.execute(
"INSERT INTO data_sensor (suhu, kelembaban) VALUES (%s, %s)",
(suhu, kelembaban)
)
mysql.connection.commit()
cur.close()
return jsonify({"message": "Data successfully saved"}), 200
except Exception as e:
return jsonify({"error": str(e)}), 500
@app.route('/records', methods=['GET'])
def get_records():
try:
cur = mysql.connection.cursor()
cur.execute("SELECT id, suhu, kelembaban FROM data_sensor")
rows = cur.fetchall()
cur.close()
# Format data sebagai list of dictionaries
results = [
{"id": row[1], "suhu": row[2], "kelembaban": row[3]}
for row in rows
]
return jsonify(results), 200
except Exception as e:
return jsonify({"error": str(e)}), 500
@app.route('/update/<int:id>', methods=['PUT'])
def update_record(id):
try:
# Ambil data dari request
data = request.get_json()
suhu = data.get('suhu')
kelembaban = data.get('kelembaban')
# Pastikan data ada
if suhu is None or kelembaban is None:
return jsonify({"error": "Missing temperature or kelembaban data"}), 400
# Update data di database
cur = mysql.connection.cursor()
cur.execute(
"UPDATE data_sensor SET suhu = %s, kelembaban = %s WHERE id = %s",
(suhu, kelembaban, id)
)
mysql.connection.commit()
# Pastikan record berhasil diupdate
if cur.rowcount == 0:
cur.close()
return jsonify({"error": "Record not found"}), 404
cur.close()
return jsonify({"message": "Data successfully updated"}), 200
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=6000)
0 Orang Menyukai Karya Ini