I2C Proof of Concept : 1x Uno Master – 3x Uno Slaves : bidirectionele communicatie tussen I2C devices

23 januari 2023

Communicatie tussen verschillende devices is bij embedded computing een belangrijk onderdeel. Om ervoor te zorgen dat de verschillende onderdelen onderling met elkaar gegevens kunnen uitwisselen zijn er de afgelopen jaren verschillende communicatie-protocollen ontwikkeld. Binnen de embedded computing omgeving zijn belangrijke spelers hierin : UART, I2C, SPI. Binnen de PLC omgevingen zijn dit bijvoorbeeld ProfiBus of ModBus. De I2C bus is serieel, 8-bit, directioneel en heeft een data transfer rate tot 3.4Mbps en kan standaard in de Arduino omgeving opgezet worden de de Wire-library. Naast het uitlezen van I2C sensors en het aansturen van I2C displays kan een Arduino Uno ook als I2C device geprogrammeerd worden.

Voor de opstelling van een Proof of Concept (PoC) heb ik een combinatie van 4 Arduino Uno’s opgezet, één ervan is de I2C Master en 3 fungeren als zogenaamde I2C Slave’s. Binnen het I2C protocol is het mogelijk om 128 devices aan te sturen op een SDA en SLC datalijn. Iedere I2C Slave heeft een eigen ID. Met behulp van de Wire instructieset is het mogelijk om deze master- en slave devices data met elkaar te laten uitwisselen. In mijn opstelling stuurt de Master een getallenreeks uit van 1-6, waarbij de eerste I2C Slave reageert op ‘1’ met het aanzetten van een LED. Op een ‘4’ reageert deze I2C Slave met het uitzetten van de LED. De tweede I2C Slave reageert op ‘2’ en ‘5’ en de derde reageert op ‘3’ en ‘6’.

Op de eerste I2C Slave zit een potmeter aangesloten, waarmee een response terug naar de I2C master geselecteerd kan worden. Afhankelijk van de stand van de potmeter wordt er op verzoek een response teruggekoppeld met daarin één van de waarden: ‘gestart’, ‘gestopt, ‘error’, ‘running’. In de PoC kan data tussen verschillende logische device uitgewisseld worden, terwijl ze afzonderlijk van elkaar eigen taken kunnen uitvoeren. Uiteraard kan de I2C Master vervangen worden door een ESP32 of een Pico W, om zo een directe koppeling naar een web interface te realiseren.

Na de nodige voorstudie blijkt het verbluffend eenvoudig om data-uitwisseling op te zetten tussen logische devices, waarbij de I2C Master de regisseur is van de data tussen de gekoppelde devices. Ook blijkt het eenvoudig mogelijk achter een I2C adres bijvoorbeeld een Uno te plaatsen, waarbij de complete logica en functionaliteit voor de I2C Master buiten beeld blijft.