ESP32 DIP Switch

DIP (Dual In-line Package) switch thường được sử dụng trong điện tử cho mục đích cấu hình, như thiết lập địa chỉ thiết bị, bật hoặc tắt các tính năng, v.v. Trong hướng dẫn này, chúng ta sẽ học cách sử dụng DIP switch với ESP32. Cụ thể, chúng ta sẽ tìm hiểu:

DIP (Dual In-line Package) switch thường được sử dụng trong điện tử cho các mục đích cấu hình, như thiết lập địa chỉ thiết bị, kích hoạt hoặc vô hiệu hóa các tính năng, và nhiều hơn nữa. Trong hướng dẫn này, chúng ta sẽ khám phá việc sử dụng DIP switch với ESP32. Cụ thể, chúng ta sẽ đề cập đến các chủ đề sau:

ESP32 with dip switch

Phần Cứng 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×DIP Switch
1×breadboard (bo mạch thí nghiệm)
1×dây jumper (dây nối)
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ề DIP Switch

DIP switch là thành phần cơ bản cho việc cấu hình thiết bị, cho phép người dùng điều chỉnh các thông số như địa chỉ thiết bị, cài đặt giao tiếp, mã bảo mật, chế độ hoạt động và tùy chọn hệ thống trên nhiều ngành công nghiệp và ứng dụng khác nhau.

Một DIP switch bao gồm nhiều công tắc trượt nhỏ được nhóm lại với nhau, với mỗi công tắc được gọi là một "vị trí". DIP switch có nhiều loại khác nhau được xác định theo số vị trí chúng cung cấp. Các tùy chọn bao gồm DIP switch 2 vị trí, 4 vị trí, 5 vị trí, 6 vị trí, 8 vị trí và 10 vị trí...

Mỗi vị trí trên DIP switch tương ứng với một bit của số có thể cấu hình. Bằng cách chuyển các vị trí giữa ON OFF, người dùng có thể thiết lập giá trị số mong muốn. Tính linh hoạt này cho phép cấu hình chính xác các thông số theo yêu cầu cụ thể.

Sơ Đồ Chân

dip switch sơ đồ chân
image source: diyables.io

Một DIP switch bao gồm hai hàng chân, với số chân trong mỗi hàng tương ứng với số vị trí công tắc có sẵn. Ví dụ, một DIP switch 4 vị trí chứa tổng cộng 8 chân, được phân bố đều với 4 chân ở mỗi bên. Trong cấu trúc DIP switch, mỗi cặp chân đối diện tạo thành một công tắc trượt. Điều quan trọng cần lưu ý là không cần phân biệt giữa các chân ở hai bên vì chúng có thể hoán đổi cho nhau.

Cách Hoạt Động

Trong DIP switch, khi một công tắc ở vị trí ON, điều này cho thấy công tắc đang đóng, tạo ra một kết nối điện cho phép dòng điện chạy qua.

Ngược lại, khi một công tắc ở vị trí OFF, có nghĩa là công tắc đang mở. Trong trạng thái này, kết nối điện bị gián đoạn, ngăn không cho dòng điện chạy qua công tắc.

Để làm rõ:

  • Vị trí ON: Tạo thành mạch kín, cho phép dòng điện chạy qua.
  • Vị trí OFF: Tạo thành mạch hở, ngăn chặn dòng điện chạy qua.

Khi kết nối một bên của công tắc với GND và bên kia với chân ESP32, và cấu hình chân ESP32 như là một đầu vào số pull-up, bảng sau minh họa mối quan hệ giữa vị trí công tắc và giá trị đọc từ ESP32:

Vị trí công tắc DIP Biểu diễn nhị phân Trạng thái mạch Trạng thái chân ESP32
ON 1 ĐÓNG LOW
OFF 0 MỞ HIGH

Trong các phần tiếp theo, chúng ta sẽ sử dụng DIP switch 4 vị trí làm ví dụ. Bạn có thể dễ dàng áp dụng cho DIP switch 2 vị trí, 3 vị trí, 5 vị trí, 6 vị trí, 8 vị trí và 10 vị trí...

Sơ Đồ Đấu Nối

ESP32 dip switch sơ đồ đấu dây

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.

Mã ESP32 - DIP Switch

Chúng ta sẽ học thông qua hai đoạn mã:

  • Đọc trạng thái ON/OFF của từng vị trí trên DIP switch.
  • Mã hóa các vị trí thành một số.

Mã ESP32 - Đọc trạng thái ON/OFF của DIP switch

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the pins connected to the dip switch const int SWITCH_PINS[] = { 26, 27, 14, 12 }; void setup() { // initialize serial communication Serial.begin(9600); // set the dip switch pins as inputs with pull-up resistors enabled for (int i = 0; i < POSITION_NUM; i++) pinMode(SWITCH_PINS[i], INPUT_PULLUP); } void loop() { // Read the state of each switch position for (int i = 0; i < POSITION_NUM; i++) { Serial.print("position "); Serial.print(i + 1); Serial.print(": "); int state = digitalRead(SWITCH_PINS[i]); if (state == ON) Serial.println("ON "); else Serial.println("OFF "); } Serial.println(); // add a delay to prevent rapid readings delay(500); }

Các Bước Nhanh

  • Nếu đây là lần đầu bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
  • Thực hiện đấu nối như hình trên.
  • Kết nối bo ESP32 với máy tính của bạn qua cáp micro USB
  • Mở Arduino IDE trên máy tính.
  • Chọn đúng bo ESP32 (ví dụ: ESP32 Dev Module) và cổng COM.
  • Thực hiện đấu nối như sơ đồ trên
  • Kết nối ESP32 với máy tính qua cáp USB
  • Mở Arduino IDE
  • Chọn đúng bo mạch và cổng
  • Nhấp nút Upload trên Arduino IDE để tải mã lên ESP32
  • Chuyển từng vị trí trên DIP Switch sang ON từng cái một.
  • Xem kết quả trên Serial Monitor.
COM6
Send
position 1: OFF position 2: OFF position 3: OFF position 4: OFF position 1: ON position 2: OFF position 3: OFF position 4: OFF position 1: ON position 2: ON position 3: OFF position 4: OFF position 1: ON position 2: ON position 3: ON position 4: OFF position 1: ON position 2: ON position 3: ON position 4: ON
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Mã ESP32 - Mã hóa trạng thái của DIP switch thành một số

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the pins connected to the dip switch const int SWITCH_PINS[] = { 26, 27, 14, 12 }; void setup() { // Initialize serial communication Serial.begin(9600); // Set the DIP switch pins as inputs with pull-up resistors enabled for (int i = 0; i < POSITION_NUM; i++) pinMode(SWITCH_PINS[i], INPUT_PULLUP); } void loop() { int encoded_state = 0; for (int i = 0; i < POSITION_NUM; i++) { int state = digitalRead(SWITCH_PINS[i]); if (state == ON) encoded_state |= 1 << (POSITION_NUM - i - 1); } Serial.print("encoded state: "); Serial.println(encoded_state); // add a delay to prevent rapid readings delay(500); }

Các Bước Nhanh

  • Nếu đây là lần đầu bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
  • Thực hiện đấu nối như hình trên.
  • Kết nối bo ESP32 với máy tính của bạn qua cáp micro USB
  • Mở Arduino IDE trên máy tính.
  • Chọn đúng bo ESP32 (ví dụ: ESP32 Dev Module) và cổng COM.
  • Tải mã trên lên ESP32
  • Chuyển từng vị trí trên DIP switch sang ON từng cái một.
  • Xem kết quả trên Serial Monitor, nó sẽ trông như bên dưới.
COM6
Send
encoded state: 0 encoded state: 1 encoded state: 2 encoded state: 3 encoded state: 4 encoded state: 5 encoded state: 6 encoded state: 7 encoded state: 8 encoded state: 9 encoded state: 10 encoded state: 11 encoded state: 12 encoded state: 13 encoded state: 14 encoded state: 15
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Xin lưu ý rằng giá trị phụ thuộc vào vị trí của mỗi công tắc trượt. Bảng dưới đây hiển thị ánh xạ giữa vị trí ON/OFF và giá trị số nguyên cho DIP switch 4 vị trí:

Vị trí-1Vị trí-2Vị trí-3Vị trí-4Giá trị nhị phânGiá trị thập phân
OFF OFF OFF OFF 0000 0
OFF OFF OFF ON 0001 1
OFF OFF ON OFF 0010 2
OFF OFF ON ON 0011 3
OFF ON OFF OFF 0100 4
OFF ON OFF ON 0101 5
OFF ON ON OFF 0110 6
OFF ON ON ON 0111 7
ON OFF OFF OFF 1000 8
ON OFF OFF ON 1001 9
ON OFF ON OFF 1010 10
ON OFF ON ON 1011 11
ON ON OFF OFF 1100 12
ON ON OFF ON 1101 13
ON ON ON OFF 1110 14
ON ON ON ON 1111 15

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.