Dasar · 9 mnt baca

Level Shifter: Menghubungkan Perangkat 3,3 V dan 5 V dengan Aman

Apa itu level shifter? Alasan pin ESP32 dan Pico tidak tahan 5 V, ambang VIH/VIL, pembagi tegangan, BSS138 untuk I2C, chip 74HCT, dan tabel modul.

Level shifter adalah rangkaian kecil yang memungkinkan board dengan tegangan kerja 3,3 V (ESP32, Raspberry Pi Pico, ESP8266) berkomunikasi dengan aman dengan board atau modul yang bekerja pada 5 V (Arduino Uno, I2C LCD, HC-SR04, WS2812B). Menghubungkan output 5 V langsung ke pin 3,3 V dapat merusak pin secara perlahan atau seketika; pada arah sebaliknya, sinyal 3,3 V terkadang bahkan tidak terbaca sebagai “1” oleh input 5 V. Mengetahui kapan konverter diperlukan dan jenis yang memadai menghilangkan gangguan misterius pada separuh proyek yang menggabungkan beberapa tegangan.

Dalam artikel ini, kamu akan lebih dulu melihat arti ambang VIH dan VIL serta alasan pin ESP32 dan Pico tidak tahan 5 V. Lalu kita membahas tiga solusi beserta contohnya: konversi satu arah dengan pembagi tegangan dua resistor, konverter MOSFET BSS138 dua arah untuk I2C, dan chip 74HCT untuk sinyal cepat seperti WS2812B atau SPI. Di bagian akhir ada tabel modul yang langsung bekerja pada 3,3 V serta daftar kesalahan umum.

Board pengembangan ESP32
Semua pin GPIO ESP32 memakai logika 3,3 V; sinyal 5 V tidak aman untuk pin tersebut.

Apa itu level logika 3,3 V dan 5 V?

Pin digital hanya mengenal 0 dan 1, tetapi dalam dunia nyata tegangannya bisa berada di mana pun antara 0 dan tegangan catu daya. Karena itu, datasheet setiap chip mencantumkan empat ambang. VIH (input HIGH) adalah tegangan terendah yang dijamin terbaca sebagai 1 oleh input. VIL (input LOW) adalah tegangan tertinggi yang dijamin terbaca sebagai 0. Daerah di antaranya tidak terdefinisi: chip bisa membaca 0 atau 1 di sana. Di sisi output, VOH adalah tegangan terendah yang dijamin pin ketika menghasilkan HIGH, dan VOL adalah tegangan tertinggi yang dijaminnya ketika menghasilkan LOW. Agar dua chip dapat berkomunikasi dengan andal, VOH pengirim harus berada cukup jauh di atas VIH penerima, dan VOL pengirim cukup jauh di bawah VIL penerima. Kamu bisa melihat cara gerbang mengambil keputusan berdasarkan ambang ini di artikel gerbang logika dan mencobanya di alat Gerbang logika.

Chip (catu daya)VIL (maks.)VIH (min.)VOL (maks.)VOH (min.)Batas maksimum absolut pin
ATmega328P, Arduino Uno (5 V)1,5 V (0,3 × VCC)3,0 V (0,6 × VCC)0,9 V4,2 V5,5 V
ESP32 (3,3 V)0,83 V (0,25 × VDD)2,48 V (0,75 × VDD)0,33 V2,64 V3,6 V
RP2040, Raspberry Pi Pico (3,3 V)0,8 V2,0 V0,5 VSekitar 2,6 V3,8 V
Seri 74HC (5 V)1,5 V3,5 V0,1 V4,4 V5,5 V
Seri 74HCT (5 V)0,8 V2,0 V0,1 V4,4 V5,5 V

Ada tiga kesimpulan penting dari tabel tersebut. Pertama, output HIGH Uno 5 V (4,2–5 V) jelas melampaui batas 3,6 V ESP32 dan 3,8 V Pico, sehingga konversi wajib dilakukan pada arah ini. Kedua, output HIGH 3,3 V ESP32 biasanya melampaui ambang VIH 3,0 V Uno, tetapi VOH terendah yang dijamin datasheet adalah 2,64 V; jadi koneksi ini sering bekerja, tetapi mendekati batas ketika kabel semakin panjang atau pin mendapat beban. Ketiga, chip 74HC yang diberi daya 5 V, ekspander I2C dengan ambang 0,7 × VCC seperti PCF8574, atau LED WS2812B tidak akan secara andal menganggap tegangan di bawah 3,5 V sebagai HIGH; bagi chip ini, sinyal 3,3 V memang tidak cukup. Seri 74HCT memiliki VIH 2,0 V, sehingga menjadi salah satu cara paling sederhana dan andal untuk mengubah 3,3 V menjadi 5 V.

Mengapa pin ESP32 dan Pico tidak tahan 5 V?

Setiap pin input pada chip 3,3 V memiliki dioda proteksi kecil yang menghubungkan pin ke jalur 3,3 V dan ke GND. Dioda ini dirancang untuk menyerap pulsa sangat singkat seperti pelepasan listrik statis, bukan arus terus-menerus. Ketika kamu memberikan 5 V ke pin, dioda atas menghantarkan arus sehingga arus mengalir dari sumber 5 V ke jalur 3,3 V. Jika hambatan dalam sumber rendah, arusnya mencapai puluhan miliampere dan panasnya merusak dioda serta rangkaian di sekitar pin. Jika arus lebih kecil, pin tidak langsung mati, tetapi chip mengalami kerusakan seiring waktu, dan tegangan jalur 3,3 V bahkan bisa terdorong naik sehingga board mulai mendapat daya melalui pin: kamu mencabut kabel daya tetapi LED ESP32 tetap menyala redup. Datasheet ESP32 menetapkan batas pin sebesar tegangan catu daya + 0,3 V (sekitar 3,6 V), dan RP2040 sebesar tegangan catu daya + 0,5 V (sekitar 3,8 V). “Aku pernah mencobanya sekali dan tidak rusak” bukan berarti pin tersebut tahan 5 V.

Pin digital chip RP2350 pada Raspberry Pi Pico 2 dirancang agar tahan 5 V selama board mendapat daya; input analog (GP26–GP29) tidak termasuk, dan output pin tetap hanya 3,3 V. Memberikan 5 V ke pin ketika board mati tetap berisiko dalam kondisi apa pun. Pada Pico asli (RP2040), ESP32, dan ESP8266, tidak ada satu pun pin yang tahan 5 V.

Apa yang dibutuhkan untuk setiap kondisi?

KondisiContohSolusi
Output 5 V → input 3,3 VUno TX → ESP32 RX, HC-SR04 ECHO → PicoPembagi tegangan (sinyal lambat) atau buffer 74LVC (sinyal cepat)
Output 3,3 V → input 5 V (VIH sekitar 3 V)ESP32 TX → Uno RXSering langsung bekerja; gunakan 74HCT untuk margin yang terjamin
Output 3,3 V → input 5 V (VIH 3,5 V)ESP32 → WS2812B, chip 74HC 5 VBuffer seperti 74HCT125 / 74AHCT125
Jalur open-drain dua arahI2C (SDA, SCL), 1-WireKonverter MOSFET BSS138
Jalur push-pull cepat dua arahBus data paralel74LVC245 dengan pin arah, atau TXS0108E

Konversi satu arah dengan pembagi tegangan (5 V → 3,3 V)

Cara paling sederhana untuk memasukkan output 5 V ke input 3,3 V adalah memakai dua resistor. Sinyal masuk melalui resistor atas R1, titik tengah terhubung ke pin 3,3 V, dan resistor bawah R2 terhubung ke GND. Output-nya adalah Vout = 5 V × R2 / (R1 + R2); membuat R2 dua kali R1 menurunkan 5 V menjadi 3,33 V. Pembagi tegangan hanya bekerja satu arah: dari tegangan lebih tinggi ke lebih rendah, sehingga tidak bisa digunakan pada jalur dua arah yang mengharuskan sisi 3,3 V membalas. Kecepatannya juga terbatas karena hambatan output pembagi membentuk filter RC kecil bersama kapasitansi pin dan membuat tepi sinyal melengkung. Gunakan kalkulator pembagi tegangan untuk memilih nilai, dan baca artikel pembagi tegangan untuk penjelasan lengkapnya.

R1 (sisi sinyal)R2 (sisi GND)Output pada 5 VHambatan outputCocok untuk
1 kΩ2 kΩ (dua resistor 1 kΩ disusun seri)3,33 V667 ΩSebagian besar kebutuhan termasuk sinyal cepat; menarik 1,7 mA ketika HIGH
2,2 kΩ3,3 kΩ3,00 V1,3 kΩMargin paling aman; UART, HC-SR04 ECHO
10 kΩ20 kΩ3,33 V6,7 kΩArus rendah; UART hingga 115200 baud dan sinyal lambat
4,7 kΩ10 kΩ3,40 V3,2 kΩMendekati batas; jika jalur 5 V naik menjadi 5,25 V, output menjadi 3,57 V, tidak disarankan

Contoh: UART antara Arduino Uno dan ESP32

Dalam proyek yang memakai Uno untuk membaca sensor dan ESP32 untuk mengirim data ke internet lewat Wi-Fi, kedua board berkomunikasi melalui UART. Karena jalur TX Uno menghasilkan 5 V, jalur ini dihubungkan ke pin RX ESP32 melalui pembagi tegangan 1 kΩ + 2 kΩ. Jalur TX 3,3 V ESP32 bisa langsung dihubungkan ke pin RX Uno karena Uno menganggap tegangan di atas 3,0 V sebagai HIGH. Agar port serial USB Uno (D0, D1) tetap tersedia untuk komputer, sisi Uno memakai SoftwareSerial pada D10 dan D11; pada ESP32, port serial perangkat keras kedua Serial2 berjalan pada GPIO 16 (RX) dan 17 (TX). GND kedua board harus dihubungkan bersama.

C++ (Arduino IDE)
1// Arduino Uno: SoftwareSerial ile ESP32'ye veri gönder / send data to the ESP32 with SoftwareSerial
2// Uno D11 (TX, 5 V) -> 1k -> ESP32 GPIO 16 ; GPIO 16 -> 2k -> GND
3// ESP32 GPIO 17 (TX, 3,3 V) -> Uno D10 (RX) doğrudan / directly ; GND <-> GND
4#include <SoftwareSerial.h>
5
6SoftwareSerial link(10, 11);   // RX, TX
7
8void setup() {
9  Serial.begin(9600);          // bilgisayar / computer
10  link.begin(9600);            // ESP32 hattı / ESP32 line
11}
12
13void loop() {
14  int raw = analogRead(A0);
15  link.print(F("A0="));
16  link.println(raw);           // ör. / e.g. "A0=512"
17
18  unsigned long start = millis();
19  while (millis() - start < 1000) {          // 1 sn cevap bekle / wait 1 s for a reply
20    if (link.available()) {
21      String reply = link.readStringUntil('\n');
22      Serial.print(F("ESP32: "));
23      Serial.println(reply);
24    }
25  }
26}
C++ (Arduino IDE)
1// ESP32: Serial2 ile Uno'dan gelen satırları oku ve cevap ver / read lines from the Uno on Serial2 and reply
2const int RX2_PIN = 16;        // bölücünün orta noktası / divider midpoint
3const int TX2_PIN = 17;        // Uno D10'a doğrudan / straight to Uno D10
4
5void setup() {
6  Serial.begin(115200);
7  Serial2.begin(9600, SERIAL_8N1, RX2_PIN, TX2_PIN);
8}
9
10void loop() {
11  if (Serial2.available()) {
12    String line = Serial2.readStringUntil('\n');
13    line.trim();
14    Serial.print("Uno: ");
15    Serial.println(line);
16    Serial2.print("OK ");      // 3,3 V çıkış Uno için yeterli / 3.3 V output is enough for the Uno
17    Serial2.println(line.length());
18  }
19}

Sebelum meng-upload, ukur titik tengah pembagi tegangan dengan multimeter: ketika Uno menyala dan tidak mengirim apa pun, kamu seharusnya melihat sekitar 3,3 V karena jalur UART berada pada HIGH ketika menganggur. Jika Serial Monitor Uno menampilkan baris seperti “ESP32: OK 6” setiap detik, komunikasi dua arah sudah bekerja. Pada 9600 baud, satu bit berlangsung 104 µs, sedangkan jeda yang ditimbulkan pembagi tegangan 1 kΩ + 2 kΩ berada dalam rentang nanodetik, sehingga kecepatan sama sekali bukan masalah.

Contoh: menghubungkan HC-SR04 ke Raspberry Pi Pico

Sensor jarak ultrasonik HC-SR04
HC-SR04 bekerja pada 5 V dan pin ECHO-nya menghasilkan pulsa 5 V; sinyal ini harus melewati pembagi tegangan sebelum masuk ke board 3,3 V.

HC-SR04 hanya bekerja dengan andal pada 5 V. Jika kamu memberi daya ke Pico dari USB, hubungkan VCC sensor ke pin VBUS Pico (pin 40). Input TRIG dapat membaca pulsa 3,3 V Pico tanpa masalah, sehingga langsung dihubungkan ke GP15. Namun, ECHO mengembalikan pulsa 5 V; pasang resistor 1 kΩ di antara ECHO dan GP14, serta resistor 2 kΩ di antara GP14 dan GND. Kode mengukur durasi pulsa ECHO dalam mikrodetik dengan time_pulse_us dan mengubahnya menjadi jarak menggunakan kecepatan suara di udara (sekitar 343 m/dtk).

MicroPython
1# Raspberry Pi Pico + HC-SR04 (ECHO bölücüyle) / Raspberry Pi Pico + HC-SR04 (ECHO through a divider)
2# VCC -> VBUS (pin 40), GND -> GND, TRIG -> GP15, ECHO -> 1k -> GP14 -> 2k -> GND
3from machine import Pin, time_pulse_us
4import time
5
6trig = Pin(15, Pin.OUT)
7echo = Pin(14, Pin.IN)
8
9
10def distance_cm():
11    trig.value(0)
12    time.sleep_us(2)
13    trig.value(1)                      # 10 µs tetik darbesi / 10 µs trigger pulse
14    time.sleep_us(10)
15    trig.value(0)
16    t = time_pulse_us(echo, 1, 30000)  # en fazla 30 ms bekle / wait at most 30 ms
17    if t < 0:
18        return None                    # yankı yok / no echo
19    return t * 0.0343 / 2              # gidiş-dönüş / round trip
20
21
22while True:
23    d = distance_cm()
24    if d is None:
25        print("Olcum yok / No echo")
26    else:
27        print("Mesafe / Distance: {:.1f} cm".format(d))
28    time.sleep(0.5)

Level shifter dua arah BSS138

Sebagian besar board kecil yang dijual sebagai “level shifter 4 kanal” memiliki satu MOSFET kanal-N BSS138 dan dua resistor pull-up 10 kΩ per kanal. Rangkaiannya sangat sederhana: gate MOSFET dihubungkan ke 3,3 V (LV), source ke sisi tegangan rendah, dan drain ke sisi tegangan tinggi. Resistor pull-up masing-masing sisi menarik jalur ke tegangan catu daya sisi tersebut. Susunan ini dirancang untuk jalur open-drain seperti I2C, yang hanya menarik jalur ke 0 dan menyerahkan level 1 kepada resistor pull-up, serta bekerja dua arah secara otomatis; tidak ada pin arah untuk menentukan sisi mana yang sedang mengirim.

  1. Kedua sisi menganggur: Gate dan source MOSFET sama-sama berada pada 3,3 V, beda tegangan keduanya nol, dan MOSFET mati. Masing-masing sisi ditarik HIGH oleh resistornya sendiri: sisi LV ke 3,3 V, sisi HV ke 5 V.
  2. Sisi 3,3 V menarik LOW: Source turun ke 0 V; karena gate tetap pada 3,3 V, tegangan gate-source menjadi 3,3 V dan MOSFET menyala. Sisi HV ditarik LOW melalui MOSFET.
  3. Sisi 5 V menarik LOW: Dioda bodi di dalam MOSFET menghantarkan arus dan menarik source turun ke sekitar 0,7 V. Begitu tegangan gate-source mencapai sekitar 2,6 V, MOSFET menyala penuh dan sisi LV juga menjadi LOW sepenuhnya.
Pin modulHubungkan keCatatan
LVPin 3V3 board 3,3 VCatu daya sisi tegangan rendah dan tegangan gate MOSFET
HVSumber 5 V (Uno 5V atau ESP32 VIN)Catu daya pull-up sisi tegangan tinggi
GND (dua)GND kedua boardGround bersama diperlukan
LV1–LV4Pin ESP32 atau PicoSinyal sisi 3,3 V
HV1–HV4Pin modul 5 VMasing-masing berpasangan dengan pin LV bernomor sama
Kecepatan board BSS138 ditentukan oleh resistor pull-up 10 kΩ-nya: board ini menangani I2C pada 100 dan 400 kHz serta UART pada 115200 baud dengan mudah, tetapi tepi sinyalnya terlalu lambat untuk data WS2812B 800 kHz atau SPI beberapa MHz. Board 8 kanal dengan arah otomatis seperti TXS0108E lebih cepat untuk sinyal push-pull; board ini juga bekerja dengan I2C, tetapi bisa menjadi tidak stabil jika jalur memiliki resistor pull-up yang kuat dan kabel panjang. TXB0108 dari keluarga yang sama sama sekali tidak cocok untuk I2C.

Contoh: menghubungkan ESP32 ke LCD I2C 5 V

LCD karakter 16x2 tidak menghasilkan kontras yang cukup kecuali diberi daya 5 V, dan backpack I2C PCF8574 di belakangnya menarik SDA dan SCL ke 5 V melalui resistor 4,7 kΩ. Selain itu, ambang VIH PCF8574 adalah 0,7 × VCC, yaitu 3,5 V pada catu daya 5 V; tegangan 3,3 V ESP32 berada di bawahnya. Jadi, memakai konverter BSS138 di antara LCD I2C dan ESP32 melindungi pin sekaligus membuat komunikasi andal. Hubungkan seperti ini: pin 3V3 ESP32 ke LV, pin VIN-nya (5 V dari USB) ke HV dan VCC LCD, semua GND bersama; GPIO 21 ke LV1 dan HV1 ke SDA LCD; GPIO 22 ke LV2 dan HV2 ke SCL LCD. Jika kode scanner di bawah menemukan LCD (biasanya pada 0x27 atau 0x3F), konverter sudah bekerja.

C++ (Arduino IDE)
1// ESP32 I2C tarayıcı: BSS138 dönüştürücü üzerinden 5 V'luk cihazları bul
2// ESP32 I2C scanner: find 5 V devices through a BSS138 converter
3// GPIO 21 -> LV1 / HV1 -> SDA ; GPIO 22 -> LV2 / HV2 -> SCL ; 3V3 -> LV ; VIN (5 V) -> HV
4#include <Wire.h>
5
6const int SDA_PIN = 21;
7const int SCL_PIN = 22;
8
9void setup() {
10  Serial.begin(115200);
11  Wire.begin(SDA_PIN, SCL_PIN);
12  Wire.setClock(100000);       // 100 kHz, BSS138 için rahat hız / comfortable speed for the BSS138
13}
14
15void loop() {
16  int found = 0;
17  for (byte addr = 1; addr < 127; addr++) {
18    Wire.beginTransmission(addr);
19    if (Wire.endTransmission() == 0) {      // 0 = ACK, cihaz var / device present
20      Serial.printf("Cihaz / Device: 0x%02X\n", addr);
21      found++;
22    }
23  }
24  if (found == 0) Serial.println("Cihaz yok / No device found");
25  Serial.println("---");
26  delay(3000);
27}

Chip 74HCT: sinyal cepat satu arah

Ketika pembagi tegangan atau BSS138 terlalu lambat, solusi profesionalnya adalah chip buffer. Seri 74HCT bekerja pada 5 V, tetapi ambang input-nya kompatibel dengan TTL (VIH = 2,0 V), sehingga mudah membaca sinyal 3,3 V dari ESP32 atau Pico sebagai HIGH dan menghasilkan sinyal 5 V penuh dengan tepi tajam. Penggunaan paling umum adalah jalur data LED strip WS2812B: pin ESP32 dihubungkan ke input 74AHCT125, dan output-nya melewati resistor 330 Ω menuju DIN LED strip; pin OE (enable) 74AHCT125 dihubungkan ke GND. Untuk arah sebaliknya, yaitu menurunkan sinyal cepat 5 V ke 3,3 V, gunakan 74LVC125 atau 74LVC245 dengan catu daya 3,3 V; input chip ini tahan hingga 5,5 V terlepas dari tegangan catu dayanya sendiri.

SolusiCatu dayaArahKanalPenggunaan umum
74AHCT125 / 74HCT1255 V3,3 V → 5 V4Data WS2812B, SPI, MAX7219
74HCT2455 V3,3 V → 5 V8Bus data paralel, banyak output
74LVC125 / 74LVC2453,3 V5 V → 3,3 V4 / 8Output sensor 5 V cepat, modul kartu SD
Modul BSS1383,3 V dan 5 VDua arah4I2C, 1-Wire, UART lambat
Pembagi teganganTidak ada5 V → 3,3 V1UART RX, HC-SR04 ECHO, tombol

Modul mana yang langsung bekerja pada 3,3 V?

Tabel di bawah merangkum apakah modul yang paling sering digunakan dalam proyek ESP32 dan Pico dapat terhubung ke board 3,3 V tanpa konverter. Kamu bisa memberi daya ke modul bertanda “Ya” dari pin 3V3 dan langsung menghubungkan pin sinyalnya. Meski begitu, modul yang dijual dengan nama sama bisa memiliki versi berbeda; periksa apakah board memiliki regulator atau level shifter, dan jika ragu, ukur tegangan pada pin sinyal dengan multimeter ketika VCC mendapat daya.

ModulLangsung pada 3,3 VCatatan
Modul BME280 / BMP280YaChip itu sendiri hanya menerima maksimal 3,6 V; beri daya dari 3V3
DHT11 / DHT22Ya3,3–5,5 V; gunakan kabel pendek pada 3,3 V
DS18B20Ya3,0–5,5 V; pull-up 4,7 kΩ ke 3,3 V
OLED 0,96 inci (SSD1306)YaModul memiliki regulator; memberi daya dari 3V3 juga menjaga I2C pada 3,3 V
MPU6050 (GY-521)YaPull-up modul terhubung ke VCC; beri daya dari 3V3
RC522 RFIDYa, hanya 3,3 VMemberi daya dari 5 V akan merusak modul
nRF24L01Ya, hanya 3,3 VTambahkan kapasitor 10–100 µF pada catu daya
HC-SR04TidakBeri daya dari 5 V dan turunkan ECHO dengan pembagi tegangan; versi 3,3 V adalah HC-SR04P
LCD I2C 16x2 (PCF8574)SebagianLCD memerlukan 5 V; gunakan BSS138 untuk SDA dan SCL
LED strip WS2812BSebagianDiberi daya dari 5 V; data 3,3 V mendekati batas, disarankan memakai 74AHCT125
Modul relay 5 VSebagianPada modul aktif LOW, HIGH 3,3 V mungkin tidak melepaskan relay sepenuhnya; pilih modul dengan pemicu 3,3 V
Servo SG90Ya untuk sinyalBeri daya motor dari 5 V; sinyal PWM 3,3 V biasanya cukup

Kesalahan umum dan cara memperbaikinya

GejalaKemungkinan penyebabSolusi
Konverter BSS138 sama sekali tidak bekerjaCatu daya LV dan HV tidak terhubung atau tertukarBerikan 3,3 V ke LV dan 5 V ke HV; satukan GND
LED ESP32 menyala redup ketika USB dicabutSinyal 5 V memberi daya ke board melalui pinTambahkan pembagi tegangan atau konverter pada jalur tersebut
Sinyal terdistorsi atau melengkung setelah pembagi teganganNilai resistor terlalu besar untuk jalur cepatTurunkan menjadi 1 kΩ + 2 kΩ atau gunakan buffer 74LVC
LED pertama pada strip WS2812B berkedip-kedipData 3,3 V berada di bawah ambang VIH 3,5 VKonversikan ke 5 V dengan 74AHCT125 dan tambahkan 330 Ω pada jalur data
I2C kadang bekerja, kadang macetPull-up ke 5 V dan ambang VIH perangkat yang tinggiGunakan BSS138 dan turunkan kecepatan ke 100 kHz
Relay tidak pernah lepasModul relay aktif LOW tidak membaca 3,3 V sebagai HIGHGunakan modul pemicu 3,3 V atau driver transistor
Karakter UART menjadi kacau setelah melewati konverterTidak ada GND bersamaHubungkan GND kedua board
Sebelum memberi daya untuk pertama kali pada rangkaian dengan beberapa tegangan, ukur setiap jalur sinyal yang menuju board 3,3 V menggunakan multimeter ketika board belum terhubung. Jika tidak ada jalur yang melampaui 3,6 V, board aman untuk dihubungkan. Kebiasaan sederhana ini adalah cara termurah untuk menyelamatkan ESP32.

Konversi level logika mungkin terdengar teknis, tetapi intinya ada tiga aturan: selalu lindungi jalur dari 5 V ke 3,3 V, periksa ambang VIH penerima pada jalur dari 3,3 V ke 5 V, dan gunakan BSS138 pada jalur dua arah seperti I2C. Dengan aturan ini, kamu bisa menggabungkan Arduino, ESP32, dan Pico dalam proyek yang sama dengan tenang. Di aplikasi BlueGrays, setiap koneksi dalam proyek ESP32 dan Raspberry Pi Pico dijelaskan dengan pin yang sesuai dengan level logika board serta skema pengkabelan langkah demi langkah.

Pertanyaan umum

Apakah ESP32 tahan 5 V?

Tidak. Datasheet ESP32 menetapkan batas maksimum tegangan catu daya + 0,3 V, sekitar 3,6 V, untuk pin GPIO. Ketika diberi 5 V, dioda proteksi pin menghantarkan arus, arus mengalir ke jalur 3,3 V, dan pin bisa rusak seiring waktu atau seketika. Walaupun terlihat bekerja untuk sementara, bukan berarti koneksi itu aman.

Bisakah aku menghubungkan Arduino ke ESP32 tanpa level shifter?

Sebagian bisa. Sinyal 3,3 V dari ESP32 ke Arduino biasanya melampaui ambang 3,0 V Uno, sehingga bisa langsung dihubungkan. Namun, sinyal 5 V dari Arduino ke ESP32 wajib melewati pembagi tegangan atau konverter. Dalam semua kondisi, GND kedua board harus disatukan.

Level shifter mana yang sebaiknya kupakai untuk I2C?

Karena jalur I2C bersifat open-drain, konverter MOSFET BSS138 dua arah merupakan pilihan terbaik; konverter ini bekerja tanpa masalah pada 100 dan 400 kHz. Chip yang dirancang untuk I2C seperti PCA9306 melakukan fungsi yang sama. Pembagi tegangan tidak bisa dipakai pada I2C karena jalurnya membawa data dalam dua arah.

Apakah WS2812B bekerja dengan data 3,3 V ESP32?

Sering kali ya, tetapi tidak dijamin. WS2812B dengan catu daya 5 V memerlukan minimal 3,5 V pada input data, dan 3,3 V berada di bawah ambang itu; LED pertama mungkin berkedip-kedip, terutama jika kabel lebih panjang atau tegangan catu daya naik di atas 5 V. Solusi yang andal adalah memasang buffer seperti 74AHCT125 atau 74HCT125 pada jalur data.

Sebaiknya aku memakai pembagi tegangan atau modul level shifter?

Jika kamu menurunkan sinyal lambat satu arah dari 5 V ke 3,3 V, seperti UART RX atau HC-SR04 ECHO, dua resistor sudah cukup dan merupakan solusi termurah. Jika jalurnya dua arah (I2C) atau kamu perlu menaikkan 3,3 V ke 5 V, pembagi tegangan tidak membantu; gunakan modul BSS138 atau buffer 74HCT. Untuk sinyal yang sangat cepat, chip buffer adalah pilihan yang tepat.

Apa arti HV dan LV pada level shifter?

HV (high voltage) adalah sisi tegangan tinggi yang biasanya terhubung ke 5 V, sedangkan LV (low voltage) adalah sisi tegangan rendah yang terhubung ke 3,3 V. Pin HV1–HV4 terhubung ke sinyal perangkat 5 V, dan pin LV1–LV4 yang berpasangan terhubung ke pin board 3,3 V. GND kedua sisi disatukan pada pin GND modul.

Lihat semua proyek
LED Berkedip dengan ESP32
#103Pemula

LED Berkedip dengan ESP32

Mengajarkan penggunaan output GPIO dasar dengan ESP32. Kita membuat efek berkedip dengan menyalakan dan mematikan LED dari pin digital. Versi ESP32 dari proyek blink klasik di Arduino UNO; perintah blink dasar di lingkungan Arduino sama, tetapi susunan pin ESP32 dan level GPIO 3,3 V-nya berbeda dengan Arduino UNO.

4.7(37)
100
Kendali LED dengan Tombol Tekan ESP32 (Tekan)
#104Pemula

Kendali LED dengan Tombol Tekan ESP32 (Tekan)

LED menyala ketika tombol ditekan dan mati ketika dilepas. Menunjukkan cara memakai pin input digital ESP32 dan resistor pull-up internalnya. Mode INPUT_PULLUP membuat resistor eksternal tidak diperlukan.

4.6(36)
55
Membaca Intensitas Cahaya dengan Modul LDR ESP32
#113Pemula

Membaca Intensitas Cahaya dengan Modul LDR ESP32

Memantau secara real-time di Serial Monitor nilai ADC mentah modul LDR dan persentase cahaya relatif yang dihitung dari nilai acuan gelap dan terang. Persentase ini bukan pengukuran lux. Mengajarkan logika kalibrasi modul. Ideal dikerjakan sebelum Proyek 10, karena dipakai untuk menentukan nilai ambang.

4.6(36)
55
Kedip LED Bawaan Raspberry Pi Pico (Pico dan Pico W)
#147Pemula

Kedip LED Bawaan Raspberry Pi Pico (Pico dan Pico W)

Proyek pembuka seri Raspberry Pi Pico! Kita mengedipkan LED hijau bawaan untuk memastikan board bekerja; percobaan "Hello World" klasik. TANPA komponen eksternal, hanya Pico dan kabel USB. Kodenya ditulis dalam MicroPython (bahasa resmi dari Raspberry Pi Foundation). Pelajari kelas machine.Pin, mode Pin.OUT, metode led.on()/off(), dan time.sleep() di Thonny IDE, dan ikuti setiap perubahan di output Serial (REPL). Juga pas untuk menguji firmware MicroPython.

5.0(1)
10
Layar LCD I2C ESP32 (16x2)
#119Menengah
Premium

Layar LCD I2C ESP32 (16x2)

Di proyek ini, kita menampilkan teks dengan menyambungkan layar LCD karakter 16x2 ke ESP32 lewat protokol I2C. Berkat I2C, kita bisa mengendalikan layar hanya dengan dua pin data (SDA dan SCL), sehingga tidak perlu memboroskan 6+ pin seperti pada sambungan paralel klasik. Kode mencetak pesan tetap di baris pertama dan penghitung yang naik setiap detik di baris kedua. Selain itu, kita menjalankan pemindai I2C di awal untuk mencetak alamat layar ke Serial Monitor (biasanya 0x27).

4.9(23)
40
Sensor Jarak Ultrasonik HC-SR04 ESP32
#116Menengah

Sensor Jarak Ultrasonik HC-SR04 ESP32

Sensor ultrasonik HC-SR04 menghitung jarak dengan mengukur waktu yang dibutuhkan gelombang suara yang dipancarkannya untuk memantul dari benda lalu kembali (Time of Flight). Di proyek ini, kita mengirim pulsa 10 mikrodetik dari ESP32 ke pin TRIG sensor dan membaca durasi pantulan dari pin ECHO dengan pulseIn(). Jarak hasil hitung ditampilkan dalam sentimeter di LCD I2C 16x2. Karena HC-SR04 bekerja di 5V, pembagi tegangan wajib dipasang di pin ECHO.

4.9(28)
46
Kendali Strip NeoPixel WS2812B ESP32
#126Menengah
Premium

Kendali Strip NeoPixel WS2812B ESP32

LED addressable WS2812B (NeoPixel) adalah LED RGB pintar yang bisa dikendalikan secara berantai lewat satu pin data. Di proyek ini, kita mengendalikan strip WS2812B 8 LED dengan library Adafruit_NeoPixel untuk membuat animasi pelangi yang halus. Meskipun level logika 3,3V ESP32 bekerja lancar dengan sebagian besar komponen WS2812B, kita menunjukkan solusi dengan resistor seri 470Ω dan kapasitor 1000µF untuk berjaga-jaga jika tidak stabil. Animasinya dibuat dengan menggeser nilai hue.

4.9(19)
30
Raspberry Pi Pico: Mengendalikan LED Eksternal (Breadboard)
#148Pemula

Raspberry Pi Pico: Mengendalikan LED Eksternal (Breadboard)

Langkah berikutnya setelah LED bawaan Pico: menyambungkan LED eksternal ke breadboard dan mengendalikannya lewat pin GP14. Di proyek ini, kamu belajar memakai pin GPIO serbaguna Pico mana pun sebagai output, polaritas LED (kaki panjang = anoda/+, kaki pendek = katoda/–), dan kenapa resistor pembatas arus (220Ω) diperlukan. Tanpa resistor, arus berlebih mengalir melalui LED dan LED bisa terbakar. Rangkaiannya sangat sederhana: Pico GP14 → resistor 220Ω → LED → GND.

4.5(2)
7