I2C Module Problems with Grove Beginner Kit for Arduino

I have a problem with the „Grove Beginner Kit for Arduino“.

The assembled board works fine, but after I broke out the modules, I figured out problems with the 3-Axis Accelerator and the OLED Display I2C Modules.

I have one original pre-assembled board and two disassembled boards, so I can compare the function.

All sketches work well on the pre-assemble board, but not with the disassembled parts.

The Problems:

  1. 3-Axis Accelerator

I don’t get the 3-Axis Accelerator (LIS3DHTR) to work at all after I broke out the modules. (Both two disassembled modules, so I don’t think I destroyed the boards…)

I always get the error message “LIS3DHTR didn’t connect.” from the sketch.

I also figured out that there are two versions of the LIS3DHTR Library. One with

LIS3DHTR LIS(I2C_MODE);

initialisation and on with

LIS3DHTR LIS;

But this is not the problem. With both libs, it works on the assembled board and not with the single modules.

  1. OLED Display

The original sketch use HW I2C to init the modul

U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R2, /* reset=*/U8X8_PIN_NONE);

This did not work with the single module. The single module works only with SW I2C like

U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=/ SCL, / data=/ SDA, / reset=*/ U8X8_PIN_NONE)

(The software I2C works on the pre-assembled board as well)

But now to the strange part. When I connect all I2C Bords (Accelerator, Barometer and the Display) I can use the HW I2C for the Display.

I use a Arduino Uno with Grove Shield (this has 3 I2C Ports), and uploaded the simple “Hello World” sketch for the Display with HW I2C.

When I only connect the Display, this doesn’t work, and the Display keeps black. But when I also connect the other I2C modules (without modifying the sketch) the Display works.

Has anyone an idea on one or both problems? Thanks!

I could analyse the 3-Axis Accelerator (LIS3DHTR) problem. The Module is also connected to 3.3V on the assembled board. I connect 3.3V to the stamp hole and the module works also when disassembled. Unfortunately, this look like a hardware bug…

See the picture for details.

1 Like

Hi @Jens

How did you connect the modules when testing the 3-axis by its own? Can you also provide a pic for me to re-create the situations

1 Like

For the OLED, it seems more like a software problem. The constructor F and 1 means refer to Full buffer and page buffer mode respectively, so slightly different. I recommend to read the official u8g2 wiki manual: https://github.com/olikraus/u8g2/wiki/setup_tutorial

Hi @ansonhe97,

I fixed the module. I looked at the schematic view of the single LIS3DHTR Module in the wiki and compared it to the module on the Beginner Kit. It looks like the red part is powered by the lotus Board and the blue part is powered by the voltage regulator of the board itself (each with 3.3V), but they are not connected. So the red part with the VCC of the Chip is not powered when connecting only the grove pins.
3Axis-Bug_2

This is my solution and now it works:

Why the board is designed with an external 3.3V connect?

1 Like

Back to the OLED Problem.

Mayby it has also something to do with the 3-Axis module.

HW I2C for the OLED works ony when the 3-Axis module is also connected.

I used the following sketch to proof it:

#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h> 
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif


// works only whenn the 3-Axis Module is also connected. If the 3-Axis Modul is not connected the Display keeps black
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE); 

// SW I2C works allways 
//U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);

void setup(void) {
  u8g2.begin();
}

void loop(void) {
  u8g2.clearBuffer();                   // clear the internal memory
  u8g2.setFont(u8g2_font_ncenB08_tr);   // choose a suitable font
  u8g2.drawStr(0,10,"Hello World!");    // write something to the internal memory
  u8g2.sendBuffer();                    // transfer internal memory to the display
  delay(1000);  
}

The Setup

This thread warms my heart! So nice to see this level of collaboration! :heart_eyes::star_struck:

I was confused by this b/c I didn’t believe that the Grove kit would be outputting 3v3 on any PCB trace since all the grove connections from the Lotus board when you break it out is 5V and all the grove sensors seem to have a 3v3 regulator and logic level shifters if needed. So I had to confirm for myself and made a image from the PCB viewer to help clarify anyone who was confused by this weird 3v3 rail that shouldn’t really be needed. Thanks everyone!

Did some more digging - if you zoom in on the PCB viewer, there are even two different labels for the two 3v3 rails (3V3 from lotus, L_3V3 from reg)!?

I’m having this exact problem.
I removed the accelerometer module (only) and now none of the I2C modules work (OLED display, Barometer, accelerometer.

Is there an official fix from Seeed Studio for this?

I’m about to start teaching several classes using this kit and many students have purchased the kit on my advice. Help!

  • Wayne Seltzer, Boulder, Colorado, USA

I soldered the 3.3 v connection as in your diagram.
Now this i2c scanner sketch finds the accelerometer board.

However, the “Sensing Movement” sketch outputs:
x:-0.20 y:0.10 z:1.00
LIS3DHTR didn’t connect.

Is this sketch working for you?
(It worked before I removed the accelerometer module from the board.)

Can’t get the Air Pressure Sensor(BMP280) sketch to work after removing the accelerometer module.
Hangs on “bmp280.init().”
Wondering if Seeed Studio actually tested this product by removing the modules?

Perhaps there is some sort of problem with I2C termination resistors when the module(s) are removed from the board?

Thanks,
Wayne

@Baozhu: What is Seeed Studio doing to resolve this problem?

We have fixed this problem in the latest production hardware. @Wayne_Seltzer

“We have fixed this problem in the latest production hardware.”
Good to know.
Is there a way to quickly determine which board has the problem?
None of my 3 boards has any rev. number that I can find?
How do people who have the boards with the problem obtain a replacement?
I have students in several classes who have purchased this product and I’d like to be sure they
can be completely successful with their projects.

Thanks,
Wayne

Hi @Wayne_Seltzer
Please refer to the below picture, it is very easy to distinguish it.
The old version has a cable connected from the lotus to the air pressure sensor, but the new version does not.
Please contact [email protected] for replacement.

I have 3 Grove Beginner Kit for Arduino Boards. 2 are “old”, and one is “new”, as shown in the photos that jiachenglu has shared.

I removed the “3-axis Acceleration” module from the new board, as I previously did with an old board.
When I run the Lesson 7: Displaying Data on OLED code, the OLED does not display.
When I connect the “3-axis Acceleration” module with a Grove cable to the top II2 port, the OLED works.
When I run the “Lesson 10: Sensing Movement” (Grove-Beginner-Kit-For-Arduino/#lesson-10-sensing-movement), code, I see a few x-y-z values display, then "LIS3DHTR didn’t connect:

x:0.60  y:0.50  z:0.55
x:0.70  y:0.50  z:0.55
x:0.65  y:0.50  z:0.55
LIS3DHTR didn't connect.

I’m sorry to say that the new board does not solve the problem.
Questions:

  1. Why is it necessary to connect the “3-axis Acceleration” module to get the OLED to work? Perhaps something to do with termination resistors for the I2C (IIC) bus? If so, need to provide a way to terminate the I2C bus without connecting the “3-axis Acceleration” module for projects that do not need to use that module.

  2. Why is the “3-axis Acceleration” module failing when connected via the Grove I2C cable?

  3. Can someone at Seeed Studio repeat my tests to verify or deny my results?

Thanks,
Wayne

Hi @Wayne_Seltzer
Thanks for your feedback on this problem to us, I will repeat your tests tomorrow.

More test results.
The sketch in Lesson 9: Measuring Surrounding Air Pressure does not work when the “3-axis Acceleration” module is removed from the board. And, it doesn’t work when connected via IIC/I2C/Grove connector, either. Same problem on the old and new boards.
(The sketch works on an old board with none of modules removed.)
Just get:
bmp280 init:
which implies that the call to bmp280.getTemperature() is hanging.

Here is a capture of the SCL line on the old board, no modules removed, sketch running correctly:
image

Here is a capture of the SCL on the new board, with the “3-axis Acceleration” module removed,sketch is failing:
image

Similar test for I2C SDA signal for the “3-axis Acceleration” module running the sketch from “Lesson 10: Sensing Movement”

New board with “3-axis Acceleration” module removed and connected with I2C/IIC/Grove cable.
Fails with “LIS3DHTR didn’t connect.” Note that the SDA signal isn’t transitioning completely to LOW.
image

Old board with “3-axis Acceleration” module in place, not removed. Works correctly:
image