0

Kit I2C Master with Arduino UNO and LAN option

€24.90
Tax included Shipping excluded
Delivery Time: Delivery time 3-5 working days germany / about 10 days Europe
I2ARL-Bk
4260404260967

I2C master kit with ARDUINO-UNO and optional W5500 LAN on DIN rail

Compact I2C master with an "Arduino UNO" for the DIN rail.

The module can be used to implement a variety of applications with the Arduino IDE or with Platform IO.

For example:

- I2C Modbus-TCP Server
- I2C MQTT Client / I2C-MQTT-Gateway

terminals: fixed terminals

Description:

With the I2C master module you can develop your own programs and use the I2C peripherals.
The Arduino bootloader and a small demo program are pre-installed on the ATMEGA328P.
The program can be customized and installed.

- Freely programmable with Arduino IDE
- Status LED for SDA, SCL and INT
- Jumper to activate the termination
- Blue LED freely programmable. E.g. for the status of the LAN connection
- Slot for WizNET W5500 LAN module
- BUS connector for connecting additional I2C modules
- slot for USB-RS232 programming adapter

Links:

We will publish a few examples in the blog soon.

Modbus TCP server
- Reading the digital inputs and transferring them to a S7-1500 PLC from SIEMENS
- Controlling outputs via Modbus TCP
- Reading and writing analog values

MQTT gateway
- Transferring digital and analog inputs to an MQTT broker
- Receiving MQTT messages and controlling analog or digital outputs

Downloads:

Data Sheet      Shematic Diagram    

Partlist:

5 ceramic capacitor 100 nF
2 ceramic capacitor 27 pF
1 electrolytic capacitor 10yF
1 electrolytic capacitor 100yF
1 Resistor network4x 1,5 kOhm 5 Pins
1 Resistor network4x 4,7 kOhm 5 Pins
1 Resistor 47 kOhm
1 Resistor 1 MOhm
1 ATMEGA328P DIL 28 with socket
1 LS7405 DIL 14 with socket
1 LM117-3,3 SMD
1 quartz 16 MHz
1 LED 3 mm green 2mA
1 LED 3 mm yellow 2mA
1 LED 3 mm red 2mA
1 LED 3 mm blue 2mA
3 socket strip 1x6pol für LAN / USB
3 pin connectors 2-pin + jumper
1 terminal 5 pol fix or plug in
1 PCB lead-free tin with solder mask

I2ARL-Bk

Specific References

EAN13
4260404260967
New

Example I2C-Modbus-TCP Server

In the program example, the input signals of the digital I2C PLC card I2HE and the analog values ??from the I2HAE card are read and sorted into the Modbus input registers.

      digital inputs       Input-Register 0 = 30001 in the PLC
measured value 1        Input-Register 1 = 30002 in the PLC
measured value 2 Input-Register 2 = 30003 in the PLC
measured value 3 Input-Register 3 = 30004 in the PLC
measured value 4 Input-Register 4 = 30005 in the PLC
measured value 5 Input-Register 5 = 30006 in the PLC

The Modbus holding registers are then transferred from the PLC to the digital PLC output card I2HA and the four analog values ??to the analog output card I2HAA

      Holding-Register 0 = 40001 from the PLC      digital outputs
Holding-Register 1 = 40002 from the PLC analog value 1
Holding-Register 2 = 40003 from the PLC analog value2
Holding-Register 3 = 40004 from the PLC analog value3
Holding-Register 4 = 40005 from the PLC analog value 4



hardware structure

Test-Aufbau für I2C-Modbus Demo



Arduino program

/*
 ==============================================
 Test I2C-Modbus TCP Server
 ==============================================
 Board Arduino UNO
 Version 1.0

 Quelle:
 Modbus-Arduino Example (Modbus IP)
 Copyright by André Sarmento Barbosa
 http://github.com/andresarmento/modbus-arduino

 ==============================================
 */

String Version = "V1.0";            // Version

#include <Wire.h>                   // I2C-Lib
#include <avr/wdt.h>                // Watchdog
#include <Modbus.h>                 // ArduinoRS485 library
#include <ModbusIP.h>               // Modbus

//ModbusIP object
ModbusIP mb;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  
byte ip[] =  { 192, 168, 1, 7};  

// Pins definieren
int I2C_SCL  = 19;    // PC5 = I2C-Bus SCL
int I2C_SDA  = 18;    // PC4 = I2C-Bus SDA
int I2C_INT  = 17;    // PC3 = I2C-Bus INT
int LED_BL   =  8;    // PB0 = LED Blau

// I2C-Baugruppen definieren und globale Variablen anlegen
#define I2E1_ADDR  112 >> 1   // I2C-Digital INPUT  Addresse als 7 Bit
int  I2E1_WERT=0;
bool I2E1_OK;
#define I2A1_ADDR   64 >> 1   // I2C-Digital OUTPUT Addresse als 7 Bit
int I2A1_WERT=0;
bool I2A1_OK;
#define I2AE1_ADDR  16 >> 1   // I2C-Analog  INPUT  Addresse als 7 Bit
int I2AE1_WERT[5];
bool I2AE1_OK;
#define I2AA1_ADDR 176 >> 1   // I2C-Analog  OUTPUT Addresse als 7 Bit
int I2AA1_WERT[4];
bool I2AA1_OK;

// Variablen deklarieren
byte ALTWERT;
long ts;

void setup() {

  // Pin-Modes einstellen
  // --------------------
  pinMode(I2C_INT, INPUT);
  pinMode(LED_BL, OUTPUT);

  Serial.begin(9600);                   // Serielle Schnittstelle konfigurieren
  Wire.begin();                         // I2C-Pins definieren
 
  Serial.println("Version " + Version); // Version ausgeben
 
  // setzten aller Bits der Eingabekarte auf 1
  // -----------------------------------------
  Wire.beginTransmission(I2E1_ADDR);   // Start Übertragung zum PCF8574
  Wire.write(0xFF);                      // Alle Bits sind Eingänge
  Wire.endTransmission();                // Ende

  // Blaue LED abschalten
  // --------------------
  digitalWrite(LED_BL, LOW);             // Blaue LED AUS

  // Modbus-TCP Server starten
  // -------------------------
  Serial.println("Modbus TCP Server");
  mb.config(mac, ip);

  // Input-Register anlegen (Server -> SPS)
  mb.addIreg(0);  // Input-Register 0 = 30001 in der SPS
  mb.addIreg(1);  // Input-Register 1 = 30002 in der SPS
  mb.addIreg(2);  // Input-Register 2 = 30003 in der SPS
  mb.addIreg(3);  // Input-Register 3 = 30004 in der SPS
  mb.addIreg(4);  // Input-Register 4 = 30005 in der SPS
  mb.addIreg(5);  // Input-Register 5 = 30006 in der SPS
 
  // Holding Register anlegen (SPS -> Server)
  mb.addHreg(0);  // Holding-Register 0 = 40001 in der SPS
  mb.addHreg(1);  // Holding-Register 1 = 40002 in der SPS
  mb.addHreg(2);  // Holding-Register 2 = 40003 in der SPS
  mb.addHreg(3);  // Holding-Register 3 = 40004 in der SPS
  mb.addHreg(4);  // Holding-Register 4 = 40005 in der SPS
 
}

void loop() {

  //Call once inside loop() - all magic here
  mb.task();  // Modbus-Task

  // Einlesen der Bits von der I2C-INPUT Karte
  // ------------------------------------------
  // 8-Bit von der Eingangkarte lesen
  I2E(I2E1_ADDR, I2E1_WERT, I2E1_OK);         // Ein Byte von der DI-Karte Adresse 112 lesen
  if (I2E1_OK == 0) {
    Serial.print("Keine Antwort vom Slave ");
    Serial.println (I2E1_ADDR);
  }

  // Wert zur SPS
  mb.Ireg(0, I2E1_WERT) ;                     // Input-Register 0 = 30001 in der SPS
 

  // Ausgeben der Bits an die I2C-OUTPUT Karte
  // ------------------------------------------  
  // Wert von der SPS umrangieren
  I2A1_WERT = mb.Hreg(0);                     // Holding-Register 0 = 40001 in der SPS
  // 8-Bit zur Ausgangskarte schicken
  I2A(I2A1_ADDR, I2A1_WERT, I2A1_OK);


  // Analogwerte einlesen und berechnen
  // ----------------------------------
  // Werte von Analogkarte lesen
  I2AE(I2AE1_ADDR, I2AE1_WERT, I2AE1_OK);
  // Werte zur SPS
  mb.Ireg(1, I2AE1_WERT[0]);  // Input-Register 1 = 30002 in der SPS
  mb.Ireg(2, I2AE1_WERT[1]);  // Input-Register 2 = 30003 in der SPS
  mb.Ireg(3, I2AE1_WERT[2]);  // Input-Register 3 = 30004 in der SPS
  mb.Ireg(4, I2AE1_WERT[3]);  // Input-Register 3 = 30005 in der SPS
  mb.Ireg(5, I2AE1_WERT[4]);  // Input-Register 3 = 30006 in der SPS


  // Analogwerte ausgeben
  // --------------------
  // Wert von der SPS
  I2AA1_WERT[0] = mb.Hreg(1);  // Holding-Register 1 = 40002 in der SPS
  I2AA1_WERT[1] = mb.Hreg(2);  // Holding-Register 2 = 40003 in der SPS
  I2AA1_WERT[2] = mb.Hreg(3);  // Holding-Register 3 = 40004 in der SPS
  I2AA1_WERT[3] = mb.Hreg(4);  // Holding-Register 4 = 40005 in der SPS
  // Werte zur Analogkarte schicken
  I2AA(I2AA1_ADDR, I2AA1_WERT, I2AA1_OK);


  // Link-Status auf blaue LED
  // -------------------------
  bool takt_1hz = (millis() / 500) & 1;     // Blinktakt 1 Hz
  auto link = Ethernet.linkStatus();
  switch (link) {
    case Unknown:
      digitalWrite(LED_BL, takt_1hz); break;
    case LinkON:
      digitalWrite(LED_BL, HIGH); break;
    case LinkOFF:
      digitalWrite(LED_BL, LOW); break;
  }



 //alle 5 Sekunden lesen für Test
  if (millis() > ts + 1000) {  
    ts = millis();
   
    // Werte von der SPS
    Serial.print(mb.Hreg(0));    // Holding-Register 0 = 40001 in der SPS
    Serial.print("\t ");
    Serial.print(mb.Hreg(1));    // Holding-Register 1 = 40002 in der SPS
    Serial.print("\t ");
    Serial.print(mb.Hreg(2));    // Holding-Register 2 = 40003 in der SPS
    Serial.print("\t ");
    Serial.print(mb.Hreg(3));    // Holding-Register 3 = 40004 in der SPS
    Serial.print("\t ");
    Serial.print(mb.Hreg(4));    // Holding-Register 4 = 40005 in der SPS
    Serial.println ();
  }
}

// =============================================================================================================
// Globale Funktionen
// =============================================================================================================

// ---------------------------------------
// 8-Bit von digitale Eingangskarte lesen
// ---------------------------------------
void I2E(int I2C_Adresse, int &Wert, bool &Slave_OK) {
  Wire.requestFrom(I2C_Adresse, 1);      // Anfrage an den I2C-Slave
  if (Wire.available()) {
    Wert = 255 - Wire.read();            // Ein Byte vom PCF8574 lesen und in invertierte Eingabe wandlen
    Slave_OK = 1;
  } else {Slave_OK = 0;}
}

// ------------------------------------------
// 8-Bit zur digitale Ausgangskarte schreiben
// ------------------------------------------
void I2A(int I2C_Adresse, int &Wert, bool &Slave_OK) {
  Wire.beginTransmission(I2C_Adresse);                      // Start Übertragung zum PCF8574
  Wire.write(255 - Wert);                                   // Wert schreiben
  byte error = Wire.endTransmission();          
  if (error == 0) { Slave_OK = 1; } else {Slave_OK = 0;}    // Fehlerauswertung
}

// ---------------------------------------
// 5 Analogwerte von der I2HAE-Karte lesen
// ---------------------------------------
void I2AE(int I2C_Adresse, int (&Wert)[5], bool &Slave_OK) {
  int Array[11];                          // Lokales Array zur Speicherung der gelesenen Daten
  Wire.requestFrom(I2C_Adresse, 11);      // Anfrage an den I2C-Slave
  if (Wire.available()) {                 // 11 Bytes von Analogkarte lesen und in das array kopieren
    Slave_OK = 1;
    for(int i=0;i<11;i++){
        int c = Wire.read();
        Array[i]=c;
    }    
    // Werte berechnen. Analogwert = Highbyte * 256 + Lowbyte
    Wert[0] = Array[ 2] * 256 + Array[1];
    Wert[1] = Array[ 4] * 256 + Array[3];
    Wert[2] = Array[ 6] * 256 + Array[5];
    Wert[3] = Array[ 8] * 256 + Array[7];
    Wert[4] = Array[10] * 256 + Array[9];  
  } else {Slave_OK = 0;}
}

// ---------------------------------------
// 4 Analogwerte zur I2HAA-Karte schreiben
// ---------------------------------------
void I2AA(int I2C_Adresse, int (&Wert)[4], bool &Slave_OK) {
  Wire.beginTransmission(I2C_Adresse);        // Start Übertragung zur ANALOG-OUT Karte
  Wire.write(0);                              // Kanal auf 0 setzen
  for(int i=0;i<4;i++){
    byte HBy = Wert[i] / 256;                 // HIGH-Byte berechnen
    Wire.write(Wert[i] - HBy * 256);          // LOW-Byte schreiben
    Wire.write(HBy);                          // HIGH-Byte schreiben
  }  
  byte error = Wire.endTransmission();          
  if (error == 0) { Slave_OK = 1; } else {Slave_OK = 0;}    // Fehlerauswertung
}


You might also like

Mounting frame

I2HR

Mounting frame for DIN rail Set WAGO Mounting base for our I2C rails kits

Price €3.90

Kit I2C digital input...

I2EOK-Bk

Digital I2C input card with optocouplers 8-bit 5-24V for DIN rail The I2C input module can be used to read 8 digital signals from 2.5V to 30V via the I2C bus. The inputs are galvanically isolated with optocouplers

Price €16.90

Kit I2C digital output...

I2AOK-Bk

Digital I2C output card with optocouplers8-bit 5-24V for DIN rail With the I2C output card, 8 digital consumers can be switched.The output driver TBD62783APG switches a positive voltage up to 30V.

Price €16.90
Comments (0)

Kit I2C Master with Arduino...

€24.90
terminals: