ESP32 - DIP Switch

DIP (Dual In-line Package) switches are commonly used in electronics for configuration purposes, such as setting device addresses, enabling or disabling features, etc. In this tutorial, we are going to learn how to use the DIP switch with ESP32. In detail, we will learn:

DIP (Dual In-line Package) switches are frequently employed in electronics for configuration purposes, such as setting device addresses, activating or deactivating features, and more. In this tutorial, we'll explore the utilization of the DIP switch with ESP32. Specifically, we'll cover the following topics:

ESP32 with DIP Switch

Hardware Used In This Tutorial

1×ESP-WROOM-32 Dev Module
1×USB Cable Type-C
1×DIP Switch
1×Breadboard
1×Jumper Wires
1×(Recommended) ESP32 Screw Terminal Adapter

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Disclosure: some of these links are affiliate links. We may earn a commission on your purchase at no extra cost to you. We appreciate it.

Introduction to DIP Switch

DIP switches serve as a fundamental components for device configuration, enabling users to adjust parameters like device addresses, communication settings, security codes, operation modes, and system preferences across various industries and applications.

A DIP switch comprises multiple small slide switches grouped together, with each switch referred to as a "position". DIP switches come in various types determined by the number of positions they offer. Options include 2-position, 4-position, 5-position, 6-position, 8-position, and 10-position DIP switches...

Each position on a DIP switch corresponds to a bit of a configurable number. By toggling the positions between ON and OFF, users can set the desired numeric value. This flexibility allows for precise configuration of parameters according to specific requirements.

Pinout

DIP Switch Pinout
image source: diyables.io

A DIP switch is composed of dual rows of pins, with the number of pins in each row matching the available switch positions. For instance, a 4-position DIP switch contains a total of 8 pins, evenly distributed with 4 pins on each side. Within the DIP switch structure, every pair of opposing pins forms a slide switch. It's important to note that distinguishing between pins on the two sides isn't required as they are interchangeable.

How It Works

In DIP switches, when a switch is in the ON position, it indicates that the switch is closed, establishing an electrical connection that allows current to flow through it.

Conversely, when a switch is in the OFF position, it means that the switch is open. In this state, the electrical connection is interrupted, preventing current from flowing through the switch.

To clarify:

  • ON position: Forms a closed circuit, enabling current flow.
  • OFF position: Results in an open circuit, blocking current flow.

When connecting one side of the switch to GND and the other to an ESP32 pin, and configuring the ESP32 pin as a pull-up digital input, the following table illustrates the relationship between the switch position and the values read from the ESP32:

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

In the next parts, we will use 4-position DIP switch for example. You can easily to adapt for 2-position DIP switches, 3-position DIP switches, 5-position DIP switches, 6-position DIP switches, 8-position DIP switches, and 10-position DIP switches...

Wiring Diagram

ESP32 DIP switch Wiring Diagram

This image is created using Fritzing. Click to enlarge image

If you're unfamiliar with how to supply power to the ESP32 and other components, you can find guidance in the following tutorial: How to Power ESP32.

ESP32 Code - DIP Switch

We will learn through two pieces of code:

  • Reading the ON/OFF state of individual position on the DIP switch.
  • Encoding the positions into a number.

ESP32 code - Reading the ON/OFF state of the DIP switch

/* * This ESP32 code is created by esp32io.com * * This ESP32 code is released in the public domain * * For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/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); }

Quick Instructions

  • If this is the first time you use ESP32, see how to setup environment for ESP32 on Arduino IDE.
  • Do the wiring as above image.
  • Connect the ESP32 board to your PC via a micro USB cable
  • Open Arduino IDE on your PC.
  • Select the right ESP32 board (e.g. ESP32 Dev Module) and COM port.
  • Do wiring as above wiring diagram
  • Connect ESP32 to PC via USB cable
  • Open Arduino IDE
  • Select the right board and port
  • Click Upload button on Arduino IDE to upload code to ESP32
  • Switch each position on the DIP Switch to ON one by one.
  • See the result on 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  

ESP32 code - Encoding the states of DIP switch into a number

/* * This ESP32 code is created by esp32io.com * * This ESP32 code is released in the public domain * * For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/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); }

Quick Instructions

  • If this is the first time you use ESP32, see how to setup environment for ESP32 on Arduino IDE.
  • Do the wiring as above image.
  • Connect the ESP32 board to your PC via a micro USB cable
  • Open Arduino IDE on your PC.
  • Select the right ESP32 board (e.g. ESP32 Dev Module) and COM port.
  • Upload the above code to ESP32
  • Switch each position on the DIP switch to ON one by one.
  • See the result on Serial Monitor, it look like below.
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  

Please note that the value depends on positions of each slide switches. The below table shows the mapping between ON/OFF position and the integer value for 4-position DIP switch:

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

Making video is a time-consuming work. If the video tutorial is necessary for your learning, please let us know by subscribing to our YouTube channel , If the demand for video is high, we will make the video tutorial.

※ OUR MESSAGES