Rpi3 BMP180气压计传感器接口问题

u7up0aaq  于 2022-09-19  发布在  Linux
关注(0)|答案(2)|浏览(147)

我目前正在研究我的覆盆子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

我在网上找了几个解决方案,但都没有用。如果你们中有人能解决这个问题,我会很高兴。谢谢,祝你有愉快的一天,里奥

0qx6xfy6

0qx6xfy61#

首先,如果您正在使用带有图形用户界面的Raspberrian,您需要在raspberry:Pi Start Menu > Preferences > Raspberry Pi Configuration上启用i2c接口,并在Interface选项卡中启用I2C。或者,如果您使用的是终端:sudo raspi-config -> Interfacing Options -> I2C

我的第二个建议是再次检查接线。I2C在SDL和SCL引脚上使用开漏连接。据我所知,SparkFun BMP180传感器内置了上拉电阻来保持线路上的电压。检查您的模型是否有上拉电阻。如果没有,你必须在电路中安装一些电阻器。

s3fp2yjn

s3fp2yjn2#

  • 答案*(v0.5上次更新2020feb19gmt1914附录F)

让我想想。我假设您使用的是下面这个过时的python程序。如果不是这样,请告诉我。

(1)Adafruit /Adafruit_Python_BMP Archived (2014)

我发现第27~40行中的以下注解对调试很有用:


# For the Raspberry Pi this means you should hook up to the only exposed I2C bus

# from the main GPIO header and the library will figure out the bus number based

# on the Pi's revision.

# Optionally you can override the bus number:

# sensor = BMP085.BMP085(busnum=2)
  • 评论*

(1)旧的RPI(2014)可能使用I2C0而不是I2C1,自动检测功能可能无法识别Rpi3/4并选择错误的数字不是1,而是0或2(Beaglebone可能是2)

(2)python程序是针对BMP085的,但您使用的是BMP180。您可能希望检查任何不兼容的地方,并对配置函数进行必要的修改。

(3)错误消息为

"File "build/bdist.linux-armv7l/egg/Adafruit_PureIO/smbus.py", line 187, in read_word_data, IOError: [Errno 110] Connection timed out"

您的“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。


# AdaFruit BMP180 Program Author: Tony DiCola

# https://github.com/adafruit/Adafruit_Python_BMP/blob/master/examples/simpletest.py

import Adafruit_BMP.BMP085 as BMP085

# Default constructor will pick a default I2C bus.

# For the Raspberry Pi this means you should hook up to the only exposed I2C bus

# from the main GPIO header and the library will figure out the bus number based

# on the Pi's revision.

sensor = BMP085.BMP085()

# Optionally you can override the bus number:

# sensor = BMP085.BMP085(busnum=2)

print('Temp = {0:0.2f} *C'.format(sensor.read_temperature()))
print('Pressure = {0:0.2f} Pa'.format(sensor.read_pressure()))
print('Altitude = {0:0.2f} m'.format(sensor.read_altitude()))
print('Sealevel Pressure = {0:0.2f} Pa'.format(sensor.read_sealevel_pressure()))
  • 接下来是更新类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。

DEPRECATED LIBRARY Adafruit Python BMP This library has been deprecated!
https://github.com/adafruit/Adafruit_Python_BMP/blob/master/README.md
the bmp085 and bmp180 are no longer made, and are replaced by the bmp280
we are now only using our circuitpython sensor libraries in python
we are leaving the code up for historical/research purposes but archiving the repository.
check out this guide for using the bmp280 with python! https://learn.adafruit.com/adafruit-bmp280-barometric-pressure-plus-temperature-sensor-breakout
Adafruit Python BMP
Python library for accessing the BMP series pressure and temperature sensors like the BMP085/BMP180 on a Raspberry Pi or Beaglebone Black.
Designed specifically to work with the Adafruit BMP085/BMP180 pressure sensors ----> https://www.adafruit.com/products/1603
To install, download the library by clicking the download zip link to the right and unzip the archive somewhere on your Raspberry Pi or Beaglebone Black. Then execute the following command in the directory of the library:~~
sudo python setup.py install
Make sure you have internet access on the device so it can download the required dependencies.
  • 附录F-BME280学习笔记**

我一直在玩陀螺仪、加速计和磁强计,但从来没有玩过压力计。我也玩过温度和湿度传感器,但从来没有压力传感器,因为我总是认为压力或高度传感器只适用于登山运动员,而不适用于我的爱好家庭自动化。但在研究了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

  • /要继续,请...*

答案结束

相关问题