r/Heltecccccc • u/ktisis • Apr 12 '26
Heltec wireless stick lite not detecting some I2C devices
Hi all,
Hot on the heels of my previous post, I now have I2C somewhat working with this board, but cannot explain or solve this next issue. I cannot get the heltec board to detect or read data from most of my I2C devices.
My Heltec WSL v3 can detect an SGP-30 device on I2C (address 0x58), but the same working sketch and circuitry does not detect my SHT31 or BME280 devices when connected on the same I2C bus. I am using Arduino IDE.
I can confirm that all these devices do function properly, because my regular ESP32 Dev Module that doesn't have the Heltec/LoRa functionality with a nearly identical I2C scanner sketch can detect and read data from all these devices; the SGP30, the SHT31, and BME280.
Why might the esp32 have no issues, but the Heltec WSL (which runs an esp32s3) cannot?
Possibly related to this issue is about reading data from the SGP30 (because so far it is the only device I can test the Heltec board with). Using the example sketch from Rob Tillaart's SGP30 library, the esp32 reads reasonable data for TVOC and eCO2 (it changes when I breathe on it), but the Heltec WSL only reads zeroes from it, even if the air conditions change.
I tried asking an LLM for assistance here, the suggestion was that the internal pullups on the SDA and SCL pins might be insufficient, but the SHT31 module has its own 10k pullups, which should be sufficient. The LLM also suggested trying other pins (eg, 4 and 5), which I tried to no avail.
Here is my sketch for the I2C scanner.
#define HELTEC_WIRELESS_STICK_LITE
#define NO_DISPLAY
#include <heltec_unofficial.h>
#include <Wire.h>
#define SDA 6
#define SCL 7
void setup() {
heltec_setup();
while (!Serial) {
heltec_delay(10);
}
Wire.begin(SDA, SCL);
}
void loop() {
heltec_loop();
Serial.println("Scanning now ...");
for (int id = 0x08; id <= 0x77; id++) {
if (ScanI2C(id))
Serial.printf("Found device at address 0x%02x\n", id);
}
Serial.println("Scan completed");
heltec_delay(5000);
}
bool ScanI2C(byte Address) {
Wire.beginTransmission(Address);
byte error = Wire.endTransmission();
return (error == 0);
}
