我的问题是通过IC连接时无法从传感器读取任何内容,但是直接将传感器连接到ESP32却可以。我发现这段代码中的endTransmission()返回2,但直接连接时返回0。
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的问题。 Google推出了“ ESP32 I2C”,它提供了很多信息,可能会有所帮助。
评论
是的,我有这样做的理由。我选择74F244是因为我想与i2c传感器一起使用1-wire传感器。我知道1线制传感器无法在相同传感器类型,相同制造商中更改地址,因此我选择了74F244。但是我发现的问题发生在i2c传感器上。 PS。对于74F244,我通过每个传感器使用2个逻辑门来调节电路,假定它可以用作双向缓冲器。
– 3ORZ
18年5月18日在10:37
但问题是,即使使用74F244,ESP32仍然需要发信号通知地址,并且BH1750板只有两个地址可供选择。如果您有一个可以切换的缓冲芯片阵列,则可以仅使用这两个地址为许多BH1750板构建某种传感器的逻辑树...但这似乎需要大量工作。如果您只是想获取多个发光读数,则可能更容易将光敏电阻挂接到模拟端口,并让ESP32计算读数。
– JD艾伦
18年5月18日在15:11