ESP32 Potentiometer (Biến Trở Xoay)
Hướng dẫn này sẽ chỉ bạn cách sử dụng ESP32 với potentiometer (biến trở xoay). Cụ thể, chúng ta sẽ học:
- Cách hoạt động của potentiometer
- Cách kết nối ESP32 với potentiometer
- Cách lập trình ESP32 để đọc giá trị từ potentiometer
- Cách chuyển đổi giá trị đọc từ potentiometer thành giá trị hữu ích
Linh Kiện Cần Thiết
| 1 | × | mô-đun phát triển ESP-WROOM-32 | ||
| 1 | × | Alternatively, ESP32 Uno-form board | ||
| 1 | × | Alternatively, ESP32 S3 Uno-form board | ||
| 1 | × | USB Cable Type-A to Type-C (for USB-A PC) | ||
| 1 | × | USB Cable Type-C to Type-C (for USB-C PC) | ||
| 1 | × | Chiết áp | ||
| 1 | × | Alternatively, 10k Ohm Trimmer Potentiometer | ||
| 1 | × | Mô-đun chiết áp có núm xoay | ||
| 1 | × | (Thay thế) Potentiometer Kit | ||
| 1 | × | (Thay thế) Potentiometer Module with Knob | ||
| 1 | × | breadboard | ||
| 1 | × | dây jumper | ||
| 1 | × | (Tùy chọn) DC Power Jack | ||
| 1 | × | (Khuyến nghị) Screw Terminal Expansion Board for ESP32 | ||
| 1 | × | (Khuyến nghị) Breakout Expansion Board for ESP32 | ||
| 1 | × | (Khuyến nghị) Power Splitter for ESP32 |
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | ||
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Về Potentiometer
Potentiometer (còn được gọi là cảm biến góc xoay) được sử dụng để thay đổi các cài đặt (ví dụ: âm lượng loa, nhiệt độ phòng, độ sáng đèn...)

Sơ Đồ Chân Potentiometer
Potentiometer thường có 3 chân:
- Chân VCC: kết nối chân này với VCC (5V hoặc 3.3V)
- Chân GND: kết nối chân này với GND (0V)
- Chân Output: xuất điện áp ra chân đầu vào của ESP32.

※ Lưu ý:
Chân GND và chân VCC có thể hoán đổi cho nhau
Cách Hoạt Động Của Potentiometer
Trục của potentiometer có thể được xoay từ 0° (gần nhất với chân GND) đến một góc (gần nhất với chân VCC), được gọi là ANGLE_MAX.
Điện áp ở chân output tỷ lệ thuận với vị trí góc của trục, biến thiên từ 0 đến VCC. Bảng dưới đây thể hiện mối quan hệ giữa góc và điện áp trên chân output:
| Góc | Điện Áp |
|---|---|
| 0° | 0v |
| ANGLE_MAX° | VCC |
| angle° | angle° × VCC / ANGLE_MAX° |
※ Lưu ý:
Giá trị ANGLE_MAX phụ thuộc vào nhà sản xuất.

ESP32 - Potentiometer Xoay
Chân analog input của ESP32 chuyển đổi điện áp (giữa 0v và 3.3V) thành giá trị số nguyên (giữa 0 và 4095), được gọi là giá trị ADC hoặc giá trị analog.
Chúng ta có thể kết nối chân output của potentiometer với chân analog input của ESP32, sau đó đọc giá trị analog từ chân đó.
Giá trị analog từ chân input có thể được chia tỷ lệ thành giá trị khác. Hãy xem các trường hợp sử dụng:
- Chia tỷ lệ giá trị analog thành góc của potentiometer.
- Chia tỷ lệ giá trị analog thành điện áp của potentiometer.
- Chia tỷ lệ giá trị analog thành giá trị cài đặt (ví dụ: âm lượng loa, nhiệt độ phòng, độ sáng đèn...)
Phạm Vi Chia Tỷ Lệ
| TỪ | ĐẾN | |||
|---|---|---|---|---|
| Góc | xoay bởi người dùng | 0° | → | ANGLE_MAX° |
| Điện áp | từ chân của potentiometer | 0V | → | 3.3V |
| Giá trị ADC | đọc bởi ESP32 | 0 | → | 4095 |
| Giá trị cài đặt | chuyển đổi bởi ESP32 | VALUE_MIN | → | VALUE_MAX |
Sơ Đồ Đấu Nối Giữa Potentiometer và ESP32
- Cách kết nối ESP32 và potentiometer sử dụng breadboard

This image is created using Fritzing. Click to enlarge image
Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.
- Cách kết nối ESP32 và potentiometer sử dụng screw terminal block breakout board

Cách Lập Trình Potentiometer
- Đọc giá trị từ chân input, được kết nối với chân output của potentiometer bằng cách sử dụng hàm analogRead().
- Chia tỷ lệ thành góc của potentiometer bằng cách sử dụng hàm map().
- Chia tỷ lệ thành điện áp của potentiometer:
- Chia tỷ lệ thành giá trị điều khiển (ví dụ: âm lượng stereo, độ sáng, tốc độ động cơ DC...)
- Ví dụ, chia tỷ lệ thành độ sáng của LED. Như đã đề cập trong hướng dẫn này, độ sáng của LED có thể được điều khiển bằng giá trị PWM từ 0 (luôn TẮT) đến 255 (luôn BẬT). Do đó, chúng ta có thể ánh xạ giá trị analog thành độ sáng của LED (từ TẮT đến sáng nhất) như sau:
Nếu bạn muốn điều chỉnh độ sáng LED từ ánh sáng ban đêm đến sáng nhất,
※ Lưu ý:
Hàm map() chỉ có thể được sử dụng để chia tỷ lệ giá trị analog thành giá trị kiểu int hoặc long. Nếu giá trị điều khiển là kiểu float, bạn cần sử dụng hàm floatMap() thay vì hàm map().
Hàm floatMap():
Code ESP32
Các Bước Nhanh
- Nếu đây là lần đầu tiên bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
- Sao chép code trên và dán vào Arduino IDE.
- Biên dịch và upload code lên board ESP32 bằng cách nhấp vào nút Upload trên Arduino IDE

- Mở Serial Monitor trên Arduino IDE

- Xoay potentiometer
- Xem kết quả trên Serial Monitor. Nó sẽ trông như thế này:
※ Lưu ý:
Hướng dẫn này sử dụng hàm analogRead() để đọc giá trị từ ADC (Analog-to-Digital Converter) kết nối với potentiometer. ADC của ESP32 phù hợp cho các dự án KHÔNG cần độ chính xác cao. Tuy nhiên, đối với các dự án cần đo lường chính xác, hãy lưu ý:
- ADC của ESP32 không hoàn toàn chính xác và có thể cần hiệu chuẩn để có kết quả chính xác. Mỗi board ESP32 có thể hơi khác nhau, vì vậy bạn cần hiệu chuẩn ADC cho từng board riêng lẻ.
- Hiệu chuẩn có thể khó khăn, đặc biệt đối với người mới bắt đầu, và có thể không luôn cho kết quả chính xác như mong muốn.
Đối với các dự án cần độ chính xác cao, hãy cân nhắc sử dụng ADC ngoài (ví dụ ADS1115) với ESP32 hoặc sử dụng Arduino, có ADC đáng tin cậy hơn. Nếu bạn vẫn muốn hiệu chuẩn ADC của ESP32, hãy tham khảo ESP32 ADC Calibration Driver
Video Tutorial
Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.