Hello, I recently started working with a couple of Heltec Wireless Sticks. I spent some time trying to connect a few I2C peripherals and sensors to this board, but for the most part, I could not get them to work. I’m using the standard Wire library.
Initially, I was unable to detect the devices using the standard address scan app. However, I discovered that if I connected two peripherals (both placed close together on a proto-board), both would be detected. Both of these devices have pull-up resistors, yet when measuring them, the resistance value for pin 21 (SDA) was always lower than that on pin 22 (SCL), even though the pull-up on the peripheral was the same when measured outside the circuit. My conclusion from this is that by having two I2C devices attached, each with its own pull-up resistor, the resistance would be low enough to allow the Wireless Stick to detect both devices.
However, this does not solve my problem. The only way I could get it to detect the I2C device was with either two peripherals on the bus or by adding a 4.7K resistor myself on the SDA line (pin 21) as a pull-up.
My next test was to check the signal through an oscilloscope, and there I found that the signal on the SDA line does not look healthy. It seems the signal is either too weak or there is too much capacitance. I believe this is why a stronger pull-up helped, as it somewhat improves the signal.
I even tried to lower the clock frequency down to 10KHz, but it did not help much, and the SDA signal continued to appear unreliable, causing my device to work intermittently. I also checked the signal without any of my I2C devices connected, and once again, the SDA signal did not look okay. I tested this on both Wireless Sticks I own, and the results were the same.
In case you are wondering, the signal on SCL looks fine.
My question to the community is: Could I perhaps be missing something obvious? Does the I2C require some particular initialization sequence?
Here is a picture showing what the signal looks like on SDA.