Ya β telefon anda boleh menghidup-matikan relay melalui cloud Blynk IoT yang percuma: cipta satu template di console.blynk.cloud, salin tiga baris #define-nya ke bahagian paling atas sketch di bawah, dan dawaikan modul relay 5 V ke ESP32 dengan tiga jumper wire. Panduan ini turut membina bahagian yang paling kerap ditinggalkan tutorial lain: suis yang masih berfungsi walaupun internet terputus.
Apa yang anda perlukan untuk kawal relay dari telefon?
Binaan relay Blynk ialah rantaian empat mata: app Blynk pada telefon anda bercakap dengan cloud Blynk, cloud menolak setiap togol ke ESP32 anda melalui Wi-Fi rumah, dan satu pin ESP32 memacu modul relay yang kontaknya menyuis beban sebenar β kipas 12 V, jalur LED atau pam.
Senarai komponen β relay kawalan telefon, langsung tanpa solder
Parts list
| Item | Price | Qty | |
|---|---|---|---|
NodeMCU ESP32 Wi-Fi + Bluetooth Development Board CH340/CP2012 - For IOT Project - ESP32 30PIN EXPANSION BOARD32DEVBD-X32ECH34 | RM8.90 |
Board expansion 30 pin pilihan yang memuatkan DevKit ini dengan tepat β setiap pin dipecahkan keluar di sebelah rel 5 V dan GND, tambah satu jack barrel DC. Tapak yang kemas sebaik sahaja anda mula menambah lebih banyak relay dan sensor.
Board ESP32-C2 berwarna ungu itu ialah adik padat DevKit ini β RISC-V satu teras untuk kerja ESP-IDF; board manager Arduino yang standard tidak menyokong C2, jadi ia tidak boleh mengikut tutorial Arduino IDE ini; setiap contoh Blynk ditulis untuk DevKit CH340 30 pin yang klasik itu. Keluarga relay yang sama turut hadir dengan versi gegelung 12 V β pilih gegelung yang sepadan dengan bekalan yang anda memang sudah ada; versi 5 V berjalan terus dari kuasa USB.
Apa itu Template, Datastream dan Auth Token dalam Blynk?
Blynk IoT menyusun segala-galanya di sekeliling tiga idea. Template ialah pelan induk sesuatu produk: saluran data mana yang wujud dan bagaimana rupa dashboard-nya. Device ialah satu board sebenar yang dicipta daripada pelan itu, dan Auth Token pula kunci log masuk device tersebut β satu rentetan rawak yang panjang, memberitahu cloud siapa yang menyambung dan apa yang boleh dikawalnya. Datastream ialah satu saluran bernama antara app dan board; milik kita ialah Virtual Pin V0, membawa 0 atau 1.
Persediaannya lima minit di console.blynk.cloud β panduan quick-setup Blynk sendiri mencerminkan klik yang sama: Developer Zone β My Templates β New Template (hardware ESP32, connection WiFi). Di dalamnya, tambah satu Datastream pada Virtual Pin V0, jenis Integer, julat 0β1, dan pada dashboard web, satu widget Switch yang diikat pada V0. Kemudian cipta New Device daripada template itu β tab Device Info-nya memaparkan tiga baris #define sedia untuk disalin. Dashboard telefon berasingan: dalam app Blynk IoT, buka device itu, tekan ikon sepana dan tambah widget Button yang diikat pada V0, mod Switch β selagi belum, app hanya menunjukkan skrin kosong.
Tiga baris itu mesti duduk di atas setiap #include: sesuatu #include ialah tampalan teks, dan library Blynk membaca define tersebut pada saat ia ditampal masuk. Letakkannya lebih ke bawah dan library langsung tidak nampak apa-apa di situ β build berhenti dengan ralat library itu sendiri, “Please specify your BLYNK_TEMPLATE_ID and BLYNK_TEMPLATE_NAME”.
Layan token itu seperti kata laluan β sesiapa yang memegangnya boleh mengendalikan relay anda dari mana-mana sahaja, jadi jauhkan ia daripada chat, screenshot dan repo awam. Kalau token anda sudah bocor, padam device itu dalam console dan cipta yang baharu daripada template yang sama β pengganti itu membawa token yang segar, dan token yang bocor tadi tidak lagi sepadan dengan apa-apa.
Nak tengok dulu persediaan console itu diklik langkah demi langkah di skrin?
Bagaimana cara mendawai modul relay ke ESP32?
Bahagian kawalan modul relay 1-way ini ialah terminal skru tiga hala bertanda IN, DCβ dan DC+ β bukan pin header β jadi senarai komponen menggunakan jumper male-to-female: hujung female dicucuk ke pin pra-solder DevKit, hujung male yang terdedah diapit di bawah skru.
| Terminal relay | Pin DevKit | Kenapa |
|---|---|---|
| DC+ | VIN | Gegelung itu elektromagnet 5 V β VIN membawa 5 V dari port USB terus melaluinya |
| DCβ | GND | Laluan pulang sepunya untuk arus gegelung dan isyarat kawalan |
| IN | D26 | GPIO26 β pin output penuh biasa yang kekal senyap dari saat kuasa masuk |
Beban anda pula bersambung ke terminal output di tepi bertentangan: COM di tengah, NO (normally open) di sebelahnya, jadi litar itu mati sehinggalah relay menarik masuk. Relay hanyalah satu suis yang disambung celah pada talian bekalan beban itu sendiri: positif dari bekalan itu masuk ke COM, keluar dari NO ke beban, negatif terus melepasi. Kuasakan gegelung dari VIN, bukan pin 3V3: gegelung SRD-05VDC berukuran kira-kira 70 Ξ©, jadi pada 5 V ia menarik lebih kurang 70 mA β remeh sahaja bagi kuasa USB (lanjut dalam panduan kuasa ESP32 kami). Pin 3V3 juga tidak mampu menutupnya: Songle menetapkan pull-in pada 75% daripada voltan gegelung terkadar β kira-kira 3.75 V β jadi 3.3 V mungkin langsung tidak menarik angker relay itu masuk.
Pada saat reset, ESP32 menyampel pin strapping-nya β GPIO0, 2, 5, 12 dan 15 β untuk memutuskan cara ia boot, dan menggoyangkan pin-pin itu sepanjang proses tersebut, yang membuatkan relay berdetik pada setiap restart. GPIO34, 35, VP dan VN pula gagal dengan cara lain: input sahaja, tiada pemacu output langsung. D26 bebas daripada kedua-dua masalah itu.
Jumper pemilih trigger hitam itu tiba pada kedudukan L (trigger aras rendah) β biarkan di situ. Trigger rendah itulah yang membolehkan modul 5 V patuh pada board 3.3 V: pin ESP32 tidak pernah perlu membekalkan 5 V, hanya menyerap beberapa miliampere daripada LED input optocoupler, yang disuap dari rel DC+ modul itu sendiri. Tarik IN ke rendah dan arus itu mengalir β relay hidup. Pacu IN ke tinggi pada 3.3 V dan hanya 5 β 3.3 = 1.7 V yang tinggal merentasi rantaian input, jauh di bawah ~3 V yang diperlukan LED penunjuk dan LED opto yang bersiri itu untuk mula mengalir β jadi ia kekal mati dengan bersih dalam kedua-dua keadaan.
Utamakan keselamatan: kiub relay biru itu memang dicetak dengan kadaran kontak bersaiz kuasa mains, tetapi binaan ini kekal ketat pada beban DC voltan rendah. Menyuis kuasa mains memerlukan enclosure, jarak creepage dan strain relief yang tiada pada modul terdedah di atas meja β panduan keselamatan relay kami menerangkan bahagian kontak itu dengan betul.

Macam mana rupa kod Blynk ESP32 ini?
Sketch ini dibina di sekeliling Blynk.config() dan bukannya Blynk.begin() yang dipakai setiap contoh copy-paste β pilihan itulah keseluruhan cerita offline-nya, dijelaskan selepas ini. Pasang library Blynk oleh Volodymyr Shymanskyy daripada Library Manager, pilih ESP32 Dev Module sebagai board, gantikan tiga baris #define anda sendiri berserta butiran Wi-Fi β nama rangkaian 2.4 GHz, kerana radio ESP32 tidak nampak SSID yang 5 GHz sahaja β dan upload.
// Relay kawalan telefon Blynk + ESP32, dengan override manual offline.
// Tiga define ini MESTI kekal DI ATAS setiap #include - library Blynk
// membacanya semasa ia sedang di-include. Salin nilai sebenar dari halaman
// device ANDA di console.blynk.cloud; yang ini hanya placeholder.
#define BLYNK_TEMPLATE_ID "TMPL_PASTE_YOURS"
#define BLYNK_TEMPLATE_NAME "Phone Relay"
#define BLYNK_AUTH_TOKEN "PASTE-YOUR-OWN-TOKEN-HERE" // RAHSIA - jangan sesekali kongsi
#define BLYNK_PRINT Serial // log sambungan dalam Serial Monitor
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
const char WIFI_SSID[] = "YourWiFiName";
const char WIFI_PASS[] = "YourWiFiPassword";
const int RELAY_PIN = 26; // silkscreen D26 - senyap semasa boot
const int BOOT_BTN = 0; // butang BOOT DevKit itu sendiri
const int RELAY_ON = LOW; // jumper trigger tiba pada L (rendah = hidup)
const int RELAY_OFF = HIGH;
bool relayState = false; // apa yang relay sepatutnya sedang buat
unsigned long lastRetry = 0;
const unsigned long RETRY_EVERY = 30000UL; // ms antara cubaan semula cloud
void applyRelay() {
digitalWrite(RELAY_PIN, relayState ? RELAY_ON : RELAY_OFF);
}
// Berjalan setiap kali suis V0 dalam app berubah
BLYNK_WRITE(V0) {
relayState = param.asInt(); // 1 = hidup, 0 = mati
applyRelay();
}
// Berjalan setiap kali talian cloud tersambung (semula)
BLYNK_CONNECTED() {
Blynk.syncVirtual(V0); // minta nilai terakhir V0 daripada server
}
void setup() {
pinMode(RELAY_PIN, OUTPUT);
applyRelay(); // relay MATI sebelum apa-apa yang lain
pinMode(BOOT_BTN, INPUT_PULLUP); // ditekan = LOW
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASS); // mula menyambung di latar belakang
Blynk.config(BLYNK_AUTH_TOKEN); // konfigur sahaja - tidak pernah menyekat
Blynk.connect(5000); // cuba selama 5 s, kemudian teruskan juga
}
void loop() {
if (Blynk.connected()) {
Blynk.run(); // layan talian cloud
} else if (millis() - lastRetry > RETRY_EVERY) {
lastRetry = millis(); // satu cubaan semula terhad setiap 30 s
if (WiFi.status() == WL_CONNECTED) Blynk.connect(5000);
}
// Override manual: butang BOOT menogol relay, ada internet atau tidak
static bool lastBtn = HIGH;
bool btn = digitalRead(BOOT_BTN);
if (lastBtn == HIGH && btn == LOW) { // tekanan baharu
delay(30); // debounce
if (digitalRead(BOOT_BTN) == LOW) {
relayState = !relayState;
applyRelay();
if (Blynk.connected()) Blynk.virtualWrite(V0, relayState);
}
}
lastBtn = btn;
}
Ia compile kepada 913,759 bait β kira-kira 69% ruang app DevKit ini. Petik suis dalam app dan relay menjawab dalam sepersekian saat. Belum ada relay di atas meja? Tukar RELAY_PIN kepada 2 dan silangkan nilai RELAY_ON dengan RELAY_OFF, dan template yang sama menjalankan demo klasik LED on-off Blynk pada LED biru onboard DevKit β itu pin strapping, tak apa untuk kelipan, jangan sesekali untuk relay.
Bagaimana suis ini terus berfungsi ketika internet terputus?
Blynk.begin() ialah punca kebanyakan suis Blynk lebih bodoh daripada suis dinding. Di dalam library, ia dua penantian tanpa had: satu gelung berpusing sehingga Wi-Fi tersambung, kemudian while(connect() != true) {} sehingga cloud menjawab. Kalau router mati, sketch tidak pernah keluar dari setup(): tiada loop, tiada butang, relay beku dalam keadaan terakhirnya.
Gantinya membahagikan kerja itu: Blynk.config() hanya menyimpan token dan nama server, jadi ia tidak mungkin menyekat; Blynk.connect(5000) mencuba selama lima saat, kemudian pulang dan membiarkan sketch berjalan walau apa pun jadinya; dan loop mencuba semula sekali setiap 30 saat selagi Wi-Fi hidup. Tukarannya: semasa satu cubaan semula, butang boleh tertunggu sehingga lima saat, sekali setiap setengah minit β kedua-dua nombor itu boleh dilaras.
Override manual menggunakan butang BOOT DevKit itu sendiri (GPIO0) β istimewa hanya semasa reset, ketika cip menyampelnya untuk memutuskan sama ada mahu masuk bootloader; selepas itu ia input biasa dengan pull-up, membaca LOW semasa ditekan. Sketch memerhatikan pinggir itu dan menogol relay.
Apabila talian pulih selepas gangguan, BLYNK_CONNECTED() menyala dan syncVirtual(V0) memainkan semula nilai terakhir suis itu di server β tetapan app yang menang, jadi paparan telefon tidak pernah menipu. Lebih suka keadaan butang fizikal yang menang? Gantikan baris itu dengan Blynk.virtualWrite(V0, relayState), yang menolak keadaan board ke atas pula.

Kesilapan biasa yang kami nampak daripada pelanggan sebenar
“so can include with the blynk?” β Ditanya tentang macam-macam projek, daripada FYP robot perubatan hinggalah stream ESP32-CAM β jawapannya hampir selalu ya: Blynk boleh dicantumkan pada apa sahaja yang sketch itu sudah buat, dengan dua syarat. Tiga define itu duduk di bahagian paling atas, dan tiada apa-apa dalam loop() boleh menyekat β delay() yang panjang melaparkan Blynk.run(), cloud terlepas heartbeat-nya, dan app menunjukkan device itu offline. Jadualkan kerja perlahan dengan millis(), seperti timer cubaan semula di atas.
“what you gonna monitor in the blynk?” β jawapannya: apa sahaja yang anda beri satu datastream. V0 di sini membawa arahan turun ke relay; pemantauan ialah jentera yang sama dihalakan naik β satu datastream bagi setiap bacaan, ditulis dengan Blynk.virtualWrite() daripada kod sensor anda, dalam template yang sama.
Menampal auth token hidup ke dalam group chat. Sketch penuh kerap dikongsi untuk minta tolong dengan token masih di dalamnya β sesiapa yang skrol lalu kini boleh memetik relay anda. Kosongkan ia dahulu sebelum berkongsi kod; gantikan token yang bocor seperti diterangkan di atas.
Upload melalui kabel USB charge-only. Board hidup dan nampak bernyawa, tetapi port serial tidak pernah muncul β dua daripada empat wayar kabel itu memang tiada. Itulah gunanya kabel data USB-C dalam senarai komponen; kalau port masih menyorok juga, panduan baiki upload ESP32 kami menyusuri rantaian itu satu persatu.
Soalan Lazim
Kenapa Blynk kata “Invalid auth token”?
Token dalam sketch itu tidak lagi sepadan dengan mana-mana device β copy-paste yang tertinggal satu aksara, device yang dipadam dan dicipta semula selepas kebocoran, atau template daripada akaun lain. Salin tiga baris itu semula terus dari Device Info dan upload sekali lagi.
Cukupkah pelan percuma Blynk untuk binaan ini?
Cukup β satu template, satu device dan satu widget suis duduk selesa dalam tier percuma. Blynk melaraskan hadnya dari semasa ke semasa, jadi semak halaman pelan dalam console dan bukan nombor yang tercetak dalam tutorial.
Boleh guna modul relay 12 V pula?
Boleh, kalau sistem anda memang sudah ada bekalan 12 V: DC+ ke bekalan itu, DCβ ke ground yang dikongsi dengan ESP32, dan IN kekal ke D26 β optocoupler berfungsi cara yang sama. Gegelung 12 V yang disuap dari VIN 5 V DevKit memang tidak akan menarik masuk.
Kenapa relay saya berdetik sendiri bila ESP32 restart?
Wayar IN itu berada pada pin strapping β GPIO0, 2, 5, 12 atau 15 β yang digoyang cip pada setiap reset semasa memutuskan cara ia boot. Pindahkan ia ke pin output penuh yang senyap seperti D26, D27, D25 atau D33.

Sebaik sahaja telefon sudah mengawal relay, pendawaian yang sama terbawa ke binaan kami yang lain: relay kawalan suara offline memacu modul yang sama ini dengan arahan lisan dan bukannya app, dan panduan stream ESP32-CAM kami menambah separuh kamera bagi kebanyakan brief FYP. Template, token, tiga wayar β dan relay pun menurut perintah dari poket anda.
Kemas kini terakhir Ogos 2026. Tersangkut? Chat dengan kami di WhatsApp.



NodeMCU ESP32 Wi-Fi + Bluetooth Development Board CH340/CP2012 - For IOT Project - ESP-32 (CH340)
Relay Module 3.3V 5V 12V 1/2/4/8 Ways Optocoupler Trigger Relay Module 1 2 4 8 Channel Relay Module - 5V RELAY MODULE(1WAY)
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-F 20CM
Data Cable Type-A Type-C MicroUSB Type-B 0.5m 1m 30cm 0.3m 100cm Data Transfer Upload Code - TYPE-A TO TYPE-C CABLE (1.0M)
NodeMCU ESP32 Wi-Fi + Bluetooth Development Board CH340/CP2012 - For IOT Project - ESP32 30PIN EXPANSION BOARD