Probe baja tahan karat yang bisa dicelup ke air, kolam, akuarium, atau kopi. Suhunya tampil di HP dengan dua angka di belakang koma.
DS18B20 adalah sensor digital 1-Wire. Data dikirim lewat satu kabel (kuning), dan beberapa sensor bisa dipasang di kabel yang sama karena masing-masing punya alamat unik. Jalur data butuh resistor pull-up 4,7 kΩ ke VCC. Modul adaptor di daftar komponen sudah berisi resistor itu dan terminal sekrup, jadi kabel probe tinggal dijepit tanpa solder.
Komponen
| Komponen | Qty | Harga |
|---|---|---|
| NodeMCU ESP8266 V3 (Lolin) | 1 | Rp42.000 |
| Sensor DS18B20 waterproof 1 m | 1 | Rp14.500 |
| Modul adaptor DS18B20 (ada pull-up) | 1 | Rp10.000 |
| Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 3 | 1 | Rp3.500 |
| Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data | 1 | Rp11.700 |
| Total (tanpa opsional) | Rp70.000 |
Langkah 1: Rangkai komponen
Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.
| Dari | Ke | Kabel | |
|---|---|---|---|
| Adaptor + probe DS18B20 VCC | → | 3V | merah |
| Adaptor + probe DS18B20 DAT | → | D2 GPIO4 | kuning |
| Adaptor + probe DS18B20 GND | → | G | hitam |
Langkah 2: Siapkan dashboard Klenik
Cara cepat: unduh p023.json, ganti budi1234 dengan KODE-mu, lalu import di Klenik (menu titik tiga → Export / Import → Import → Ganti total). Langkah lengkapnya ada di Panduan Klenik.
| Widget | Topic | Setting |
|---|---|---|
| Gauge Suhu Air | ichibot/KODE/p023/suhu | 0–100 °C |
| Chart Grafik Suhu Air | ichibot/KODE/p023/suhu | 20–40 °C |
Langkah 3: Upload kode
Library: PubSubClient (Nick O'Leary), OneWire, DallasTemperature. Board di Arduino IDE: NodeMCU 1.0 (ESP-12E Module).
Isi dulu nama WiFi dan password di bagian ISI DULU, lalu ganti budi1234 di baris topic dengan KODE-mu, lalu upload dan buka Serial Monitor (115200).
// Proyek 023 - Termometer Air Tahan Air DS18B20
// Board: NodeMCU ESP8266 V3 | Dashboard: klenik.ichibot.id
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// ===== ISI DULU =====
const char* WIFI_NAMA = "nama-wifi-kamu";
const char* WIFI_PASS = "password-wifi-kamu";
// topic MQTT: ganti budi1234 dengan KODE-mu (sama dengan di dashboard Klenik)
const char* TOPIK_SUHU = "ichibot/budi1234/p023/suhu";
const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
OneWire kabelData(D2); // GPIO4, lewat modul adaptor (sudah ada resistor 4,7k)
DallasTemperature sensor(&kabelData);
unsigned long terakhir = 0;
void langganan() {}
sambungWiFi() dan sambungMQTT(): sama di semua proyek (klik untuk lihat)
void sambungWiFi() {
WiFi.begin(WIFI_NAMA, WIFI_PASS);
Serial.print("WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" OK, IP " + WiFi.localIP().toString());
}
void sambungMQTT() {
while (!mqtt.connected()) {
if (mqtt.connect(WiFi.macAddress().c_str())) {
Serial.println("Terhubung ke Klenik");
langganan();
} else {
Serial.println("Broker gagal, coba lagi 3 detik");
delay(3000);
}
}
}
void setup() {
Serial.begin(115200);
sensor.begin();
sambungWiFi();
mqtt.setServer(BROKER, 1883);
}
void loop() {
if (!mqtt.connected()) sambungMQTT();
mqtt.loop();
if (millis() - terakhir < 5000) return;
terakhir = millis();
sensor.requestTemperatures();
float suhu = sensor.getTempCByIndex(0);
if (suhu == DEVICE_DISCONNECTED_C) {
Serial.println("DS18B20 tidak terdeteksi, cek kabel kuning (DATA)");
return;
}
mqtt.publish(TOPIK_SUHU, String(suhu, 2).c_str());
Serial.printf("Air %.2f C\n", suhu);
}Langkah 4: Pahami kodenya
- Jalur 1-Wire di D2. Kabel probe: merah = VCC, kuning = DATA, hitam = GND. Di modul adaptor, ketiganya dijepit di terminal sekrup.
- Meminta semua sensor di jalur itu mengukur. Pada resolusi bawaan 12 bit, pengukuran butuh ±750 ms.
- Nilai khusus -127 berarti sensor tidak menjawab. Nilai ini tidak dikirim supaya grafik tidak anjlok.