ESP8266 Công tắc DIP

Các công tắc DIP (Dual In-line Package) được sử dụng rộng rãi trong điện tử cho nhiều tác vụ cấu hình khác nhau, như địa chỉ thiết bị, cài đặt giao tiếp và mã bảo mật. Hướng dẫn này sẽ đi sâu vào việc sử dụng công tắc DIP với ESP8266. Cụ thể, chúng ta sẽ đề cập tới:

ESP8266 NodeMCU với công tắc dip

Phần cứng cần chuẩn bị

1×ESP8266 NodeMCU ESP-12E
1×Recommended: ESP8266 NodeMCU ESP-12E (Uno-form)
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
1×dây jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP8266
1×(Khuyến nghị) Power Splitter for ESP8266 Type-C

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về công tắc DIP

Công tắc DIP được sử dụng chủ yếu để 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ị, thông số truyền thông, mã bảo mật, chế độ vận hành và các 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 công tắc DIP gồm nhiều công tắc trượt nhỏ được ghép lại với nhau. Mỗi công tắc trượt này được gọi là một vị trí. DIP switch có sẵn ở các loại khác nhau dựa trên số vị trí mà chúng cung cấp. Ví dụ, có các loại DIP switch 2 vị trí, 4 vị trí, 5 vị trí, 6 vị trí, 8 vị trí và 10 vị trí.

Một công tắc DIP có thể đại diện cho một số có thể cấu hình. Mỗi vị trí trên công tắc tương ứng với một bit của số đó. Bằng cách chuyển đổi các vị trí giữa BẬT và TẮT, chúng ta có thể thiết lập số mong muốn.

Bản đồ các chân

bố trí chân dip switch
image source: diyables.io

Một cầu dao DIP được cấu thành từ hai hàng chân, với số chân ở mỗi hàng tương ứng với số vị trí công tắc có sẵn. Ví dụ, một cầu dao DIP 4 vị trí có 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 của cầu dao DIP, mỗi cặp chân đối diện nhau tạo thành một công tắc trượt. Đáng lưu ý là việc phân biệt giữa các chân ở hai bên không bắt buộc vì chúng có thể được sử dụng thay thế cho nhau.

Cách hoạt động

Ở các công tắc DIP, khi một công tắc ở vị trí BẬT, nó cho thấy công tắc đã đóng. Điều này cho thấy kết nối điện được thiết lập và cho phép dòng điện đi qua công tắc.

Ngược lại, khi một công tắc ở vị trí TẮT, điều đó có nghĩa là công tắc đang ở trạng thái mở. Trong trạng thái này, mạch điện bị gián đoạn, và dòng điện không thể đi qua công tắc.

Vậy, để tóm tắt:

  • Vị trí BẬT: Mạch kín, cho phép dòng điện lưu thông.
  • Vị trí TẮT: Mạch hở, ngăn cản dòng điện lưu thông.

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

DIP switch position Binary representation Circuit state ESP8266 pin state
ON 1 CLOSED LOW
OFF 0 OPEN HIGH

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

Sơ đồ đấu dây

sơ đồ nối dây dip switch ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Xem thêm Sơ đồ chân ESP8266Cách cấp nguồn cho ESP8266.

Mã nguồn ESP8266 - Cầu dao DIP

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

  • Đọc trạng thái BẬT/TẮT của từng vị trí trên công tắc DIP.
  • Mã hóa các vị trí thành một số.

Mã ESP8266 - Đọc trạng thái BẬT/TẮT của công tắc DIP

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU 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/esp8266/esp8266-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the ESO8266 pins connected to the dip switch const int SWITCH_PINS[] = { D7, D6, D5, D2 }; 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); }

Hướng dẫn từng bước

Để bắt đầu với ESP8266 trên Arduino IDE, hãy làm theo các bước sau:

  • Xem hướng dẫn ESP8266 - Cài đặt phần mềm nếu đây là lần đầu tiên bạn sử dụng ESP8266.
  • Đi dây các thành phần như được hiển thị trong sơ đồ.
  • Kết nối bo mạch ESP8266 với máy tính của bạn bằng cáp USB.
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn bo mạch ESP8266 phù hợp, ví dụ như NodeMCU 1.0 (ESP-12E Module), và cổng COM tương ứng của nó.
  • Đi dây theo sơ đồ trên.
  • Kết nối ESP8266 với PC bằng cáp USB.
  • Mở Arduino IDE.
  • Chọn đúng bo mạch và cổng COM.
  • Nhấp nút Upload trên Arduino IDE để tải mã lên ESP8266.
  • Bật từng vị trí trên DIP Switch sang ON lần lượ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ã ESP8266 - Mã hóa trạng thái của công tắc DIP thành một số

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU 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/esp8266/esp8266-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the ESO8266 pins connected to the dip switch const int SWITCH_PINS[] = { D7, D6, D5, D2 }; 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); }

Hướng dẫn từng bước

Để bắt đầu với ESP8266 trên Arduino IDE, hãy làm theo các bước sau:

  • Xem hướng dẫn ESP8266 - Cài đặt phần mềm nếu đây là lần đầu tiên bạn sử dụng ESP8266.
  • Nối các thành phần như được hiển thị trong sơ đồ.
  • Kết nối bo mạch ESP8266 với máy tính của bạn bằng cáp USB.
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn bo mạch ESP8266 phù hợp, chẳng hạn như (ví dụ NodeMCU 1.0 (ESP-12E Module)), và cổng COM tương ứng của nó.
  • Tải mã ở trên lên ESP8266.
  • Chuyển từng vị trí trên DIP switch sang chế độ BẬT lần lượt.
  • Xem kết quả trên Serial Monitor, nó trông như dưới đây.
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 từng công tắc trượt. Bảng dưới đây cho thấy sự ánh xạ giữa vị trí BẬT/TẮT và giá trị số cho công tắc DIP 4 vị trí:

Position-1Position-2Position-3Position-4Binary ValueDecimal Value
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.