Keypad 4×4 menjadi alat kirim pesan ke HP. Ketik angka lalu # untuk mengirim angka (misalnya nomor meja atau jumlah barang), atau tekan A/B/C/D untuk pesan siap pakai seperti "Paket datang" dan "Darurat!".
Keypad dibaca seperti proyek 100. Angka dikumpulkan sampai tombol # ditekan, lalu dikirim ke topic angka. Tombol huruf A-D langsung mengirim pesan dari array PESAN_CEPAT: 'A' menjadi nomor 0, 'B' nomor 1, dan seterusnya, dengan rumus k - 'A'.
Setiap tekanan juga mengirim isi ketikan sementara ke topic ketik, jadi orang di depan keypad bisa melihat di HP apa yang sudah diketik. Tombol * menghapus ketikan.
Komponen
| Komponen | Qty | Harga |
|---|---|---|
| ESP32 DOIT DevKit V1 30 pin | 1 | Rp75.000 |
| Keypad Membran 4×4 16-Tombol Angka Huruf Matrix | 1 | Rp10.000 |
| Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 8 | 1 | Rp3.500 |
| Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data | 1 | Rp11.700 |
| Total (tanpa opsional) | Rp88.500 |
Langkah 1: Rangkai komponen
Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.
| Dari | Ke | Kabel | |
|---|---|---|---|
| Keypad membran 4×4 R1 | → | D23 GPIO23 | biru |
| Keypad membran 4×4 R2 | → | D22 GPIO22 | biru |
| Keypad membran 4×4 R3 | → | D21 GPIO21 | biru |
| Keypad membran 4×4 R4 | → | D19 GPIO19 | biru |
| Keypad membran 4×4 C1 | → | D18 GPIO18 | kuning |
| Keypad membran 4×4 C2 | → | D5 GPIO5 | kuning |
| Keypad membran 4×4 C3 | → | D4 GPIO4 | kuning |
| Keypad membran 4×4 C4 | → | D15 GPIO15 | kuning |
Langkah 2: Siapkan dashboard Klenik
Cara cepat: unduh p114.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 |
|---|---|---|
| Text Log Angka Masuk | ichibot/KODE/p114/angka | menampilkan teks masuk |
| Text Log Pesan Cepat | ichibot/KODE/p114/pesan | menampilkan teks masuk |
| Text Log Sedang Diketik | ichibot/KODE/p114/ketik | menampilkan teks masuk |
Langkah 3: Upload kode
Library: PubSubClient (Nick O'Leary), Keypad (Mark Stanley, Alexander Brevig). Board di Arduino IDE: ESP32 Dev 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 114 - Keypad PIN Kirim ke Dashboard
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.h>
#include <Keypad.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_PESAN = "ichibot/budi1234/p114/pesan";
const char* TOPIK_ANGKA = "ichibot/budi1234/p114/angka";
const char* TOPIK_KETIK = "ichibot/budi1234/p114/ketik";
const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
char tombol[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte pinBaris[4] = {23, 22, 21, 19};
byte pinKolom[4] = {18, 5, 4, 15};
Keypad keypad = Keypad(makeKeymap(tombol), pinBaris, pinKolom, 4, 4);
const char* PESAN_CEPAT[4] = {"Tolong ke depan", "Makanan siap", "Paket datang", "Darurat!"}; // A, B, C, D
String ketikan = "";
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);
sambungWiFi();
mqtt.setServer(BROKER, 1883);
}
void loop() {
if (!mqtt.connected()) sambungMQTT();
mqtt.loop();
char k = keypad.getKey();
if (!k) return;
if (k >= 'A' && k <= 'D') { // tombol huruf: pesan siap pakai
mqtt.publish(TOPIK_PESAN, PESAN_CEPAT[k - 'A']);
} else if (k == '*') {
ketikan = ""; // hapus
} else if (k == '#') {
if (ketikan.length()) mqtt.publish(TOPIK_ANGKA, ketikan.c_str());
ketikan = "";
} else {
ketikan += k;
}
mqtt.publish(TOPIK_KETIK, ketikan.c_str()); // tampilkan yang sedang diketik
}Langkah 4: Pahami kodenya
- Empat pesan untuk tombol A-D. Ganti sesuai kebutuhanmu, misalnya pesanan kantin.
- Huruf diubah ke nomor urut array dengan mengurangi
'A'.