Monitoring Nilai Suara Berbasis IoT Menggunakan Esp32 Dan Web

Selamat datang di blog jasaarduino.com. Tertarik menciptakan proyek elektronik berbasis Arduino namun belum memiliki keterampilan teknis yang memadai? Jasa pengembangan proyek Arduino kami siap membantu Anda! Dengan tim berpengalaman yang ahli di bidang embedded systems, kami menyediakan layanan pembuatan dan pengembangan proyek menggunakan platform Arduino, mulai dari prototipe sederhana hingga proyek kompleks. Kami mendukung berbagai kebutuhan, termasuk otomatisasi rumah, robotika, IoT (Internet of Things), hingga aplikasi industri. Selain pembuatan perangkat, kami juga menawarkan layanan konsultasi, pelatihan, dan dokumentasi proyek. Dengan menggunakan jasa kami, Anda dapat fokus pada visi dan ide kreatif, sementara kami menangani sisi teknis agar proyek Anda berjalan dengan optimal

Kali ini projek saya yaitu monitoring sensor suara menggunakan esp32 dan web yang berbasis IoT dengan alat yang saya gunakan yaitu :

  • ESP32
  • Sensor Suara

Untuk Port Yang Digunakan :

Disini saya menggunakan 2 pot yaitu port untuk sensor dan port untuk modul

Berikut ini adalah hasil dari monitoring grafik sensor suara dengan satuan dB

Untuk Kode Yang Saya Gunakan :

#include <Arduino.h>

#include <ArduinoJson.h>
#include <EEPROM.h>
#ifdef ESP32
#include <WiFi.h>
#include <HTTPClient.h>
#include <AsyncTCP.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ESPAsyncTCP.h>
#endif
#include <ESPAsyncWebServer.h>
 

int port_sensor_suara = 20;
int Delay_IOT = 15000; //mengakses server setiap 15 detik
extern const char* default_nama_ssid = "wifi-iot";
extern const char* default_password = "password-iot";
extern const char* default_server = "http://anda.go-web.my.id/server.php?apikey=";
extern const char* default_apikey = "f77c1fcfd2d05a666b2e3d7a701029c9";
String nama_ssid;
String password;
String server_url;
String apikey;
AsyncWebServer server(80);
int reset_default = 0;
int timer1 = 0;
int timer2 = 0;


void debug(String message, int row = 0, int clear = 1) {
  Serial.println(message);
  //tampilkan jika menggunakan lcd
  if (clear == 1) {
    lcd.clear();
  }
  lcd.setCursor(0, row);
  lcd.print(message);
}
void writeStringToEEPROM(int address, const String &str) {
  int len = str.length();
  EEPROM.write(address, len);
  for (int i = 0; i < len; i++) {
    EEPROM.write(address + 1 + i, str[i]);
  }
}
String readStringFromEEPROM(int address) {
  int len = EEPROM.read(address);
  char data[len + 1];
  for (int i = 0; i < len; i++) {
    data[i] = EEPROM.read(address + 1 + i);
  }
  data[len] = '\0';
  return String(data);
}
void saveCredentialsToEEPROM() {
  EEPROM.begin(512);
  writeStringToEEPROM(0, nama_ssid);
  writeStringToEEPROM(64, password);
  writeStringToEEPROM(128, server_url);
  writeStringToEEPROM(192, apikey);
  EEPROM.commit();
  debug("Konfigurasi yang disimpan ke EEPROM:");
  debug("nama_ssid: " + nama_ssid);
  debug("Password: " + password);
  debug("Server URL: " + server_url);
  debug("API Key: " + apikey);
}
void loadCredentialsFromEEPROM() {
  
  EEPROM.begin(512);
  nama_ssid = readStringFromEEPROM(0);
  password = readStringFromEEPROM(64);
  server_url = readStringFromEEPROM(128);
  apikey = readStringFromEEPROM(192);
  if (nama_ssid.length() == 0) {
    nama_ssid = default_nama_ssid;
    debug("SSID Default.");
  } else {
   debug("SSID EEPROM.");
  }
  if (password.length() == 0) password = default_password;
  if (server_url.length() == 0) server_url = default_server;
  if (apikey.length() == 0) apikey = default_apikey;
 
Serial.println("SSID LENGTH : " + (String)nama_ssid.length());
  if (nama_ssid.length() > 250 || reset_default==1) {
    debug("NOVALID:" + nama_ssid );
    delay(3000);
    debug("RESET DEFAULT...");
    nama_ssid = default_nama_ssid;
    password = default_password;
    server_url = default_server;
    apikey = default_apikey;
    saveCredentialsToEEPROM();
    delay(1000);
    debug("ESP RESTART...");
    delay(1000);
    ESP.restart();
  }
  else
  {
    debug("SSID :" + nama_ssid);
    delay(1000);
    debug("PASS :" + password);
    delay(1000);
    debug("URL :" + server_url);
    delay(1000);
    debug("API :" + apikey);
    delay(1000);
  }
}
void setupWiFi() {
  WiFi.begin(nama_ssid.c_str(), password.c_str());
  int attempts = 0;
  while (WiFi.status() != WL_CONNECTED && attempts < 10) {
   
 delay(2000);
    debug("Connect Wi-Fi (" + (String)attempts + ")");
    attempts++;
  }
  if (WiFi.status() == WL_CONNECTED) {
    debug("Terhubung ke Wi-Fi");
    debug("ssid: " + String(WiFi.SSID()));
    debug("IP: " + WiFi.localIP().toString());
delay(1000);
debug("System Ready");
proses_iot("");
    
  } else {
//lcd.clear();
 
    debug("Gagal terhubung");
delay(2000);
   debug("Beralih mode AP");
    delay(2000);
 
    debug("Gagal terhubung..");
    WiFi.softAP("wifi-ESP");
    debug("AP: Wifi-ESP");
    delay(5000);
    debug("IP:" + WiFi.softAPIP().toString());
debug("Buka di Browser ",1,0);
  
delay(2000);
    server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
      String nama_ssidValue = (nama_ssid.length() > 0) ? nama_ssid : default_nama_ssid;
      String passwordValue = (password.length() > 0) ? password : default_password;
      String serverValue = (server_url.length() > 0) ? server_url : default_server;
      String apiKeyValue = (apikey.length() > 0) ? apikey : default_apikey;
      String htmlContent = R"(
        <!DOCTYPE html>
        <html>
        <head>
          <title>ESP32 WiFi Configuration</title>
          <style>
            body {
              font-family: Arial, sans-serif;
              margin: 20px;
            }
            input[type="text"],
            input[type="password"] {
              width: 100%;
              padding: 10px;
              margin: 5px 0;
              display: inline-block;
              border: 1px solid #ccc;
              border-radius: 4px;
              box-sizing: border-box;
            }
          
            input[type="submit"]:hover {
              background-color: #45a049;
            }
            .container {
              padding: 20px;
              border-radius: 5px;
              background-color: #f2f2f2;
            }
          </style>
        </head>
        <body>
          <div style="max-width: 600px; margin: 20px auto; padding: 20px; border: 1px solid #ccc; border-radius: 5px; background-color: #f9f9f9;">
            <div class="container">
              <h2>ESP WiFi Configuration</h2>
              <form action="/save" method="post">
                <label for="nama_ssid">WiFi SSID:</label>
                <input type="text" id="nama_ssid" name="nama_ssid" value=")" + nama_ssidValue + R"(" required><br>
                <label for="password">WiFi Password:</label>
                <input type="text" id="password" name="password" value=")" + passwordValue + R"(" required><br>
                <label for="server">Server URL:</label>
                <input type="text" id="server" name="server" value=")" + serverValue + R"(" required><br>
                <label for="apikey">API Key:</label>
                <input type="text" id="apikey" name="apikey" value=")" + apiKeyValue + R"(" required><br>
               <input  style=" width: 100%;color: #fff; background-color: green; padding: 10px 20px; text-decoration: none; border-radius: 4px;" type="submit" value="SAVE CONFIGURATION">
              </form>
              <br>
              <br>
              Kembali Ke pengaturan Awal :
             <a href="/reset" style="color: #fff; background-color: red; padding: 10px 20px; text-decoration: none; border-radius: 4px;">RESET DEFAULT</a>
            </div>
          </div>
        </body>
        </html>
      )";
      request->send(200, "text/html", htmlContent);
    });
    server.on("/save", HTTP_POST, [](AsyncWebServerRequest *request){
      if(request->args() > 0){ // Pastikan ada argumen yang disampaikan
        for(uint8_t i = 0; i < request->args(); i++){
          if(request->argName(i) == "nama_ssid"){
            nama_ssid = request->arg(i);
          } else if(request->argName(i) == "password"){
            password = request->arg(i);
          } else if(request->argName(i) == "server"){
            server_url = request->arg(i);
          } else if(request->argName(i) == "apikey"){
            apikey = request->arg(i);
          }
        }
        saveCredentialsToEEPROM(); // Simpan konfigurasi ke EEPROM
        request->send(200, "text/html", R"(
          <div style="max-width: 600px; margin: 20px auto; padding: 20px; border: 1px solid #ccc; border-radius: 5px; background-color: #f9f9f9;">
            <h2 style="color: #4CAF50;">Konfigurasi Berhasil Disimpan</h2>
            <p><br>Klik tombol dibawah ini untuk restart esp <br><br><br><a href="/restart" style="color: #fff; background-color: #4CAF50; padding: 10px 20px; text-decoration: none; border-radius: 4px;">RESTART ESP</a></p>
          </div>
        </body>
        )");
      } else {
        request->send(400, "text/html", "Bad Request: Tidak ada data yang disampaikan.");
      }
    });
    server.on("/reset", HTTP_GET, [](AsyncWebServerRequest *request){
      
          nama_ssid = default_nama_ssid;
            password = default_password;
            server_url = default_server;
            apikey = default_apikey;
            saveCredentialsToEEPROM(); 
        request->send(200, "text/html", R"(
          <div style="max-width: 600px; margin: 20px auto; padding: 20px; border: 1px solid #ccc; border-radius: 5px; background-color: #f9f9f9;">
            <h2 style="color: RED;">Konfigurasi Berhasil Di Reset</h2>
            <p><br>Klik tombol dibawah ini untuk restart esp <br><br><br><a href="/restart" style="color: #fff; background-color: red; padding: 10px 20px; text-decoration: none; border-radius: 4px;">RESTART ESP</a></p>
          </div>
        )");
     
    });
    server.on("/restart", HTTP_GET, [](AsyncWebServerRequest *request){
   
      request->send(200, "text/html", R"(
        <head>
  <meta http-equiv="refresh" content="5;url=/">
</head>
<body>
  <div style="max-width: 600px; margin: 20px auto; padding: 20px; border: 1px solid #ccc; border-radius: 5px; background-color: #f9f9f9;">   
    <p><br>ESP Restart... <br><br></p>
  </div>
</body>
        )");
        
      delay(1000); // Tambahkan jeda sebelum merestart
      ESP.restart(); // Restart ESP
      request->redirect("/");
    });
  }
  server.begin();
}
int looping_iot = 0;
int out_1 = 0;
int out_2 = 0;
int out_3 = 0;
int out_4 = 0;
int out_5 = 0;
int out_6 = 0;
int out_7 = 0;
int out_8 = 0;
int out_9 = 0;
int out_10 = 0;
void proses_iot(String nilai) {
  if (WiFi.status() != WL_CONNECTED) return;
  
  WiFiClient client;
  HTTPClient http;
  String url = server_url + apikey + nilai; // Menggunakan server_url
  url.replace(" ", "%20");
  Serial.println("Request URL: " + url);
  http.begin(client, url);
  int httpResponseCode = http.GET();
  if (httpResponseCode == HTTP_CODE_OK) {
    const size_t capacity = JSON_OBJECT_SIZE(1024);
    DynamicJsonDocument jsonDoc(capacity);
    String jsonResponse = http.getString();
    DeserializationError error = deserializeJson(jsonDoc, jsonResponse);
    if (error) {
      Serial.println("Error parsing JSON: " + String(error.c_str()));
      return;
    }
    for (int i = 1; i <= 10; i++) {
      String out = jsonDoc["out_" + String(i)].as<String>();
      Serial.println("out_" + String(i) + ": " + out);
    }
   out_1 = jsonDoc["out_1"].as<int>();
    out_2 = jsonDoc["out_2"].as<int>();
    out_3 = jsonDoc["out_3"].as<int>();
    out_4 = jsonDoc["out_4"].as<int>();
    out_5 = jsonDoc["out_5"].as<int>();
    out_6 = jsonDoc["out_6"].as<int>();
    out_7 = jsonDoc["out_7"].as<int>();
    out_8 = jsonDoc["out_8"].as<int>();
    out_9 = jsonDoc["out_9"].as<int>();
    out_10 = jsonDoc["out_10"].as<int>();
  } else {
    Serial.println("Error Code: " + String(httpResponseCode));
  }
  http.end();
}


void setup()
{
Serial.begin(9600);
pinMode(port_sensor_suara, INPUT);
EEPROM.begin(512);
//BERI NILAI 1 JIKA MAU DIRESET (PERTAMA UPLOAD WAJIB RESET)
reset_default = 0;
loadCredentialsFromEEPROM();
setupWiFi();
timer1 = millis();
 

}
void loop(){
int sensor_suara = analogRead(port_sensor_suara);
Serial.println("SUARA : " + (String)sensor_suara);

if (WiFi.status() == WL_CONNECTED) {} //masukan semua logic loop kedalam ini
timer2 = millis() - timer1;
if (timer2 >= Delay_IOT)
{
 proses_iot("&Suara" + String (Suara));
  timer1 = millis();
}
 
delay(500);


}


Selamat Mencoba !! KLIK DISINI untuk melihat semua proyek proyek yang kami buat. Terimakasih!

Jasa Pembuatan Alat Elektronika Berbasis Platform Arduino untuk kebutuhan Industri, Penelitian Dosen, Mahasiswa, dan Umum. Tidak semua orang diberi kemampuan ilmu elektronika yang baik, oleh sebab itu kadang kita membutuhkan mentor dan seseorang yang ahli dan menguasai dalam bidang tersebut. Jika anda sekarang sedang bingung dan stack dalam pembuatan alat elektronika berbasis Arduino, Automasi dan Internet Of Things dan tidak menemukan solusi, maka kehadiran Kami adalah solusinya. untuk beberapa karya kami bisa lihat di tiktok kami : https://www.tiktok.com/@lab_robotika

Layanan Kami

Jasa Alat Elektro 

Pengembangan perangkat elektronik mulai dari skala kecil hingga besar, disesuaikan dengan kebutuhan Anda.

Jasa Alat Arduino 

Pembuatan alat menggunakan Arduino yang dapat dikustomisasi untuk berbagai aplikasi.

Jasa Alat Elektronika 

Penyediaan alat elektronik dengan pemrograman spesifik, dari sistem kontrol hingga otomasi.

Jasa Alat Mekatronika 

Layanan yang menggabungkan mekanik, elektronik, dan pemrograman untuk menghasilkan alat-alat canggih.

Jasa Alat Internet of Things (IoT) 

Pembuatan alat IoT yang dapat menghubungkan perangkat Anda ke jaringan internet untuk kontrol dan pemantauan jarak jauh.

Jasa Pembuatan Proyek Arduino 

Pengembangan proyek berbasis Arduino, sesuai kebutuhan dan spesifikasi Anda.

Jasa Pembuatan Alat IoT 

Pembuatan alat berbasis IoT dengan berbagai jenis sensor dan aktuator, siap untuk aplikasi industri maupun personal.

Jasa Pembuatan Alat Arduino IoT 

Perangkat Arduino yang terintegrasi dengan IoT, memungkinkan akses dan kendali perangkat melalui internet.

Jasa Konsultasi Arduino dan Internet of Things 

Konsultasi untuk memulai atau mengoptimalkan proyek Arduino dan IoT Anda, dengan dukungan dari para ahli.

Jasa Alat Berbasis STM32 

Pengembangan alat dengan mikrokontroler STM32 untuk aplikasi yang lebih kompleks dan presisi tinggi.

Jasa Pemrograman Embedded System (Raspberry Pi, Orange Pi, dll.) 

Pemrograman dan pengembangan sistem tertanam untuk Raspberry Pi, Orange Pi, dan perangkat sejenis.

Jasa Pemrograman Pengolahan Citra (Image Processing) 

Layanan untuk pemrograman pengolahan citra, cocok untuk aplikasi pengenalan pola, deteksi objek, dan sistem pengawasan.

Jasa Pemrograman Kecerdasan Buatan (Artificial Intelligence) 

Pengembangan AI untuk kebutuhan perangkat cerdas, baik untuk pengambilan keputusan otomatis, machine learning, maupun data analytics.

Kalau teman-teman berminat jasa bisa wa kami di kontak whatsapp dibawah ini atau bisa cek tiktok kami disini : @labrobotika

Tag : Jasa Arduino Bandung Internet of Things Bandung. Jasa Arduino Surabaya Internet of Things Surabaya. Jasa Arduino Jakarta Internet of Things Jakarta. Jasa Arduino Depok. Jasa Arduino Malang. Jasa Arduino Bandung. Jasa Arduino Batam. Jasa Arduino Bekasi. Jasa Arduino Surabaya. Jasa Arduino Semarang. Jasa Arduino Surakarta. Jasa Arduino Pekanbaru. Jasa Arduino Tangerang Selatan. Jasa Arduino Bekasi. Jasa Arduino Makassar. Jasa Arduino Tangerang. Jasa Arduino Medan. Jasa Arduino Palembang. Jasa Arduino Jogja. Jasa Arduino Yogyakarta.Edit

Mau Konsultasi & Diskusi ?