Danu Andrean, 14 Dec 2025
Cara Akses Sensor PH Dengan ESP32

Sensor pH banyak digunakan pada sistem IoT (Internet of Things), terutama di bidang pertanian, akuakultur, pengolahan air, dan monitoring lingkungan. Dengan ESP32, kita dapat membaca nilai pH secara real-time dan mengirimkannya ke server, dashboard web, atau aplikasi mobile.
Apa Itu Sensor pH?
Sensor pH adalah sensor yang digunakan untuk mengukur tingkat keasaman atau kebasaan suatu larutan. Skala pH berada pada rentang:
- 0 – 6 : Asam
- 7 : Netral
- 8 – 14 : Basa
Pada proyek IoT, sensor pH biasanya digunakan untuk:
- Monitoring kualitas air
- Sistem hidroponik
- Tambak ikan atau udang
- Pengolahan limbah cair
Cara Kerja Sensor pH
Sensor pH menghasilkan tegangan analog yang berubah sesuai dengan nilai pH larutan. Tegangan ini kemudian dibaca oleh ADC (Analog to Digital Converter) pada ESP32.
Alur sederhananya:
Larutan → Probe pH → Modul pH → ADC ESP32 → Data Digital
ESP32 memiliki ADC 12-bit, sehingga nilai bacaan berada pada rentang 0 – 4095.
Wiring ESP32 ke Modul PH
Hubungkan pin modul PH ke ESP32 sebagai berikut:
| PH | ESP32 |
|---|---|
| VCC | 3.3V / 5V (sesuai modul) |
| GND | GND |
| PO | GPIO 34 / 35 / 32 / 33 |
Catatan penting:
Gunakan ADC1 pada ESP32 (GPIO 32–39)
Hindari ADC2 jika ESP32 menggunakan WiFi

Program Kalibrasi
#define PH_PIN 35
#define VREF 3.3 // analog reference voltage(Volt) of the ADC
#define ADC 4096.0 // adc max
void setup()
{
Serial.begin(115200);
}
void loop()
{
float value = analogRead(potPin);
Serial.print(value);
Serial.print(" | ");
float voltage = Value * (VREF / ADC);
Serial.println(voltage);
delay(500);
}setelah menghubungkan ph dengan esp32 kita harus melakukan kalibrasi hardware sehingga module bisa bekerja dengan baik, hubungkan input probe dengan ground sebagai berikut:

lihat pada serial usahan nilai tegangannya di sekitar 2.50, jika belum sesui putar potensio yang dekat dengan probe. jika sudah sesui lepaskan jumper dan hubungkan dengan probe dan lanjutkan ke proses testing.
Full Program
#define PH_PIN 35
#define VREF 3.3 // analog reference voltage(Volt) of the ADC
#define ADC 4096.0 // adc max
#define CALIBRATION_fACTOR 21.0
int buffer_arr[10];
float PhRun(){
// Baca data analog
for (int i = 0; i < 10; i++) {
buffer_arr[i] = analogRead(PH_PIN);
delay(30);
}
// Urutkan data (bubble sort)
static int temp = 0;
for (int i = 0; i < 9; i++) {
for (int j = i + 1; j < 10; j++) {
if (buffer_arr[i] > buffer_arr[j]) {
temp = buffer_arr[i];
buffer_arr[i] = buffer_arr[j];
buffer_arr[j] = temp;
}
}
}
// Ambil rata-rata dari data tengah
unsigned long int avgval = 0;
for (int i = 2; i < 8; i++)
avgval += buffer_arr[i];
// Konversi ke voltase ESP32
float volt = (float)avgval * VREF / ADC / 6;
return -5.70 * volt + CALIBRATION_fACTOR;
}
void setup() {
Serial.begin(115200);
}
void loop() {
float ph = PhRun();
Serial.print("pH Value: ");
Serial.println(ph);
delay(1000);
}Rubah nilai CALIBRATION_fACTOR supaya nilai ph keluar nilai 7, karena pada cairan default ph bernilai 7.
dengan ini phmu sudah berjalan dengan baik, Happy coding!! 🎉🎉🎉