我试图做出回应,但 SMBus 和 i2c 中存在一些陷阱,因此为了将问题分解成更小的部分,我已在缩进的情况下引用了您的原始消息。下面提供了响应。
这个问题一开始是间歇性的。我们正在接收读数并且错误突然发生,对传感器进行了调整(取出并放回)解决了它,但是当我们触摸传感器时,错误再次出现。
我锁定了声明,“触摸传感器”。BME280 是否有可能发生 ESD 放电?因此现在是部分或完全坏了?
您在使用 ESD 安全室吗?或至少 ESD 手镯。您不会注意到小的 ESD 放电,对于小型电子产品,即使低于 1000V 的放电也会立即或随着时间的推移造成损坏。(静电放电的基础知识 - incompliancemag.com)
我遵循了这个 BME280 安装指南,但是当提示输入“i2cdetect -y 1”时,出现了几行但没有显示数字。
I2Cdetect -y 1 将向每个可能的从机 0-127 发送一条 ReadBit 消息。然后监听从地址上的 ACK。该消息非常简单,但可以检测工作的 i2c 从站。正如您所说,没有“线路”,如果 BME280 提供了正确的 3v3+GND,我建议从机要么有响应问题。
作为另一种可能性,您能否重做此步骤 dtparam=i2c_arm=on,i2c_baudrate=400000
(将波特率设置为 10000 /10k。如果这可以解决问题并且您需要更高的带宽,请尝试“50000 /50k”或“100000 /100k”)这只是为了消除从机无法在此高频率上运行的可能性频率。对于原型/测试场景,SMBus 的 400k 波特率很高。非常少量的干扰可能会破坏 SDA 上的数据。
另一种可能性是我在 i2c 和 i2c 上的 SMBus 上学到的很难的灌电流。你的上拉电阻适合有限的灌电流吗?
SMBus 规定最小吸收电流为 100µA,最大吸收电流为350µA,而 I²C 总线为3mA(安培=电压/电阻欧姆)。
现在到软件问题。
从您在 imgur 上提供的图片。文件“newcodes_''''''''''''''.py”第2行,在
您的编译器在您尝试导入 bme280 的位置找不到“bme”。参考/路径问题?这可能是代码调用中其他问题的原因。
我不知道你在用什么软件编写代码,但如果有一个选项可以插入断点并运行调试构建。我建议从那里开始:)