Komponen · 11 mnt baca

Panduan ESP-01 dengan Arduino: Perintah AT, Pemrograman, dan Relay

Hubungkan ESP-01 (ESP8266) ke Arduino: 8 pin, catu daya 3,3 V, Wi-Fi dengan perintah AT, memprogram dengan GPIO0 ke GND, modul relay ESP-01S, dan error yang sering muncul.

ESP-01 adalah modul mungil (24,8 × 14,3 mm) yang sangat murah, dibangun di sekitar chip Wi-Fi ESP8266. Dengan menghubungkan ESP-01 ke Arduino, kamu bisa menambahkan Wi-Fi ke board yang tidak punya koneksi nirkabel, seperti Uno atau Nano, hanya dengan beberapa kabel. Modul ini dikirim dengan firmware perintah AT: Arduino mengirim perintah teks pendek seperti “AT+CWJAP” lewat serial, lalu ESP-01 terhubung ke jaringan, mengirim, dan menerima data. Kalau mau, kamu juga bisa memprogram ESP-01 sebagai mikrokontroler mandiri tanpa Arduino sama sekali; prosesornya jauh lebih cepat daripada prosesor Uno.

Di panduan ini kamu akan mempelajari 8 pin ESP-01, kenapa modul ini wajib mendapat catu 3,3 V yang kuat, cara memakai perintah AT dengan Arduino Uno, cara membuat halaman web yang menyalakan LED dari ponselmu, cara memprogram modul langsung dengan konverter USB-TTL (metode GPIO0 ke GND), cara mengendalikan lampu dengan modul relay ESP-01S, dan cara memakainya dengan Raspberry Pi Pico. Di bagian akhir ada solusi untuk error yang paling sering muncul dan kapan NodeMCU atau ESP32 jadi pilihan yang lebih baik.

Modul Wi-Fi ESP-01 ESP8266
Modul Wi-Fi ESP-01: chip ESP8266EX, memori flash, antena PCB, dan 8 pin dalam header 2×4, semuanya di satu board kecil.

Apa itu ESP-01 dan bagaimana cara kerjanya?

ESP-01 adalah modul pertama dan terkecil yang dirancang Ai-Thinker di sekitar chip ESP8266EX. Di board-nya ada chip, kristal 26 MHz, memori flash yang menyimpan program dan pengaturan, serta antena PCB berkelok; tidak ada port USB, regulator tegangan, atau tombol. Karena itu ESP-01 tidak bisa langsung dicolokkan ke komputer: kamu sendiri yang harus menyediakan daya dan koneksi serialnya. Modul ini bisa dipakai dengan dua cara: sebagai modem Wi-Fi (firmware AT terpasang dan Arduino mengirim perintah) atau sebagai mikrokontroler mandiri (kamu meng-upload programmu sendiri dari Arduino IDE dan firmware AT terhapus). Sebagian besar modul yang dijual sekarang adalah versi ESP-01S yang berwarna hitam.

FiturNilai
ChipESP8266EX (Tensilica L106, 32-bit)
Kecepatan clock80 MHz (bisa dinaikkan ke 160 MHz)
Memori flashESP-01: 512 KB, ESP-01S: 1 MB
RAMSekitar 80 KB RAM data; tersisa ~50 KB untuk programmu ketika Wi-Fi terhubung
Wi-Fi802.11 b/g/n, hanya 2,4 GHz, antena PCB
Tegangan kerja3,0–3,6 V (disarankan 3,3 V)
ArusRata-rata 70–80 mA ketika terhubung, ~170 mA ketika mengirim, puncak di atas 300 mA
Arus deep sleepSekitar 20 µA (chip)
GPIO yang bisa dipakai4 buah: GPIO0, GPIO2, GPIO1 (TX), GPIO3 (RX)
Input analogTidak ada (pin ADC tidak dikeluarkan ke header)
Ukuran24,8 × 14,3 mm
Firmware bawaan pabrikFirmware perintah AT (biasanya 115200 baud)

Perbedaan ESP-01 dan ESP-01S

FiturESP-01ESP-01S
Warna boardBiasanya biruHitam
Memori flash512 KB (1 MB pada versi hitam yang lebih baru)1 MB
LED dayaMerah, selalu menyalaTidak ada
LED biruDi jalur TX (GPIO1), berkedip ketika data dikirimDi GPIO2, menyala ketika pin LOW
Pinout8 pin8 pin yang sama, sepenuhnya kompatibel
Konsumsi dayaBeberapa mA lebih banyak karena LED dayaLebih rendah, lebih cocok untuk proyek baterai

Pinout ESP-01: fungsi 8 pin-nya

ESP-01 punya 8 pin dalam header 2×4, dan hanya empat di antaranya yang bisa dipakai sebagai input dan output. Tidak semua board mencetak nama pin di permukaannya, jadi bandingkan modulmu dengan pinout dari penjual sebelum merangkainya: VCC dan GND yang tertukar bisa merusak modul dalam hitungan detik. Berikut fungsi tiap pin dan cara menghubungkannya dalam operasi normal:

PinFungsiKoneksi dalam operasi normal
VCCInput catu 3,3 VSumber 3,3 V yang kuat (minimal 300 mA)
GNDGroundGND bersama dengan Arduino dan catu daya
TX (GPIO1)Output data serialKe jalur RX Arduino
RX (GPIO3)Input data serialKe jalur TX Arduino (lewat pembagi tegangan pada board 5 V)
EN (CH_PD)Mengaktifkan chipKe 3,3 V (langsung atau lewat 10 kΩ)
RSTMe-restart chip ketika LOWMengambang atau ditarik ke 3,3 V lewat 10 kΩ
GPIO0Memilih mode boot, lalu jadi I/O umumHIGH (mengambang) ketika boot; GND selama flashing
GPIO2I/O umum (LED biru di ESP-01S)Harus tetap HIGH ketika boot
ESP-01 bekerja hanya dengan 3,3 V; batas atas tegangan kerja chip-nya 3,6 V. Menghubungkan 5 V Arduino ke pin VCC bisa merusak modul secara permanen. Pin TX Arduino Uno juga mengeluarkan sinyal 5 V, jadi jangan sambungkan langsung ke pin RX ESP-01: pakai pembagi tegangan atau konverter level logika.

Konsumsi arus: kenapa pin 3,3 V Arduino tidak cukup

Sebagian besar masalah yang merusak ESP-01 atau membuatnya terus reboot berasal dari catu daya. Ketika terhubung ke Wi-Fi, modul ini menarik rata-rata 70–80 mA dan sekitar 170 mA ketika mengirim; lonjakan singkat ketika boot dan ketika bergabung ke jaringan bisa melebihi 300 mA. Padahal pin 3,3 V Arduino Uno secara resmi hanya diberi rating 50 mA. ESP-01 yang diberi daya dari pin ini sering menjawab perintah “AT”, tapi begitu mencoba bergabung ke jaringan, tegangannya anjlok dan modul reset, sehingga terlihat seperti bug software. Solusinya adalah regulator AMS1117-3.3 (1 A) dengan input 5 V, ditambah kapasitor elektrolit 100–470 µF di antara pin VCC dan GND modul. Cara kerja regulator bisa kamu baca di artikel Regulator Tegangan 7805.

Sumber dayaCocok?Catatan
Pin 3,3 V Arduino UnoTidakResminya 50 mA; modul reset ketika bergabung ke Wi-Fi
Pin 3,3 V konverter USB-TTLBiasanya tidakRegulator internal chip-nya biasanya hanya menyuplai 50–100 mA
Regulator AMS1117-3.3 (input 5 V)YaHingga 1 A; 10 µF di output, 100–470 µF di dekat modul
Adaptor USB ESP-01YaPunya CH340 dan AMS1117; modul langsung dicolokkan
2 × baterai AA (3 V)Pas-pasanKetika baterai melemah, tegangan turun di bawah 3 V dan modul jadi tidak stabil
Baterai Li-ion satu sel (3,7–4,2 V)Tidak secara langsungMelebihi batas 3,6 V; butuh regulator 3,3 V low-dropout (LDO)

Menghubungkan ESP-01 ke Arduino Uno (untuk perintah AT)

Satu-satunya port serial hardware Arduino Uno (D0 dan D1) dipakai bersama dengan koneksi USB. Karena itu cara paling praktis adalah menghubungkan ESP-01 ke pin D2 dan D3 dengan library SoftwareSerial: kamu tidak perlu mencabut ESP-01 ketika meng-upload ke Uno, dan Serial Monitor tetap bebas untuk debugging. Raspberry Pi Pico sudah bekerja di 3,3 V, jadi tidak butuh pembagi:

Pin ESP-01Arduino UnoRaspberry Pi PicoCatatan
VCCOutput AMS1117-3.3AMS1117-3.3 atau 3V3(OUT)Pin 3,3 V Uno tidak cukup; output 3V3 Pico disarankan hingga 300 mA
GNDGNDGNDRegulator, board, dan modul memakai GND bersama
TXD2GP1 (UART0 RX)Sambungkan langsung
RXD3 (lewat pembagi 1 kΩ / 2 kΩ)GP0 (UART0 TX)Di Pico tidak perlu pembagi
EN (CH_PD)3,3 V3,3 VLangsung atau lewat 10 kΩ
RSTTidak dihubungkanTidak dihubungkanOpsional: tarik ke 3,3 V lewat 10 kΩ
GPIO0Tidak dihubungkanTidak dihubungkanJangan disambung ke GND dalam operasi normal
GPIO2Tidak dihubungkanTidak dihubungkanHarus tetap HIGH ketika boot

Untuk menurunkan sinyal 5 V dari pin D3 Uno, pasang resistor 1 kΩ dari D3 ke RX ESP-01 dan resistor 2 kΩ dari RX ESP-01 ke GND. Output-nya 5 × 2 / (1 + 2) = 3,33 V; dengan 2,2 kΩ sebagai pengganti 2 kΩ kamu mendapat 3,44 V, dan keduanya aman. Nilai resistor lain bisa kamu hitung dengan kalkulator pembagi tegangan. Arah sebaliknya tidak butuh pembagi: 3,3 V dari pin TX ESP-01 berada di atas ambang 3 V yang dibaca Uno sebagai HIGH. Dasar-dasar komunikasi serial kami bahas lengkap di artikel Komunikasi Serial UART.

Uji pertama: mengirim perintah AT dari Serial Monitor

  1. Upload sketch jembatan di bawah ke Uno; untuk percobaan pertama, atur ESP_BAUD ke 115200, karena sebagian besar modul dikirim dengan kecepatan itu (modul lama mungkin memakai 9600).
  2. Buka Serial Monitor di 115200 baud dan atur akhir baris ke Both NL & CR; tanpa itu modul tidak pernah tahu bahwa perintahnya sudah selesai.
  3. Ketik AT lalu kirim; seharusnya muncul OK. Kalau yang muncul karakter sampah, kecepatannya tidak cocok.
  4. SoftwareSerial tidak bisa membaca dengan andal di 115200, jadi turunkan kecepatan modul secara permanen ke 9600 dengan AT+UART_DEF=9600,8,1,0,0. Walaupun balasannya terlihat kacau, perintahnya biasanya tetap masuk.
  5. Ubah ESP_BAUD di sketch menjadi 9600, upload lagi, lalu ulangi perintah AT; balasan OK sekarang seharusnya terlihat bersih.
  6. Pastikan modul bekerja dengan benar: baca versi firmware dengan AT+GMR dan tampilkan daftar jaringan Wi-Fi di sekitar dengan AT+CWLAP.
C++ (Arduino IDE)
1#include <SoftwareSerial.h>
2
3SoftwareSerial esp(2, 3);          // D2 = RX, D3 = TX (bölücüyle ESP RX'e) / D3 to ESP RX via divider
4
5const long ESP_BAUD = 9600;        // ilk denemede 115200 yap / use 115200 on the first try
6
7void setup() {
8  Serial.begin(115200);            // Seri Monitör hızı / Serial Monitor speed
9  esp.begin(ESP_BAUD);
10  Serial.println("AT komutu yaz / type an AT command");
11}
12
13void loop() {
14  if (esp.available()) {           // ESP-01'den geleni ekrana yaz / ESP-01 -> screen
15    Serial.write(esp.read());
16  }
17  if (Serial.available()) {        // klavyeden yazılanı ESP-01'e gönder / keyboard -> ESP-01
18    esp.write(Serial.read());
19  }
20}

Perintah AT ESP-01 yang paling berguna

PerintahFungsinyaContoh balasan
ATMenguji koneksiOK
AT+RSTMe-restart modulOK ... ready
AT+GMRMenampilkan versi firmwareAT version:... SDK version:... OK
AT+UART_DEF=9600,8,1,0,0Mengubah baud rate secara permanenOK
AT+CWMODE=1Mode station; 2 = access point, 3 = keduanyaOK
AT+CWLAPMenampilkan jaringan Wi-Fi di sekitar+CWLAP:(3,"AgAdi",-58,...)
AT+CWJAP="AgAdi","Sifre123"Bergabung ke jaringan Wi-FiWIFI CONNECTED, WIFI GOT IP, OK
AT+CIFSRMenampilkan alamat IP yang diterima+CIFSR:STAIP,"192.168.1.45"
AT+CIPMUX=1Mengaktifkan banyak koneksi (wajib untuk server)OK
AT+CIPSERVER=1,80Menjalankan server TCP di port 80OK
AT+CIPSTART=0,"TCP","192.168.1.10",80Terhubung ke server di link 00,CONNECT dan OK
AT+CIPSEND=0,20Mengirim 20 byte di link 0> ... SEND OK
AT+CIPCLOSE=0Menutup link 00,CLOSED dan OK
Kalau AT+CWJAP gagal, modul mencetak +CWJAP:1 (timeout), +CWJAP:2 (kata sandi salah), +CWJAP:3 (jaringan tidak ditemukan), atau +CWJAP:4 (koneksi gagal), diikuti FAIL. ESP8266 hanya melihat jaringan 2,4 GHz, jadi kalau jaringanmu tidak ditemukan, pastikan band 2,4 GHz aktif di router-mu. Ketik perintah dengan huruf kapital dan tulis nama jaringan serta kata sandi di dalam tanda kutip ganda.

Mengendalikan LED dari ponsel dengan Arduino Uno dan ESP-01

Sekarang mari ubah perintah AT menjadi program. Sketch di bawah menghubungkan ESP-01 ke jaringanmu, membuka web server kecil di port 80, dan mencetak alamat IP ke Serial Monitor. Ketika kamu mengetik alamat itu di browser ponsel yang terhubung ke Wi-Fi yang sama, terbuka halaman dengan dua tombol; tombol-tombol itu menyalakan dan mematikan LED bawaan di pin 13 Uno. Pasang modul relay sebagai pengganti LED, dan cara yang sama bisa mengendalikan lampu. Sebelum meng-upload, pastikan kecepatan modul sudah kamu atur ke 9600 di langkah sebelumnya.

C++ (Arduino IDE)
1#include <SoftwareSerial.h>
2
3SoftwareSerial esp(2, 3);              // D2 = RX, D3 = TX (bölücüyle) / D3 via divider
4const int LED_PIN = 13;                // Uno'nun dahili LED'i / Uno onboard LED
5
6const char* WIFI_SSID = "AgAdi";       // Wi-Fi adın / your Wi-Fi name
7const char* WIFI_PASS = "Sifre123";    // Wi-Fi şifren / your Wi-Fi password
8
9bool ledOn = false;
10bool pending = false;                  // cevap bekleyen istek var mı / request waiting for a reply
11int linkId = 0;                        // ESP-01'in bağlantı numarası (0-4) / connection id (0-4)
12char line[64];
13byte lineLen = 0;
14
15// Beklenen yazıyı süre dolana kadar ara / wait until the expected text arrives or time runs out
16bool waitFor(const char* expect, unsigned long timeout) {
17  unsigned long start = millis();
18  size_t idx = 0;
19  size_t len = strlen(expect);
20  while (millis() - start < timeout) {
21    if (esp.available()) {
22      char c = esp.read();
23      Serial.write(c);                 // gelen her şeyi göster / echo everything
24      if (c == expect[idx]) {
25        idx++;
26        if (idx == len) return true;
27      } else {
28        idx = (c == expect[0]) ? 1 : 0;
29      }
30    }
31  }
32  return false;
33}
34
35bool sendAT(const char* cmd, const char* expect, unsigned long timeout) {
36  esp.println(cmd);                    // println sonuna \r\n ekler / println adds \r\n
37  return waitFor(expect, timeout);
38}
39
40void sendPage(int id) {
41  char body[220];
42  snprintf(body, sizeof(body),
43           "<meta name='viewport' content='width=device-width'>"
44           "<h2>LED: %s</h2>"
45           "<a href='/on'><button>AC / ON</button></a> "
46           "<a href='/off'><button>KAPAT / OFF</button></a>",
47           ledOn ? "ACIK / ON" : "KAPALI / OFF");
48  char head[110];
49  snprintf(head, sizeof(head),
50           "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n"
51           "Content-Length: %d\r\nConnection: close\r\n\r\n",
52           (int)strlen(body));
53
54  esp.print("AT+CIPSEND=");            // önce kaç bayt gideceğini söyle / announce the length first
55  esp.print(id);
56  esp.print(',');
57  esp.println(strlen(head) + strlen(body));
58  if (waitFor(">", 2000)) {            // ">" gelince veriyi yolla / send data after ">"
59    esp.print(head);
60    esp.print(body);
61    waitFor("SEND OK", 5000);
62  }
63  esp.print("AT+CIPCLOSE=");           // bağlantıyı kapat / close the connection
64  esp.println(id);
65  waitFor("OK", 2000);
66}
67
68void handleLine() {
69  if (strncmp(line, "+IPD,", 5) == 0) {          // yeni istek / new request: +IPD,0,384:GET /on ...
70    linkId = line[5] - '0';
71    if (strstr(line, "GET /on ")) ledOn = true;
72    else if (strstr(line, "GET /off ")) ledOn = false;
73    digitalWrite(LED_PIN, ledOn ? HIGH : LOW);
74    pending = true;
75  } else if (pending && lineLen == 0) {           // boş satır = isteğin sonu / empty line = end of request
76    pending = false;
77    sendPage(linkId);
78  }
79}
80
81void setup() {
82  pinMode(LED_PIN, OUTPUT);
83  Serial.begin(115200);
84  esp.begin(9600);                     // AT+UART_DEF=9600,8,1,0,0 ile ayarlanmış olmalı / set with AT+UART_DEF
85
86  sendAT("AT+RST", "ready", 5000);     // temiz başlangıç / clean restart
87  sendAT("AT+CWMODE=1", "OK", 2000);   // istemci modu / station mode
88
89  esp.print("AT+CWJAP=\"");            // AT+CWJAP="ad","şifre" / AT+CWJAP="ssid","password"
90  esp.print(WIFI_SSID);
91  esp.print("\",\"");
92  esp.print(WIFI_PASS);
93  esp.println("\"");
94  if (!waitFor("OK", 20000)) {
95    Serial.println(F("\nWi-Fi baglanamadi / Wi-Fi failed"));
96  }
97
98  sendAT("AT+CIPMUX=1", "OK", 2000);         // sunucu için çoklu bağlantı / multiple connections
99  sendAT("AT+CIPSERVER=1,80", "OK", 2000);   // 80 portunda sunucu / server on port 80
100  sendAT("AT+CIFSR", "OK", 2000);            // IP adresini yaz / print the IP address
101}
102
103void loop() {
104  while (esp.available()) {            // ESP-01'den gelenleri satır satır oku / read line by line
105    char c = esp.read();
106    if (c == '\n') {
107      line[lineLen] = '\0';
108      handleLine();
109      lineLen = 0;
110    } else if (c != '\r' && lineLen < sizeof(line) - 1) {
111      line[lineLen++] = c;
112    }
113  }
114}

Begini cara kerja kodenya: ketika browser terhubung, ESP-01 meneruskan permintaan ke Arduino dalam bentuk +IPD,0,384:GET /on HTTP/1.1, dengan 0 sebagai nomor link dan 384 sebagai jumlah byte yang diterima. Arduino mencari “GET /on” atau “GET /off” di baris itu lalu mengatur LED. Begitu baris kosong yang menandai akhir permintaan datang, Arduino memberi tahu berapa byte yang akan dikirim dengan AT+CIPSEND=0,length, mengirim halaman setelah modul menampilkan prompt “>”, lalu menutup link dengan AT+CIPCLOSE setelah balasan “SEND OK”. Halamannya sengaja kami buat pendek: RAM 2 KB milik Uno tidak cukup untuk teks HTML yang panjang, dan satu CIPSEND paling banyak hanya bisa mengirim 2048 byte. Untuk proyek yang lebih rumit, library seperti WiFiEspAT membebaskanmu dari mengurus perintah AT sendiri.

Memprogram ESP-01 secara langsung: metode GPIO0 ke GND

ESP8266 di dalam ESP-01, dengan prosesor 32-bit 80 MHz, jauh lebih bertenaga daripada Arduino Uno. Kalau proyekmu hanya berisi relay, sensor, atau LED, kamu sama sekali tidak butuh Arduino: programnya langsung di-upload ke ESP-01. Ketika ESP8266 boot, chip ini memeriksa level GPIO0, GPIO2, dan GPIO15 untuk menentukan apa yang harus dilakukan. Di board ESP-01, GPIO15 sudah tersambung ke GND dan GPIO2 harus tetap HIGH, jadi hanya GPIO0 yang memilih mode boot:

GPIO0GPIO2GPIO15Mode bootPesan boot di 74880 baud
HIGH (mengambang)HIGHLOWJalan normal: program di flash dimulaiboot mode:(3,x)
LOW (GND)HIGHLOWMode pemrograman (UART download)boot mode:(1,x) lalu “waiting for host”
Pin ESP-01KoneksiCatatan
VCCOutput regulator 3,3 VPin 3,3 V konverter USB-TTL biasanya tidak cukup
GNDGND USB-TTL dan GND regulatorSemuanya di ground bersama
TXRXD USB-TTLKoneksi bersilang
RXTXD USB-TTLJumper harus diatur ke 3,3 V
EN (CH_PD)3,3 VLangsung atau lewat 10 kΩ
RSTTidak dihubungkan (sebentar ke GND untuk reset)Opsional: tarik ke 3,3 V lewat 10 kΩ
GPIO0GNDHanya selama upload; lepaskan setelahnya
GPIO2Tidak dihubungkanHarus tetap HIGH ketika boot
  1. Di Arduino IDE, buka File > Preferences lalu tambahkan https://arduino.esp8266.com/stable/package_esp8266com_index.json ke kolom “Additional boards manager URLs”.
  2. Di Boards Manager, cari esp8266 lalu instal paket ESP8266 Community.
  3. Pilih Generic ESP8266 Module dari Tools > Board. Atur Flash Size ke 1MB (FS:64KB OTA:~470KB) untuk ESP-01S, atau salah satu opsi 512KB untuk ESP-01 biru yang lama.
  4. Atur jumper konverter USB-TTL ke 3,3 V, rangkai modul sesuai tabel di atas, dan biarkan GPIO0 tersambung ke GND.
  5. Putuskan daya modul lalu sambungkan lagi, atau sentuhkan RST ke GND sebentar; sekarang modul boot dalam mode pemrograman.
  6. Pilih port konverter USB-TTL dari Tools > Port lalu upload sketch-nya. File > Examples > ESP8266 > Blink cocok sebagai uji pertama; di ESP-01S, LED birunya ada di GPIO2.
  7. Begitu muncul “Hard resetting via RTS pin...”, lepaskan GPIO0 dari GND lalu restart modul. Kalau GPIO0 tetap di GND, programmu tidak akan berjalan dan modul kembali boot ke mode pemrograman.
Supaya flashing lebih mudah, kamu bisa memakai adaptor USB ESP-01 yang sudah dilengkapi CH340 dan AMS1117; modul langsung dicolokkan ke adaptor ini. Sebagian adaptor punya sakelar UART/PROG; pada model tanpa sakelar, kamu perlu menyolder tombol atau jumper di antara GPIO0 dan GND. Kalau tidak punya konverter USB-TTL, kamu bisa menyambungkan pin RESET Arduino Uno ke GND dan memakai chip USB di board itu sebagai jembatan; dalam hal ini TX ke TX dan RX ke RX, dan level 5 V tetap harus diturunkan dengan pembagi. Detailnya ada di artikel konverter USB-TTL.

Kendali relay dengan GPIO0 dan GPIO2: modul relay ESP-01S

Pin serbaguna ESP-01 adalah GPIO0 dan GPIO2, tapi keduanya harus HIGH selama boot. Jadi apa pun yang kamu hubungkan ke pin itu tidak boleh menarik pin ke LOW ketika board menyala. Solusi paling aman adalah koneksi aktif LOW: pin bernilai HIGH ketika boot sehingga relay tetap mati, dan ketika programmu membuat pin LOW, relay menyala. Modul relay ESP-01S siap pakai dirancang persis seperti ini: bekerja di 5 V, regulator di board-nya membuat 3,3 V untuk ESP-01S, dan GPIO0 menggerakkan relay dengan kontak 10 A 250 V AC lewat transistor. Pada board v4.0 dan yang lebih baru, relay menyala ketika GPIO0 LOW; board v1.0 yang lama mungkin perlu sedikit modifikasi supaya bisa bekerja dengan ESP-01S, jadi cek versi board-mu.

Modul relay 5 V
Relay memungkinkan sinyal kendali kecil menyalakan dan mematikan lampu 230 V (220 V di Indonesia); di board relay ESP-01S, relay sejenis tersambung ke pin GPIO0 ESP-01.
C++ (Arduino IDE)
1#include <ESP8266WiFi.h>
2#include <ESP8266WebServer.h>
3#include <ESP8266mDNS.h>
4
5const char* ssid = "AgAdi";            // Wi-Fi adın / your Wi-Fi name
6const char* password = "Sifre123";     // Wi-Fi şifren / your Wi-Fi password
7
8const int RELAY_PIN = 0;               // ESP-01S röle kartında GPIO0 / GPIO0 on the ESP-01S relay board
9const int RELAY_ON = LOW;              // çoğu kartta LOW = çeker; tersse değiştir / LOW = on, swap if yours is inverted
10const int RELAY_OFF = HIGH;
11
12ESP8266WebServer server(80);
13bool relayOn = false;
14
15void sendPage() {
16  String html = F("<!DOCTYPE html><html><head><meta charset='utf-8'>"
17                  "<meta name='viewport' content='width=device-width,initial-scale=1'>"
18                  "<title>ESP-01</title></head>"
19                  "<body style='font-family:sans-serif;text-align:center'>"
20                  "<h1>ESP-01 Röle / Relay</h1><p><b>");
21  html += relayOn ? "AÇIK / ON" : "KAPALI / OFF";
22  html += F("</b></p><p><a href='/on'><button>AÇ / ON</button></a> "
23            "<a href='/off'><button>KAPAT / OFF</button></a></p></body></html>");
24  server.send(200, "text/html", html);
25}
26
27void setRelay(bool on) {
28  relayOn = on;
29  digitalWrite(RELAY_PIN, on ? RELAY_ON : RELAY_OFF);
30  server.sendHeader("Location", "/");  // ana sayfaya dön / back to the main page
31  server.send(303, "text/plain", "");
32}
33
34void setup() {
35  digitalWrite(RELAY_PIN, RELAY_OFF);  // önce kapalı seviye / off level first
36  pinMode(RELAY_PIN, OUTPUT);
37  Serial.begin(115200);
38
39  WiFi.mode(WIFI_STA);
40  WiFi.begin(ssid, password);
41  while (WiFi.status() != WL_CONNECTED) {
42    delay(500);
43    Serial.print('.');
44  }
45  Serial.println();
46  Serial.println(WiFi.localIP());      // bu adresi tarayıcıda aç / open this address in a browser
47  MDNS.begin("esp01");                 // ya da http://esp01.local / or http://esp01.local
48
49  server.on("/", sendPage);
50  server.on("/on", []() { setRelay(true); });
51  server.on("/off", []() { setRelay(false); });
52  server.begin();
53}
54
55void loop() {
56  server.handleClient();
57  MDNS.update();
58}

Setelah meng-upload sketch ke ESP-01S dengan metode di atas, colokkan modul ke board relay dan beri daya 5 V ke board. Kamu bisa membaca alamat IP di Serial Monitor selama konverter USB-TTL masih terhubung, atau mencarinya di daftar perangkat terhubung di router-mu; dari komputer yang mendukung mDNS, http://esp01.local juga bisa dipakai. Kalau ingin menambahkan input seperti tombol, pin terbaik adalah GPIO3 (RX), karena levelnya tidak berpengaruh ketika boot. Dalam hal ini, pakai Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY) untuk membuka port serial dalam mode kirim saja.

Kalau kamu menghubungkan listrik PLN ke kontak relay, rangkai semuanya dalam keadaan daya mati, jangan biarkan ada kontak yang terbuka, dan masukkan rangkaian ke dalam casing berisolasi. Walaupun di relay tertulis 10 A, jalur tembaga di board kecil belum tentu sanggup mengalirkan arus sebesar itu; jangan pakai modul ini untuk beban di atas beberapa ratus watt. Detailnya ada di Apa Itu Modul Relay?

ESP-01 dengan Raspberry Pi Pico (MicroPython)

Dengan ESP-01, kamu juga bisa menambahkan koneksi nirkabel ke Raspberry Pi Pico yang tidak punya Wi-Fi. Karena Pico bekerja di 3,3 V, tidak perlu pembagi tegangan: RX ESP-01 ke GP0 (UART0 TX) dan TX-nya ke GP1 (UART0 RX). UART hardware Pico membaca 115200 baud dengan mudah, jadi kecepatan modul juga tidak perlu diubah; kalau kamu sudah menurunkannya ke 9600 di bagian Uno, atur juga baudrate ke 9600 di kode. Jalankan kode MicroPython di bawah dengan Thonny; modul akan bergabung ke jaringanmu, mencetak alamat IP-nya, dan menampilkan daftar jaringan di sekitar setiap 30 detik. Kalau kamu punya Pico W, Wi-Fi bawaannya lebih mudah dipakai; lihat artikel web server Wi-Fi Pico W.

MicroPython
1from machine import UART, Pin
2import time
3
4# GP0 (TX) -> ESP-01 RX, GP1 (RX) <- ESP-01 TX
5uart = UART(0, baudrate=115200, tx=Pin(0), rx=Pin(1))
6
7def at(cmd, timeout=2000):
8    uart.write(cmd + "\r\n")                   # her komut \r\n ile biter / every command ends with \r\n
9    start = time.ticks_ms()
10    resp = b""
11    while time.ticks_diff(time.ticks_ms(), start) < timeout:
12        if uart.any():
13            resp += uart.read()
14            if b"OK" in resp or b"ERROR" in resp or b"FAIL" in resp:
15                break
16    print(cmd, "->", resp)                     # cevabı göster / show the reply
17    return resp
18
19at("ATE0")                                     # komut yankısını kapat / turn off echo
20at("AT")                                       # OK gelmeli / should answer OK
21at("AT+CWMODE=1")                              # istemci modu / station mode
22at('AT+CWJAP="AgAdi","Sifre123"', 20000)       # Wi-Fi'ye bağlan / join Wi-Fi
23at("AT+CIFSR")                                 # IP adresini sor / ask for the IP
24
25while True:
26    at("AT+CWLAP", 10000)                      # çevredeki ağları tara / scan nearby networks
27    time.sleep(30)

ESP-01, NodeMCU, atau ESP32?

FiturESP-01NodeMCU (ESP8266)ESP32 DevKit
ChipESP8266ESP8266ESP32 (dua inti)
GPIO yang bisa dipakai4 (dua di antaranya TX/RX)Sekitar 11Sekitar 25
Input analogTidak ada1 (A0)18 kanal, 12-bit
Pemrograman lewat USBTidak, butuh konverter USB-TTLYaYa
DayaHanya 3,3 VUSB 5 V atau VINUSB 5 V atau VIN
BluetoothTidakTidakYa (Classic dan BLE)
Ukuran24,8 × 14,3 mmBoard yang pas di breadboardBoard yang pas di breadboard
Paling cocok untukMenambahkan Wi-Fi ke Arduino, satu relay atau sensorMulai belajar Wi-Fi, beberapa sensorProyek dengan banyak pin dan Bluetooth

Kelebihan terbesar ESP-01 adalah ukuran dan harganya; modul ini ideal untuk menambahkan Wi-Fi ke proyek Arduino yang sudah ada atau membuat satu relay atau sensor jadi nirkabel. Tapi karena tidak punya USB, memindah kabel, menambah regulator, dan menyambungkan GPIO0 ke ground setiap kali upload lama-lama melelahkan. Modul ini tidak punya input analog, dan karena GPIO16 tidak dikeluarkan ke header, bangun berkala dari deep sleep tidak berfungsi kecuali kamu menyolder kabel tipis ke salah satu kaki chip. Kalau kamu merencanakan proyek bertenaga baterai, masukkan arus rata-ratanya ke kalkulator umur baterai untuk melihat berapa hari baterainya bertahan. Kalau kamu masih belajar atau butuh lebih dari tiga pin, NodeMCU ESP8266 memberimu chip yang sama lengkap dengan USB dan regulator. Kalau kamu butuh Bluetooth, lebih banyak pin, dan tenaga pemrosesan lebih besar, ESP32 adalah pilihan yang tepat; perbandingan board-nya ada di Arduino atau ESP32?

Ide proyek ESP-01

  • Stopkontak pintar Wi-Fi: nyalakan dan matikan lampu dari ponselmu dengan modul relay ESP-01S dan sketch di atas; tambahkan timer supaya lampu menyala otomatis di malam hari.
  • Sensor suhu nirkabel: hubungkan sensor DS18B20 ke GPIO2; resistor pull-up 4,7 kΩ di jalur data sekaligus memberikan level HIGH yang dibutuhkan ketika boot.
  • Monitor suhu dan kelembapan: tampilkan hasil pembacaan DHT11 di halaman web yang kamu buka di ponsel.
  • Peringatan gerakan: hubungkan sensor PIR ke GPIO3 dan kirim pesan Telegram ketika ada gerakan; caranya sangat mirip dengan artikel bot Telegram ESP32.
  • Wi-Fi untuk proyek Arduino: kirim hasil pengukuran stasiun cuaca berbasis Uno ke program di komputermu atau ke server dengan perintah AT.
  • Remote pintu garasi: sambungkan kontak relay secara paralel dengan tombol pembuka pintu, lalu buka pintu dari ponselmu.

Kesalahan umum dan cara mengatasinya

GejalaKemungkinan penyebabSolusi
“Failed to connect to ESP8266: Timed out waiting for packet header”Modul tidak dalam mode pemrograman, atau TX dan RX tertukarSambungkan GPIO0 ke GND, matikan lalu nyalakan lagi modul, hubungkan TX ke RXD dan RX ke TXD
Karakter sampah di Serial MonitorBaud rate tidak cocok; pesan boot memakai 74880 baudCoba 115200 dan 9600; pilih 74880 untuk melihat pesan boot
Sama sekali tidak ada balasan untuk ATAkhir baris salah, TX dan RX tertukar, atau EN tidak tersambungPilih Both NL & CR, silangkan jalurnya, sambungkan EN ke 3,3 V
Modul terus reset, putus ketika bergabung ke Wi-FiArus tidak cukupPakai AMS1117-3.3 terpisah dan kapasitor 100–470 µF, perpendek kabelnya
Balasan “busy p...”Perintah baru dikirim sebelum perintah sebelumnya selesaiTunggu OK atau ERROR setelah setiap perintah
+CWJAP:3 dan FAILJaringan tidak ditemukan (jaringan 5 GHz atau nama salah)Pakai jaringan 2,4 GHz dan perhatikan huruf besar-kecil
Modul sangat panas, LED tidak menyala5 V masuk ke VCC, atau VCC dan GND terbalikSegera putuskan daya; kemungkinan besar modul sudah rusak
Modul tidak mau boot ketika relay terpasangRangkaian di GPIO0 atau GPIO2 menarik pin ke LOW ketika bootPakai koneksi aktif LOW atau pindahkan input ke GPIO3
Modul relay 5 V tidak pernah matiHIGH 3,3 V tidak sepenuhnya mematikan optocoupler modul 5 VPakai modul relay yang kompatibel dengan 3,3 V atau driver transistor
Perintah AT berhenti bekerja setelah upload dari Arduino IDEProgrammu menggantikan firmware ATFlash ulang firmware AT Espressif dengan esptool atau Flash Download Tool
Untuk mengecek apakah modul benar-benar boot, atur Serial Monitor ke 74880 baud lalu reset modul. Kalau kamu melihat boot mode:(3,x), modul mulai dalam mode normal; boot mode:(1,x) berarti mode pemrograman. Kalau tidak terlihat apa-apa sama sekali, masalahnya ada di catu daya, koneksi EN, atau jalur TX-RX.

Meski ukurannya kecil, ESP-01 adalah modul yang bagus untuk mempelajari semua konsep dasar Wi-Fi: alamat IP, koneksi TCP, web server, dan komunikasi serial. Kalau ada yang tidak berfungsi, cek catu daya dulu, lalu jalur TX-RX dan level di GPIO0; sebagian besar masalah berujung pada tiga titik ini. Di aplikasi BlueGrays kamu akan menemukan proyek seperti koneksi Wi-Fi, web server, mDNS, pembaruan lewat udara (OTA), dan lampu relay pintar, lengkap dengan skema rangkaian dan kode langkah demi langkah.

Pertanyaan umum

Apakah ESP-01 bisa bekerja di 5V?

Tidak. ESP-01 bekerja di antara 3,0 dan 3,6 V, dan menghubungkan 5 V ke pin VCC bisa merusaknya secara permanen. Kalau ingin memberinya daya dari 5 V Arduino, pasang regulator seperti AMS1117-3.3 di antaranya, dan turunkan sinyal 5 V dari jalur TX Uno ke 3,3 V dengan pembagi tegangan.

Bisakah aku memberi daya ESP-01 dari pin 3.3V Arduino?

Tidak disarankan. Pin 3,3 V Uno secara resmi diberi rating 50 mA, sementara ESP-01 menarik 170 mA ketika mengirim dan lebih dari 300 mA dalam lonjakan singkat. Walaupun modul menjawab perintah AT, modul akan reset ketika bergabung ke jaringan; pakai regulator 3,3 V terpisah yang sanggup menyuplai minimal 300–500 mA.

Kenapa ESP-01-ku tidak merespons perintah AT?

Penyebab paling umum adalah baud rate yang salah, akhir baris Serial Monitor yang tidak diatur ke Both NL & CR, TX dan RX yang tidak disilangkan, dan pin EN (CH_PD) yang tidak tersambung ke 3,3 V. Kalau sebelumnya ada program yang di-upload ke modul dari Arduino IDE, firmware AT sudah terhapus dan kamu perlu mem-flash-nya lagi.

Apakah meng-upload kode Arduino menghapus firmware AT ESP-01?

Ya. Program yang kamu upload dari Arduino IDE ditulis ke flash menggantikan firmware AT, dan modul tidak lagi memahami perintah AT. Untuk kembali ke mode AT, flash firmware ESP8266 AT dari Espressif dengan esptool atau Flash Download Tool di alamat yang sesuai dengan ukuran flash modulmu.

Apa perbedaan ESP-01 dan ESP-01S?

Chip dan pinout-nya sama. ESP-01S biasanya berwarna hitam, punya flash 1 MB, tidak punya LED daya, dan LED birunya ada di GPIO2. ESP-01 biru yang lama punya flash 512 KB, LED daya merah yang selalu menyala, dan LED biru di jalur TX.

Berapa baud rate default ESP-01?

Sebagian besar modul dengan firmware AT terbaru dikirim dengan 115200 baud; modul yang lebih lama mungkin memakai 9600 atau 57600. Namun pesan pertama yang dicetak ketika boot memakai 74880 baud. Kalau kamu memakai SoftwareSerial di Arduino Uno, menurunkan kecepatan secara permanen ke 9600 dengan AT+UART_DEF=9600,8,1,0,0 membuat koneksinya andal.

Lihat semua proyek
Koneksi Wi-Fi STA ESP32 (dengan Layar LCD)
#127Mahir

Koneksi Wi-Fi STA ESP32 (dengan Layar LCD)

Di proyek ini, kita menyambungkan ESP32 ke jaringan Wi-Fi rumah dalam mode Station (STA) dengan cara yang aman dan tahan gangguan. Kita menyimpan SSID dan kata sandi di file secrets.h terpisah agar tidak bocor ke Git, menyiapkan mekanisme sambung ulang otomatis, dan menampilkan tingkat sinyal RSSI dan alamat IP di layar LCD I2C. LED bawaan bekerja sebagai indikator status. Ini adalah pengelola koneksi kelas produksi.

4.4(21)
34
Web Server Asinkron ESP32 (dengan Tampilan IP di LCD)
#129Mahir

Web Server Asinkron ESP32 (dengan Tampilan IP di LCD)

Di proyek ini, kita mengubah ESP32 menjadi web server asinkron yang bisa kamu kendalikan dari ponsel atau komputer di jaringan Wi-Fi yang sama. Berkat library ESPAsyncWebServer, server bisa memproses beberapa permintaan bersamaan (berbeda dengan WebServer.h klasik, yang memblokir pada satu permintaan). Kamu bisa membuka alamat IP ESP32 di browser dan mengklik tombol ON/OFF (rute /on dan /off) untuk menyalakan dan mematikan LED yang tersambung ke GPIO 5.

4.8(16)
26
mDNS ESP32: Mengakses Perangkat lewat bluegrays-esp.local (dengan Layar LCD)
#131Mahir
Premium

mDNS ESP32: Mengakses Perangkat lewat bluegrays-esp.local (dengan Layar LCD)

Di proyek ini, kita menambahkan layanan mDNS (Multicast DNS) ke ESP32, sehingga perangkat bisa diakses dengan nama host seperti bluegrays-esp.local, bukan alamat IP. Meskipun IP dari DHCP berubah, perangkat selalu bisa dijangkau dengan nama yang sama. Web server kecil di perangkat menerima perintah kendali LED dari browser lewat alamat http://bluegrays-esp.local/. Layar LCD I2C menampilkan nama host, alamat IP, dan status LED.

4.8(14)
23
Pembaruan OTA ESP32: Instal Firmware Tanpa Kabel (dengan Layar LCD)
#132Mahir
Premium

Pembaruan OTA ESP32: Instal Firmware Tanpa Kabel (dengan Layar LCD)

Di proyek ini, kamu belajar cara meng-upload firmware baru ke ESP32 lewat Wi-Fi tanpa kabel USB. Dengan library ArduinoOTA, ESP32 terlihat di jaringan dan otomatis tercantum sebagai bluegrays-ota di tab "Network port" Arduino IDE. Upload pertama dilakukan lewat USB, dan semua pembaruan berikutnya tanpa kabel; fitur penting untuk perangkat di lapangan. Layar LCD I2C menampilkan status Wi-Fi, alamat IP, nama host, persentase upload OTA, dan pesan error.

4.6(14)
22
Jam Real-Time dari Internet lewat NTP ESP32
#128Mahir
Premium

Jam Real-Time dari Internet lewat NTP ESP32

ESP32 tersambung ke Wi-Fi dan mengambil waktu nyata dengan presisi milidetik dari server NTP (Network Time Protocol). Berkat fungsi configTzTime(), zona waktu Turki (TRT, UTC+3) otomatis diterapkan, dan pergantian DST di negara yang memakai waktu musim panas otomatis diatur dengan string POSIX TZ. Waktunya ditampilkan di Serial Monitor sekaligus di LCD I2C opsional. configTzTime() memulai layanan SNTP; sinkronisasi ulang berkala terjadi selama koneksi tersedia.

4.5(13)
21
Lampu Pintar ESP32 (PIR + LDR + Relay + OLED)
#141Mahir
Premium

Lampu Pintar ESP32 (PIR + LDR + Relay + OLED)

Ubah lorong, kamar mandi, atau gudangmu menjadi lampu pintar dengan ESP32! Dengan sensor gerak PIR, sensor cahaya LDR, dan modul relay, kita membuat skenario klasik "lampu menyala ketika ada gerakan dalam gelap"; jika sudah terang, gerakan TIDAK menyalakan lampu, jadi energi hemat di siang hari. Lampu menyala 30 detik; jika gerakan berlanjut, timer diulang. OLED SSD1306 menampilkan status dengan font besar (NYALA / SIANG / MENUNGGU) dan hitung mundur.

4.3(6)
11
Menyalakan Bohlam 220V dengan Tombol (On-Off)
#20Mahir
Premium

Menyalakan Bohlam 220V dengan Tombol (On-Off)

Ingin menyalakan dan mematikan bohlam rumah sungguhan dengan tombol kecil? Setiap kali kamu menekan tombol, Arduino membalik relay dan bohlam menyala; tekan lagi dan bohlam mati. Relay adalah perantar

4.5(33)
44
Komunikasi Satu Arah Antara 2 Arduino
#57Menengah
Premium

Komunikasi Satu Arah Antara 2 Arduino

Kamu membuat dua Arduino berbicara lewat satu kabel: tekan tombol di satu board dan LED di board lain menyala, tekan lagi dan LED mati. Board pengirim melaporkan tekanan tombol dengan pesan singkat, d

4.4(37)
50