stats

ESP-I2C-slave

Bij de ontwikkeling van sofware heb je niet altijd alle hardware beschikbaar. Daarom wilde ik de hardware (in mijn geval drukknoppen en leds met meerdere MCP23017's) simuleren via een web-interface.
Een ESP webserver moest dus een I2C bus als slave gaan simuleren...

Een ESP8266 als I2C master is geen probleem; De clock van de master bepaalt immers te timing. Een slave daarentegen moet pollen of interrupt gebruiken. Pollen vereist ook timing, maar hoe blijven master en slave synchroon? Ik besloot het dus via interrupt te proberen...

Met een opgaande SCL interupt (RISING) wordt de SDA data ingeklokt.
Bij SCL hoog bepaalt de SDA interupt (CHANGE) of het een start of stop betreft. Tijdens SCL laag worden de SDA interupts genegeerd.
Het 8e bit van het 1e byte (het I2C adres) bepaalt of de volgende bytes gelezen (read) of geantwoord (write) dienen te worden.

De SCL interrupt functie omvat 18 regels code en de SDA slechts 7.
De binnengeklokte data wordt in een array geschreven.
Hoe deze data verwerkt moet worden (bv. via registers) is aan de gebruiker...

Ben je geintresseerd in deze slave sketch? Stuur me een berichtje en je krijgt alle gewenste informatie!

HOME