我目前正在研究我的覆盆子PI 3上的气压计传感器。不幸的是,它不是真的工作。我的BMP180传感器接线如下:
VIN -> 3V3 (1)
GND -> GND (9)
SCL -> GPIO3 (5)
SDA -> GPIO2 (3)
电缆和连接都经过了复查并更换了几次,所以这些都不是问题所在。我还在raspi-config中启用了I2C**。如果我输入i2cdetect -y 1
,我会得到类似这样的结果,所以没有检测到连接:
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
如果我让Adafruit的示例/测试代码在连接正确并选中(~/BMP180Code/Adafruit_Python_BMP/examplessimpletest.py)时运行,我会得到如下输出:
Traceback (most recent call last):
File "simpletest.py", line 37, in <module>
sensor = BMP085.BMP085()
File "build/bdist.linux-armv7l/egg/Adafruit_BMP/BMP085.py", line 69, in __init__
File "build/bdist.linux-armv7l/egg/Adafruit_BMP/BMP085.py", line 72, in _load_calibration
File "build/bdist.linux-armv7l/egg/Adafruit_GPIO/I2C.py", line 202, in readS16BE
File "build/bdist.linux-armv7l/egg/Adafruit_GPIO/I2C.py", line 179, in readS16
File "build/bdist.linux-armv7l/egg/Adafruit_GPIO/I2C.py", line 166, in readU16
File "build/bdist.linux-armv7l/egg/Adafruit_PureIO/smbus.py", line 187, in read_word_data
IOError: [Errno 110] Connection timed out
我在网上找了几个解决方案,但都没有用。如果你们中有人能解决这个问题,我会很高兴。谢谢,祝你有愉快的一天,里奥
2条答案
按热度按时间0qx6xfy61#
首先,如果您正在使用带有图形用户界面的Raspberrian,您需要在raspberry:
Pi Start Menu > Preferences > Raspberry Pi Configuration
上启用i2c接口,并在Interface
选项卡中启用I2C。或者,如果您使用的是终端:sudo raspi-config -> Interfacing Options -> I2C
我的第二个建议是再次检查接线。I2C在SDL和SCL引脚上使用开漏连接。据我所知,SparkFun BMP180传感器内置了上拉电阻来保持线路上的电压。检查您的模型是否有上拉电阻。如果没有,你必须在电路中安装一些电阻器。
s3fp2yjn2#
让我想想。我假设您使用的是下面这个过时的python程序。如果不是这样,请告诉我。
(1)Adafruit /Adafruit_Python_BMP Archived (2014)
我发现第27~40行中的以下注解对调试很有用:
(1)旧的RPI(2014)可能使用I2C0而不是I2C1,自动检测功能可能无法识别Rpi3/4并选择错误的数字不是1,而是0或2(Beaglebone可能是2)
(2)python程序是针对BMP085的,但您使用的是BMP180。您可能希望检查任何不兼容的地方,并对配置函数进行必要的修改。
(3)错误消息为
您的“i2cdetec-y 1”显示未检测到I2C设备,这可能意味着
(A)硬件接线不正确(正常,因此您已重新检查接线(开路/短路所有点对点、邻接点等)或*
(B)软件问题,例如(I)配置错误,(Ii)软件库错误。*
无论采用哪种方式,您都可能收到上面的“超时,无法连接”错误消息。
(1)您可能想尝试错误地修改程序中的相关公交号,例如
将默认I2C总线号从2更改为1。
(2)为了确保硬件布线和软件驱动程序等正常,(A)移除未检测到BMP的家伙,(B)换入任何其他I2C家伙并再次使用“i2cdeect-y 1”。如果新人可以快乐地被发现,那么显然老家伙是坏的:
OP使用的AdaFruit BMP180库已折旧,不再受支持。
我建议改用行动组
AdaFruit BMP280/BME280 CircuitPython Library
或
Pimoroni BMP280/BME280 Python Library
。
(1)Adafruit_2014 BMP085/BMP180 Python Library (Depreciated, No Longer Supported)
(2)BMP085 Datashet v2.5- Bosch 2009
(3)BMP180 Datasheet - Bosch 2009
(4)BMP280 Digital Pressure Sensor Datasheet v1.14 Bosch 2015
(5)BME280 Combined Humidity and Pressure Sensor Datasheet v.16 - Bosch 2018sep
(6)What's the difference between the BMP280 and the BME280 atmospheric sensors - 20,565 views 2017mar02
(7)UM10204 I2C-bus specification and user manual (referred in BMP180 Datasheet Section 5, Max clock = 3.4MHz) - 2014 NXP
(8)Adafruit BMP280 I2C or SPI Barometric Pressure & Altitude Sensor - US$10
(9)BMP280 Temperature, Pressure, & Altitude Sensor Python Library - Pimoroni 2019nov08
(10)BMP280 Pip Install - PyPi
附录A-I2C布线和上拉电阻等
(1)您应该使用RPI 40引脚接口中仅有的两个I2C时钟和数据引脚。
(2)两个引脚已经有足够强的1k8上拉。没有必要增加更多的上拉电阻,有太强上拉的风险。
(3)实际上,如果您在同一总线上放置了太多的I2C设备,例如4个以上,而其他设备具有4k7或10k上拉,所产生的上拉可能远远小于1k8,并使I2C引脚电流过载。为了避免RPI I2C引脚过载,我通常会移除设备上拉引脚上的那些引脚。
(4)出于上述(3)原因,移除同一总线上的所有其他I2C设备。
(5)您的硬件I2C连接线不能太长,最好小于30厘米。超过该值可能会导致阻抗过高(对于I2C,400pf是通常的限制)。
附录B-BMP085和BMP180的区别
我浏览了两份数据表,以进行比较和对比。我的快速而肮脏的结论是:(A)BMP180是BMP085的继任者,(B)它们在功能上是相同的,这意味着软件编程应该是“相同的”。
通常业界的做法是,新的硬件版本是向后兼容的,即BMP085程序可以运行在BMP180上,反之亦然。警告:我只是一个友好的业余爱好者。不能保证没有东西不会融化或爆炸!按照业余爱好者的建议行事,后果自负!:)
附录D-针对Rpi3/4修改AdaFruit BMP180程序的建议
主测试程序实际上非常短。
关键的设置问题是I2C总线号。
程序的默认设置为I2C Bus#2。我建议将默认设置更改为I2C Bus#1。
接下来是更新类bmp085。见下一附录E。*
附录E-AdaFruit BMP085库BMP085类使用Eazy Steup-Tony DiCola for Adafruit*
AdaFruit BMP085图书馆的以下通知称,该图书馆已折旧。Adafruit建议:
(A)切换至AdaFruit电路Python感应器库(注1),*
(B)切换到BMP280。*
现在我们有问题了。此旧库使用的AdaFruit EasySetup工具不再受支持,可能与Raspberry PI*不兼容
注1-电路巨蟒不是100%兼容树莓派操作系统Raspbian 10 Buster。
我一直在玩陀螺仪、加速计和磁强计,但从来没有玩过压力计。我也玩过温度和湿度传感器,但从来没有压力传感器,因为我总是认为压力或高度传感器只适用于登山运动员,而不适用于我的爱好家庭自动化。但在研究了OP的问题后,我发现有一个新的传感器,在一个芯片上有三个测量,温度,湿度和压力。我还发现,尽管OP的AdaFruit BMP085甚至BMP180库都被折旧了,但实际上还有另一个新的继任者BMP280和BME280。我还发现,皮莫罗尼似乎已经与拉达·阿达联手,出售了她的BEM280突破板,同时创建了一个库。我希望Pimoroni的Python库不是CiritPython,而是标准的Python。
我正在阅读皮莫罗尼的产品,并写下一些learning notes以备将来参考:
/要继续,请...*
更新2022Sep17 hkt1258*
附录G-Pico W测试BME680*
1.引言*
现在,我正在设置用于测试BME680的RPI Pico W原型板。
2.参考文献*
参考文献*
(1)RPI Pico
(1.1)RPI Pico W数据表-RPI 2022Jun29 https://datasheets.raspberrypi.com/picow/pico-w-datasheet.pdf
(1.2)RPI Pico W引脚示意图https://datasheets.raspberrypi.com/picow/PicoW-A4-Pinout.pdf
(1.3)RPI Pico W原理图-附录B-Pico数据表https://www.etechnophiles.com/wp-content/uploads/2022/07/Pico-W-Schematic.pdf
(1.4)新的Pi Pico W-WiFi功能、规格和引线简化-技术爱好者https://www.etechnophiles.com/raspberry-pi-pico-w-wifi-specs-pinout/
(2)BME680
(2.1)
(3)肖特基二极管基准电压源
我调查了肖特基二极管,发现1N5822很好(在1A时只有0.4V下降)。
Https://forums.raspberrypi.com/viewtopic.php?p=1417588&hilit=schottky+diode+tlfong01#p1417588
1N5408数据表-Vishay https://www.vishay.com/docs/88516/1n5400.pdf
答案结束