Project ini mengintegrasikan teknologi Flask sebagai backend untuk menyimpan dan memproses data IoT yang diterima dari simulator Wokwi. Dengan endpoint API seperti POST, PUT, dan GET, proyek ini mempermudah pengelolaan data berbasis IoT
Langkah-Langkah Implementasi
A. Backend Flask
db_config = {
'host': 'localhost', # atau IP VM
'user': 'root', # Username MySQL
'password': 'root', # Password MySQL
'database': 'iot_data' # Nama database
}
from flask import Flask, request, jsonify
from flask_cors import CORS
import mysql.connector
from config import db_config
app = Flask(__name__)
CORS(app)
# Koneksi database
def get_db_connection():
return mysql.connector.connect(
host=db_config['host'],
user=db_config['user'],
password=db_config['password'],
database=db_config['database']
)
# Endpoint POST
@app.route('/data', methods=['POST'])
def add_data():
data = request.json
device_name = data.get('device_name')
data_value = data.get('data_value')
conn = get_db_connection()
cursor = conn.cursor()
query = "INSERT INTO device_data (device_name, data_value) VALUES (%s, %s)"
cursor.execute(query, (device_name, data_value))
conn.commit()
cursor.close()
conn.close()
return jsonify({'message': 'Data added successfully'}), 201
# Endpoint GET
@app.route('/data', methods=['GET'])
def get_data():
conn = get_db_connection()
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT * FROM device_data ORDER BY timestamp DESC")
data = cursor.fetchall()
cursor.close()
conn.close()
return jsonify(data)
# Endpoint PUT
@app.route('/data/<int:data_id>', methods=['PUT'])
def update_data(data_id):
data = request.json
device_name = data.get('device_name')
data_value = data.get('data_value')
conn = get_db_connection()
cursor = conn.cursor()
query = "UPDATE device_data SET device_name = %s, data_value = %s WHERE id = %s"
cursor.execute(query, (device_name, data_value, data_id))
conn.commit()
cursor.close()
conn.close()
return jsonify({'message': 'Data updated successfully'})
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
4. Jalankan aplikasi:
python3 app.py
B. Konfigurasi Database MySQL
mysql -u root -p
2. Buat database dan tabel dengan file schema.sql:
CREATE DATABASE iot_data;
USE iot_data;
CREATE TABLE device_data (
id INT AUTO_INCREMENT PRIMARY KEY,
device_name VARCHAR(50),
data_value FLOAT,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
C. Frontend IoT (ESP32)
#include <WiFi.h>
#include <HTTPClient.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// WiFi Configuration
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// API URL
String serverName = "http://152.42.180.245:5000/data";
// Sensor dan LCD
#define SENSOR_PIN 34
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Connecting...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi...");
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WiFi Connected");
}
void loop() {
int sensorValue = analogRead(SENSOR_PIN);
float dataValue = sensorValue * (3.3 / 4095.0); // Convert to voltage
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Value: ");
lcd.print(dataValue);
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(serverName);
http.addHeader("Content-Type", "application/json");
String jsonPayload = "{"device_name": "Sensor1", "data_value": " + String(dataValue) + "}";
int httpResponseCode = http.POST(jsonPayload);
if (httpResponseCode > 0) {
Serial.println("Data sent successfully");
} else {
Serial.println("Failed to send data");
}
http.end();
} else {
Serial.println("WiFi Disconnected");
}
delay(5000); // Send data every 5 seconds
}
4. Jalankan program di Wokwi, Periksa Serial Monitor untuk log pengiriman data ke backend.
D. Pengujian dengan Postman
2. GET Data:
3. PUT Data:
E. Hasil Akhir
F. Kesimpulan
Project ini berhasil mengintegrasikan sistem monitoring berbasis IoT menggunakan ESP32, LCD, dan backend Flask. Dengan menggunakan Postman, semua endpoint berhasil diuji untuk memastikan pengiriman, pengambilan, dan pembaruan data.
0 Orang Menyukai Karya Ini