如何通过线路缓冲 IC (ESP32) 将字节写入 BH1750?

物联网 阿杜伊诺 ESP32
2021-06-17 05:32:38

我想通过线缓冲器 IC (74F244) 切换从多个传感器读取的数据。我的问题是当我通过 IC 连接时我无法从传感器读取任何内容,但是当传感器直接连接到 ESP32 时可以。我发现endTransmission()在此代码中返回 2 但直接连接时返回 0。

如何通过线路缓冲 IC 使用 endTransmission?

void setBH1750Mode( byte i2c_addr, byte mode ) {
  Wire.beginTransmission( i2c_addr );
  Wire.write( mode );
  Wire.endTransmission();
  delay(200); // delay for 200 msec
}
1个回答

I2C 是一种“总线”,就像双向一样。您在其地址处向设备发出信号,表示您希望从中获取一些数据,然后将其发回。现在我不是电气工程师毕业生,但 74F244 芯片看起来像一个单向缓冲器。你有“输入”和“输出”线,从数据表(链接(pdf)),它看起来不是双向的。

你到底想做什么?一个普通的 I2C 总线应该能够容纳多个设备,只要它们的从地址都不同。ESP32 内置了 SDA/SCL 引脚,因此您应该能够直接连接所有设备而无需使用缓冲芯片……除非由于某些原因您没有提到这不起作用: )

有很多关于 I2C 如何在其他 Stack Exchange 站点上工作的信息,比如这个提到 BH1750 的问题。谷歌搜索“ESP32 I2C”,它提供了一堆可能有帮助的信息。