I2C Relay Met Arduino IDE

I order a nice relayboard but there was no ArduinoIDE instruction, just Raspberry Pi e.o. I find out how to use it with Arduino and wanna share it so you can save that time.
Original RaspberryPi example:
wiki.52pi.com/index.php/DockerPi_4_Channel_Relay_SKU:_EP-0099
Nice thing is that you can stack up to 4 boards. So you can use max. 4 x 4 = 16 relay's on one I2C bus.
There are also some cons:
- little terminas, don't fit 1 mm2 wire
-
you cannot change the wiring of the bottom connectors when they are stacked together
But still handy board's.
Wirering





In the pictures you can see the wirering.
The 52Pi needs both 5V (for relay's) en 3.3V ( I2C chip ).
So 5 wires needed:
- GND to GND
- 5 V to 5 V
- 3.3 V to 3.3 V
- SLA to SLA
- SCL to SCL
If you use an Arduino UNO or other 5 V be ware of the max 3,6 V from the I2C controller ! Use resistors or else to lower the 5 V out of the Arduino PIN's !
Simple Code Example:
/* Arduino IDE (ESP) example for I2C relaisboard. * By Laurens Korste <a href="http://www.boktorrobotica.nl" rel="nofollow"> www.boktorrobotica.nl </a> * free to use. */ #include <Wire.h> // for I2C communication void setup() { // this rule not for UNO or boards with dedicated I2C pins Wire.begin(D1, D2); // join i2c bus with SDA=D1 and SCL=D2 for NodeMCU } void loop() { Wire.beginTransmission(0x10);/* begin transmitting to I2C adress 10 ( to change also to 11, 12 or 13 ) */ Wire.write(0x01); /* choice relais 1 ( out of 4 ) on board 10 ( also 0x02, 0x03, 0x04 ) */ Wire.write(0xFF); /* set relais 1 on board 10 to ON. all numbers > 0 will do so */ Wire.endTransmission(); /* stop transmitting */ delay(3000); Wire.beginTransmission(0x10); /* */ Wire.write(0x01); Wire.write(0x00); /* set relais 1 on board 10 to OFF */ Wire.endTransmission(); /* stop transmitting */ delay(3000); }
Downloads
Four Relay Test Code
/* sketch by Laurens Korste for Arduino (ESP / NodeMCU) * But other boards will do also * <a href="http://www.boktorrobotica.nl" rel="nofollow"> www.boktorrobotica.nl </a> * In this skeych al the 4 relay's will be activated en deactivated */ #include <Wire.h> // for I2C communication void setup() { Serial.begin(115200); // begin serial for debug (9600 for UNO) Wire.begin(D1, D2); // join i2c bus with SDA=D1 and SCL=D2 of NodeMCU no need for UNO } void loop() { for (int i=1; i<=4; i++){ Wire.beginTransmission(0x10); // begin with device address Wire.write(i); // choice the relais Wire.write(0xFF); // send the "on" code FF (every count from 01 to FF will do) Wire.endTransmission(); // stop transmitting Serial.write(i); Serial.println(" aan "); delay(1000); Wire.beginTransmission(0x10); // begin with device address Wire.write(i); Wire.write(0x00); // Send the "off" code Wire.endTransmission(); // stop transmitting Serial.write(i); Serial.println(" uit "); delay(1000); } }
Downloads
My Project


I have written a code to operate my 3 shutters.
This can be done with switches but also with the BLYNK app, See image.
- One short press will start moving one shutter ( or stop it when it's moving ).
- One long press and all three shutters open ( or close or stop ).
- Double pressure: the shutters go to the "holes" position.
As can be seen in the picture, I also integrated a temperature and light sensor.
Now everything on a good base PCB and neatly in a box.
Call a Relay With One Command
It is useful if you only need one command to activate or deactivate a relay. Below is a function that can do this (with lowbyte and highbyte).
/* sketch by Laurens Korste for Arduino (ESP / NodeMCU) with I2C relaysboard<br> * But other boards will do also * href="http://www.boktorrobotica.nl ; www.boktorrobotica.nl * https://wiki.52pi.com/index.php/DockerPi_4_Channel_Relay_SKU:_EP-0099 ; www.boktorrobotica.nl * In this sketch the relay will be activated by one call; *// #include <Wire.h> // for I2C communication // Relays declaratie. 4 PCB's Per PCB 4 relays possible. In this sketch only two PCB // PCB and relays are merged so that they can be called with one command const byte PutOn=0xFF; //command to switch on const byte PutOff=0x00; //comand to switch off const word Relay1bord1=0x1001; //you can chance the names by example Relay1 const word Relay2bord1=0x1002; //you can chance the names by example Relay2 const word Relay3bord1=0x1003; //you can chance the names by example Relay3 const word Relay4bord1=0x1004; //you can chance the names by example Relay4 const word Relay1bord2=0x1101; //you can chance the names by example Relay5 const word Relay2bord2=0x1102; //you can chance the names by example Relay6 const word Relay3bord2=0x1103; //you can chance the names by example Relay7 const word Relay4bord2=0x1104; //you can chance the names by example Relay8 const word Relay1bord3=0x1201; //you can chance the names by example Relay9 const word Relay2bord4=0x1302; //you can chance the names by example Relay14 void setup() {<br> Serial.begin(115200); // begin serial for debug (9600 for UNO) Wire.begin(D1, D2); // join i2c bus with SDA=D1 and SCL=D2 of NodeMCU no need for UNO } void loop() { // to switch relay 4 on PCB 2 on RelayActie(Relay4bord2,PutOn); delay(1000); // to switch relay 4 on PCB 2 off RelayActie(Relay4bord2,PutOff); delay(1000); } void RelayActie(word Relay, byte OnOrOff){ Wire.beginTransmission (highByte(Relay)); Wire.write (lowByte(Relay)); Wire.write (OnOrOff); Wire.endTransmission(); }