Lesson 8 Reed Switch

Share for us


A reed switch (as shown below) is also a sensor used to detect a magnetic field. Hall sensors are generally used to measure intelligent vehicle speed and count products on assembly lines, when reed switches are often to detect the existence of magnetic field.

There are two kinds of reed switch in this kit: reed switch and mini reed. They share the same principle.


– 1 * Raspberry Pi

– 1 * Breadboard

– 1 * Network cable (or USB wireless network adapter)

– 1 * Reed switch module

– 1 * Mini reed module

– 1 * Dual-color Common-Cathode LED module

– Several jumper wires

Experimental Principle

A reed switch is a type of line switch component that realizes control by magnetic signals. It induces by a magnet. The “switch” here means dry reed pipe, which is a kind of contact passive electronic switch component with the advantage of simple structure, small size, and convenient control. The shell of a reed switch is commonly a sealed glass pipe in which two iron elastic reed electroplates are equipped and inert gases are filled.

Normally, the two reeds made of special materials in the glass tube are separated. However, when a magnetic substance approaches the glass tube, the two reeds in the glass tube are magnetized to attract each other and get touched due to the magnetic force. As a result, the two reeds close the circuit connected with the nodes.

After the external magnetic force disappears, the two reeds will be separated with each other again because their like poles are placed near which intend to repel them apart, thus breaking the circuit. Therefore, as line switch components function by magnetic signals, they can be used to count stuff, restrict positions and so on. At the same time, it is widely used in a variety of communication devices.

Experimental Procedures

For Reed Switch

Step 1: Build the circuit

Reed switch connection: connect pin DO on Reed switch module to GPIO0 on Raspberry Pi; GND to GND; pin + to 3.3V

                                Raspberry Pi                              Reed Switch

                                   GPIO0 ————————————- DO

                                   3.3V  ————————————— +

                                   GND ————————————— G

Dual-color LED module connection: connect pin S of the dual-color LED module to GPIO1 on Raspberry Pi; GND to GND; pin + to 3.3V

                                Raspberry Pi                           Dual-color LED  

                                   GPIO1 ————————————- S

                                   3.3V  ————————————— +

                                   GND ————————————– –

Step 2: Edit and save the code (see path/Rpi_SensorKit_code/10_magicRing/magicRing.c)

Step 3: Compile

              gcc   magicRing  -lwiringPi

Step 4: Run


Put a magnet close to the reed switch. Then pin DO will output high level, “Detected Magnetic Material” will be displayed on the screen and the dual-color LED will light up.

For Mini Reed

Step 1: Build the circuit

Same connections with Reed switch except pin S of Mini Reed to GPIO0 of Raspberry Pi.

Step 2: Edit and save the code (see path/Rpi_SensorKit_code/10_magicRing/magicRing.c)

Step 3: Compile

              gcc  magicRing.c  -lwiringPi

Step 4: Run


Then you’ll see the similar result to that of the reed switch.


#include <wiringPi.h>
#include <stdio.h>

#define SwitchPin         0
#define LedPin            1

int main(void)
	if(wiringPiSetup() == -1){ //when initialize wiring failed,print messageto screen
		printf("setup wiringPi failed !");
		return 1; 
	pinMode(SwitchPin, INPUT);
	pinMode(LedPin,  OUTPUT);

		if(digitalRead(SwitchPin) == LOW){
			printf("on !\n");
			digitalWrite(LedPin, HIGH);     //led on
			printf("off !\n");
			digitalWrite(LedPin, LOW);		

	return 0;

Python Code

#!/usr/bin/env python
import RPi.GPIO as GPIO

ReedPin = 11
LedPin  = 12

def setup():
	GPIO.setmode(GPIO.BOARD)       # Numbers GPIOs by physical location
	GPIO.setup(LedPin, GPIO.OUT)   # Set LedPin's mode is output
	GPIO.setup(ReedPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
	GPIO.output(LedPin, GPIO.LOW) # Set LedPin high(+3.3V) to off led

def switchLed(channel):
	if GPIO.input(11):
		print "Magnet detected - LED on!"
		print "No magnet detected - LED off!"

def loop():
	GPIO.add_event_detect(ReedPin,GPIO.BOTH, callback=switchLed, bouncetime=20)
	while True:

def destroy():
	GPIO.output(LedPin, GPIO.LOW)     # led off
	GPIO.cleanup()                     # Release resource

if __name__ == '__main__':     # Program start from here
	except KeyboardInterrupt:  # When 'Ctrl+C' is pressed, the child program destroy() will be  executed.