BME68x library not working with BME688

Hello,

I recently bought the Pimoroni BME688, I previously had a BME688 on a custom board and was using the Bosch library https://github.com/boschsensortec/Bosch-BME68x-Library with which I could take several gas samples at different temperatures as shown in this example https://github.com/boschsensortec/Bosch-BME68x-Library/blob/master/examples/sequential_mode/sequential_mode.ino

temperatures

But when using the Pimoroni BME688 with that library I get communication failure, however with the Adafruit bme680 library it works, but only lets me take the gas sample with a single temperature value.

Do you know if the Pimoroni BME688 is compatible with the Bosch library or do I have to use the Adafruit BME680 library? It would be quite useful for me to be able to take gas samples with different temperatures.

I have checked all the connections, I have the BME688 communicating via I2C. I also checked that the example comes for SPI and I modified it for I2C.

Thanks in advance.

The Pimoroni BME688 uses an i2c address of 0x76. Is that the address your library is using / looking for? If not you may have to cut the jumper to switch it to 0x77, or edit your library or code accordingly.

Thank you for your reply,
Yes, I checked the I2C address, modified the code for both 0x76 and 0x77 and I still get communication error in both cases.

Ok, that’s all i have at the moment. I have BME68x’s here, I’m using the Pimoroni libraries, Python and Micro Python wise.

The Pimoroni BME688 is nothing special (with one exception) so it should work with any library.

Now to the exception: the BME688 is a 3V3 device, and Pimoroni adds a regulator and some level-shifters to make it work with 5V devices. BTW: Adafruit usually does the same. So it is actually “nothing special”, but it could have an effect on I2C communication.

What you could try is to lower the I2C speed.

I hope you make it work, because I would really be interested in your results. I myself did a lot of testing with the BME688 and I did not find any relevant differences in the measured values using different temperatures.

After a lot of research I found that in the BME68x library there is a PR pending which are examples in I2C for the library.

The only difference with my old code is that in the examples it has in the setup a Wire.begin() when in my code it did not have it.

Including the Wire.begin() in my code I have managed to make the BME688 work with the BME68x library.

I don’t know why before it worked without the Wire.begin() and now it doesn’t, but adding it has started to work.

Thanks to all of you for your help.

In another message I have included the solution that worked for me, thank you for your advice.

Regarding the data collected at different temperatures, in the data I collected a couple of months ago the resistance value at different temperatures, specifically at 3 different temperatures, and the graph was the same for all temperatures only the resistance value varied.

The resistor values drew the same curve but at different heights on the graph, with Y being the resistor value and X the timestamp.

If you want more information don’t hesitate to ask but I think that the most suitable would be in another topic :)

Thanks, I have the same kind of results. Changing the temperature only changes the absolute values of the R-values, but does not change anything regarding the response.

You can check my repo: GitHub - bablokb/pico-bme688-scan: Read BME688 in forced-mode with multiple parameters (Raspberry Pi Pico). The program scans the parameter-space given by CMakeLists.txt.

1 Like

Thanks for the repository!

I am actually testing with the BME680 because with the BME688 the R-values over time end up trending to the same point, however with the BME680 I am getting some more accurate results, but with the BME680 I can only sample at a single temperature.

I tried changing the sample temperature in runtime but the results obtained deviate from the single temperature results.

1 Like