

The 8 Way Channel Expansion Relay Module by Songle (Part ID: RELAY) is a versatile and reliable relay module designed for controlling high-power devices using low-power control signals. This module features 8 independent relays, each capable of switching AC or DC loads, making it ideal for home automation, industrial control, and IoT applications. The module is equipped with optocoupler isolation for enhanced safety and noise immunity, and it supports I2C communication for easy integration with microcontrollers like Arduino, Raspberry Pi, and other development boards.








| Parameter | Specification |
|---|---|
| Manufacturer | Songle |
| Part ID | RELAY |
| Operating Voltage | 5V DC |
| Relay Channels | 8 |
| Communication Interface | I2C (IIC) |
| Control Signal Voltage | 3.3V or 5V (logic level compatible) |
| Maximum Load (AC) | 250V AC @ 10A |
| Maximum Load (DC) | 30V DC @ 10A |
| Isolation | Optocoupler isolation |
| Dimensions | 135mm x 55mm x 20mm |
| Mounting | Screw holes for secure installation |
| Pin Name | Description |
|---|---|
| VCC | 5V DC power supply input for the module. |
| GND | Ground connection. |
| SDA | I2C data line for communication with the microcontroller. |
| SCL | I2C clock line for communication with the microcontroller. |
Each relay channel has three terminals:
| Terminal Name | Description |
|---|---|
| NO (Normally Open) | The relay is open (disconnected) when inactive. Closes when activated. |
| COM (Common) | Common terminal for the relay. |
| NC (Normally Closed) | The relay is closed (connected) when inactive. Opens when activated. |
Below is an example code snippet to control the relay module using an Arduino UNO:
#include <Wire.h> // Include the Wire library for I2C communication
#define RELAY_MODULE_ADDRESS 0x20 // Default I2C address of the relay module
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Initialize serial communication for debugging
// Set all relays to OFF initially
Wire.beginTransmission(RELAY_MODULE_ADDRESS);
Wire.write(0x00); // Send command to turn off all relays
Wire.endTransmission();
Serial.println("Relay module initialized. All relays are OFF.");
}
void loop() {
// Example: Turn ON relay 1
Wire.beginTransmission(RELAY_MODULE_ADDRESS);
Wire.write(0x01); // Command to turn ON relay 1
Wire.endTransmission();
Serial.println("Relay 1 is ON.");
delay(2000); // Wait for 2 seconds
// Example: Turn OFF relay 1
Wire.beginTransmission(RELAY_MODULE_ADDRESS);
Wire.write(0x00); // Command to turn OFF relay 1
Wire.endTransmission();
Serial.println("Relay 1 is OFF.");
delay(2000); // Wait for 2 seconds
}
0x20 with the actual I2C address of your module if it differs.Wire.write() commands to control other relays (e.g., 0x02 for relay 2, 0x04 for relay 3, etc.).Relays Not Activating:
High Voltage Load Not Switching:
I2C Communication Errors:
Module Overheating:
Q: Can this module be used with a 3.3V microcontroller?
A: Yes, the module is compatible with 3.3V logic levels for I2C communication, but the power supply must still be 5V.
Q: How do I change the I2C address of the module?
A: Refer to the module's datasheet or user manual for instructions on changing the I2C address, typically done via solder jumpers or DIP switches.
Q: Can I control all 8 relays simultaneously?
A: Yes, you can send a single I2C command to control all 8 relays at once. Refer to the module's command set for details.
Q: Is optocoupler isolation necessary?
A: Optocoupler isolation enhances safety and prevents electrical noise from affecting the microcontroller, especially in high-voltage applications.