I2C slave

  • Hi, I am having problems in communication between Wemos D1 mini and Wemos XI via I2C.

    Whenever I send I2C packet from D1 to XI, the program on XI gets stucked.

    I'm using this example to test it:

    // Wire Slave Receiver
    // by Nicholas Zambetti <http://www.zambetti.com>
    // Demonstrates use of the Wire library
    // Receives data as an I2C/TWI slave device
    // Refer to the "Wire Master Writer" example for use with this
    // Created 29 March 2006
    // This example code is in the public domain.
    #include <Wire.h>
    void setup()
      Wire.begin(0x7F);                // join i2c bus with address #8
      Wire.onReceive(receiveEvent); // register event
      Serial.begin(9600);           // start serial for output
    void loop()
    // function that executes whenever data is received from master
    // this function is registered as an event, see setup()
    void receiveEvent(int howMany)
      while (1 < Wire.available()) // loop through all but the last
        char c = Wire.read(); // receive byte as a character
        Serial.print(c);         // print the character
      int x = Wire.read();    // receive byte as an integer
      Serial.println(x);         // print the integer

    And get this output:


    I'm having D1, D2 and A4, A5 (+GNDs), connected with pullups 4k7 to 3V3.

    Any thoughts?

    The documentation for XI is shit as it doesn't exists :( No schematics, no API


  • I don't think you should be using Serial.print inside an interrupt.

  • Hi, thanks for the response.

    It's not working even without Serial.

    And on the top it's an "official" example.

    But as you propose I've tried it once more.

    #include <Wire.h>
    volatile uint8_t val;
    void setup()
      pinMode(13, OUTPUT);
      val = 1;
    void loop() {}
    void receiveEvent(int count)
      digitalWrite(13, val);
      val = 1 - val;

    It should blink, but nothing happens :(

    The script I want to run is this one: https://github.com/letscontrolit/ESPEasySlaves/blob/master/MiniProExtender/MiniProExtender.ino

  • @majklovec Do you have pullup resistors on your i2c lines?

Log in to reply

Looks like your connection to WEMOS Forum was lost, please wait while we try to reconnect.