• Hi.

    I'm trying to get a BME280 working using I2C.

    I can't seem to get it to work on my Pixl.js

    Using the hardware I2C like this:

    var BME = require("BME280");
    I2C1.setup({scl:A5,sda:A4});
    var bme = BME.connect(I2C1, { addr: 0x76 });
    console.log(bme.getData());
    

    I'm getting this error

    Uncaught InternalError: I2C Write Error 33281
     atUncaught InternalError: I2C Write Error 33281
     at line 1 col 18
    a.writeTo(c,[d,g])
                   line 1 col 18
    a.writeTo(c,[d,g])
                     ^
    in function "write" called from line 1 col 4   ^
    

    When i try to use software I2C, it kinda works, but only the first measurement and the humidity is wrong.

    var BME = require("BME280");
    var i2c = new I2C();
    i2c.setup({scl:A5,sda:A4});
    var bme = BME.connect(i2c, { addr: 0x76 });
    console.log(bme.getData()); // logs { "temp": 24.00835012295, "pressure": 961.35353842504, "humidity": 84.1865234375 }
    
    setInterval(function() {
      console.log(bme.getData()); // logs { "temp": -143.48718913660, "pressure": 1126.77476317288, "humidity": 0 }
    }, 1000);
    

    Thing is, it does work on my Espruino Pico using this code:

    var BME = require("BME280");
    I2C1.setup({scl:B8,sda:B9});
    var bme = BME.connect(I2C1, { addr: 0x76 });
    console.log(bme.getData());
    

    This logs the correct humidity, works with hardware I2C and continues to work (in a setInterval for example).

    I don't know what to do at this point. Is I2C just broken on (my) pixl.js?

  • Did you try other pins just in case a4,a5 is somehow damaged? unlike stm32 the nrf52 can do hardware I2c on any pins.

  • Interesting, did not know that. But no, other pins also have the same issue. Same behaviour with hardware I2C (error Error 33281) and software I2C (weird readings) using different pins.

  • How long is the cabling? might be worth adding some external pullup resistors in case the internal nrf ones are too strong.

  • I think it might be worth trying to add pullup resistors on the 2 I2C lines and see if that helps?

    If I remember right I think the NRF52 hardware I2C might not enable internal pullups (I think it was something to do with what Nordic's library does), but the software I2C does enabled them so would work.

    ... although the nRF52 pullup resistors are something like 40k where they suggest using 10k on I2C I think, so that might explain the instability you're seeing?

  • Seems like the instability and incorrect values were caused by bad connections. I soldered it, and now it all works without problems..

    Sorry for the ruckus.

  • Post a reply
    • Bold
    • Italics
    • Link
    • Image
    • List
    • Quote
    • code
    • Preview
About

Pixl.js I2C not working correctly? I2C Write Error 33281

Posted by Avatar for user117186 @user117186

Actions