Raspberry Pi DIP Switch

DIP (Dual In-line Package) switch được ứng dụng rộng rãi trong điện tử cho các tác vụ cấu hình như thiết lập địa chỉ thiết bị, chuyển đổi tính năng, và nhiều ứng dụng khác. Hướng dẫn này nhằm mục đích tìm hiểu sâu về việc sử dụng DIP switch với Raspberry Pi. Cụ thể, chúng ta sẽ tìm hiểu:

Raspberry Pi với dip switch

Linh Kiện Cần Thiết

1×Raspberry Pi 5
1×DIP Switch
1×breadboard
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Raspberry Pi
1×(Khuyến nghị) Raspberry Pi Prototyping Base Plate & Breadboard Kit
1×(Khuyến nghị) HDMI Touch Screen Monitor for Raspberry Pi

Or you can buy the following kits:

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

Về DIP Switch

DIP switch chủ yếu được sử dụng để cấu hình thiết bị, cho phép người dùng thiết lập 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.

DIP switch bao gồm nhiều công tắc trượt nhỏ được đóng gói cùng nhau. Mỗi công tắc trượt được gọi là một "vị trí" (position). DIP switch có nhiều loại khác nhau tùy thuộc vào số lượng vị trí mà chúng có. Ví dụ, có các DIP switch 2-vị trí, 4-vị trí, 5-vị trí, 6-vị trí, 8-vị trí, và 10-vị trí.

DIP switch có thể đại diện cho một số có thể cấu hình được. 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 ON OFF, chúng ta có thể thiết lập số mong muốn.

Sơ Đồ Chân

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

DIP switch được tạo thành từ hai hàng chân, với số lượng 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í bao gồm tổng cộng 8 chân, được chia đề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 nhau đại diện cho một công tắc trượt. Đáng chú ý 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 Thức Hoạt Động

Trong DIP switch, khi một công tắc ở vị trí ON, nó có nghĩa là công tắc được kích hoạt hoặc đóng. Điều này cho thấy rằng một kết nối điện được thiết lập, 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í OFF, nó cho thấy rằng công tắc không được kích hoạt hoặc mở. Ở trạng thái này, kết nối điện bị cắt đứt, và dòng điện không thể chạy qua công tắc.

Để làm rõ:

  • Vị trí ON: Biểu thị mạch đóng, cho phép dòng điện chạy.
  • Vị trí OFF: Biểu thị mạch hở, cản trở dòng điện chạy.

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 chân Raspberry Pi, sau đó cấu hình chân Raspberry Pi như một đầu vào số pull-up, bảng dưới đây minh họa mối quan hệ giữa vị trí công tắc và các giá trị được đọc từ Raspberry Pi:

Vị trí DIP switch Biểu diễn nhị phân Trạng thái mạch Trạng thái chân Raspberry Pi
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ơ Đồ Kết Nối

sơ Đồ kết nối Raspberry Pi dip switch

This image is created using Fritzing. Click to enlarge image

Code Raspberry Pi - DIP Switch

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

  • Đọ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ố.

Code Raspberry Pi - Đọc trạng thái ON/OFF của DIP switch

Các Bước Nhanh

  • Đảm bảo bạn đã cài đặt Raspbian hoặc bất kỳ hệ điều hành tương thích Raspberry Pi nào khác trên Pi của bạn.
  • Đảm bảo Raspberry Pi của bạn được kết nối với cùng mạng cục bộ như PC của bạn.
  • Đảm bảo Raspberry Pi của bạn được kết nối internet nếu bạn cần cài đặt một số thư viện.
  • Nếu đây là lần đầu tiên bạn sử dụng Raspberry Pi, xem Raspberry Pi - Cài Đặt Phần Mềm
  • Kết nối PC của bạn với Raspberry Pi qua SSH sử dụng SSH client tích hợp trên Linux và macOS hoặc PuTTY trên Windows. Xem cách kết nối PC của bạn với Raspberry Pi qua SSH.
  • Đảm bảo bạn đã cài đặt thư viện RPi.GPIO. Nếu chưa, cài đặt nó bằng lệnh sau:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Thực hiện kết nối theo sơ đồ kết nối ở trên
  • Tạo một tệp script Python dip_switch.py và thêm code sau:
# Mã Raspberry Pi này được phát triển bởi newbiely.vn # Mã Raspberry Pi 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/raspberry-pi/raspberry-pi-dip-switch import RPi.GPIO as GPIO import time POSITION_NUM = 4 ON = GPIO.LOW OFF = GPIO.HIGH SWITCH_PINS = [23, 18, 15, 14] # Set up GPIO mode GPIO.setmode(GPIO.BCM) # Set the dip switch pins as inputs with pull-up resistors enabled for pin in SWITCH_PINS: GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: # Read the state of each switch position for i, pin in enumerate(SWITCH_PINS): print("position {}: {}".format(i + 1, "ON" if GPIO.input(pin) == ON else "OFF")) print() # Add a delay to prevent rapid readings time.sleep(0.5) except KeyboardInterrupt: GPIO.cleanup()
  • Lưu tệp và chạy script Python bằng cách thực thi lệnh sau trong terminal:
python3 dip_switch.py
  • Chuyển từng vị trí trên DIP Switch sang ON từng cái một.
  • Xem kết quả trên Terminal.
PuTTY - Raspberry Pi
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

Script chạy trong vòng lặp vô hạn liên tục cho đến khi bạn nhấn Ctrl + C trong terminal.

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

Các Bước Nhanh

  • Tạo một tệp script Python dip_switch_encode.py và thêm code sau:
# Mã Raspberry Pi này được phát triển bởi newbiely.vn # Mã Raspberry Pi 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/raspberry-pi/raspberry-pi-dip-switch import RPi.GPIO as GPIO import time POSITION_NUM = 4 ON = GPIO.LOW OFF = GPIO.HIGH SWITCH_PINS = [23, 18, 15, 14] # Set up GPIO mode GPIO.setmode(GPIO.BCM) # Set the DIP switch pins as inputs with pull-up resistors enabled for pin in SWITCH_PINS: GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: encoded_state = 0 for i, pin in enumerate(SWITCH_PINS): state = GPIO.input(pin) if state == ON: encoded_state |= 1 << (POSITION_NUM - i - 1) print("encoded state: {}".format(encoded_state)) # add a delay to prevent rapid readings time.sleep(0.5) except KeyboardInterrupt: GPIO.cleanup()
  • Lưu tệp và chạy script Python bằng cách thực thi lệnh sau trong terminal:
python3 dip_switch_encode.py
  • 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ó trông như bên dưới.
PuTTY - Raspberry Pi
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

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ị sự á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.