AI Assistant
Detail Karya Portofolio

Membuat aplikasi backend sederhana dengan dht22

Muhammad Arya Ismail Oleh: Muhammad Arya Ismail

Ringkasan Portofolio

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

Deskripsi & Detail Proyek

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)