Датчик Raspberry Pi не работает - PullRequest
1 голос
/ 18 февраля 2020

Я сейчас работаю над датчиком барометра на моем Raspberry Pi 3. К сожалению, он не работает. Мой датчик BMP180 подключен следующим образом:

VIN -> 3V3 (1)
GND -> GND (9)
SCL -> GPIO3 (5)
SDA -> GPIO2 (3)

Кабели и соединения были дважды проверены и заменены несколько раз , поэтому не проблема . Я также включил I2 C в raspi-config . Если я наберу 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 ]

1 голос
/ 19 февраля 2020

Ответ ( 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 (возможно, 2 для BeagleBone)

(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"

Ваш "i2cdete c -y 1" показывает устройство I2 C не обнаружено, это может означать

(a) Неправильное подключение оборудования (ОК, значит, вы дважды проверили проводку (разомкнут / замкнут все точки в точку, соседние точки и т. д.) c) или

(b) Проблемы с программным обеспечением, такие как (i) Неправильная конфигурация, (ii) Неправильная библиотека программного обеспечения.

В любом случае вы может появиться указанное выше сообщение об ошибке «Тайм-аут, не удается подключиться».


Рекомендации по устранению неполадок

(1) попробуйте с ошибкой изменить соответствующий номер шины в программе, скажем,

изменить значение по умолчанию I2 C номер шины с 2 на 1.

(2) Чтобы убедиться, что аппаратная проводка и программные драйверы и т. д. c в порядке, (a) Удалите парня BMP без обнаружения, (b) поменяйте местами с любым другим парнем I2 C и "i2cdetect - y 1" снова. Если новый парень может быть успешно обнаружен, то очевидно, что старый парень плохой: (* ​​1057 *


Обсуждение и рекомендация

Библиотека AdaFruit BMP180, используемая OP, устарела и больше не поддерживается.

Я бы предложил, чтобы OP переключился на

AdaFruit BMP280 / BME280 Circuit Python Library

или

Pimoroni BMP280 / BME280 Python Библиотека

.


Ссылки

(1) Adafruit_2014 BMP085 / BMP180 Python Библиотека (не рекомендуется, больше не поддерживается)

(2) BMP085 Datashet v2.5- Bosch 2009

(3) BMP180 Лист данных - Bosch 2009

(4) Цифровой датчик давления BMP280 Лист данных v1 .14 ​​Bosch 2015

(5) BME280 Таблица комбинированных датчиков влажности и давления v.16 - Bosch 2018sep

(6) В чем разница между BMP280 и датчики BME280 атмосферный c - 20 565 просмотров 2017mar02

(7) UM10204 Спецификация шины I2 C и руководство пользователя (см. раздел 5 спецификации BMP180, макс. часы = 3,4 МГц) ) - 2014 NXP

(8) Adafruit BMP280 I2 C или SPI Barometri c Датчик давления и высоты - US $ 10

(9) Датчик температуры, давления и высоты BMP280 Python Библиотека - Pimoroni 2019nov08

(10) Установка PIP BMP280 - PyPi


Приложения

Приложение A - I2 C проводка и подтягивающие резисторы et c

(1) Вы должны использовать только два контакта I2 C Clock и Data в разъеме Rpi 40.

(2) Два контакта уже имеют достаточно сильный подъем 1k8. Нет необходимости добавлять больше подтягивающего резистора с риском слишком сильного подтягивания.

(3) На самом деле, если вы кладете слишком много устройств I2 C, скажем, более 4, на та же шина, а другие устройства имеют подтягивания 4к7 или 10к, результирующее подтягивание может быть намного меньше, чем 1к8, и перегрузить ток I2 C. Обычно я удаляю те, которые находятся на устройствах, чтобы не перегружать контакты Rpi I2 C.

(4) Удалите все другие устройства I2 C на той же шине, по причине (3) выше.

(5) Соединительные провода I2 C вашего аппаратного обеспечения НЕ МОГУТ быть слишком длинными, предпочтительно менее 30 см. Дольше, чем это может привести к слишком высокому сопротивлению (для I2 C, 400 пф это обычный предел).


Приложение B - Разница между BMP085 и BMP180

Я просматриваю обе таблицы, чтобы сравнить и сравнить. Мой быстрый и грязный вывод: (а) BMP180 является преемником BMP085, (б) они функционально одинаковы, что означает, что программирование должно быть «одинаковым».

Обычно в промышленности принято, что новая версия оборудования обратно совместима, ie, программа BMP085 может работать для BMP180, но не наоборот. ВНИМАНИЕ: Я просто дружелюбный хобби. Нет гарантии Нет, ничего не растает и не взорвется! Следуйте совету любителя на свой страх и риск! :)


Приложение D - Предложение по изменению программы AdaFruit BMP180 для Rpi3 / 4

Основная тестовая программа на самом деле очень короткая.

Критической проблемой настройки является номер шины I2 C.

Программа по умолчанию I2 C Шина № 2. Я бы предложил изменить значение по умолчанию на I2 c 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 - Тони ДиКола для Adafruit

Следующее уведомление от библиотека AdaFruit BMP085 говорит, что библиотека устарела. AdaFruit рекомендует:

(a) переключиться на AdaFruit Circuit Python библиотека датчиков (Примечание 1),

(b) Перейти на BMP280 .

Теперь у нас проблема. Эта старая библиотека использует инструменты AdaFruit EasySetup, которые больше не поддерживаются и могут быть несовместимы с Raspberry Pi

Примечание 1. Схема Python не на 100% совместима с операционной системой Raspberry Pi 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 AdaFruit BMP085 и даже библиотека BMP180 устарели, на самом деле есть еще один новый преемник BMP280 и BME280. Я также обнаружил, что Пиморони, кажется, объединилась с Ладой Ада, продала ее разделочную доску BEM280 и в то же время создала библиотеку. Я надеюсь, что библиотека Пиморони python НЕ является цепью Python, но является стандартной Python.

Я читаю произведение Пиморони и пишу учебные заметки для дальнейшего использования:

/ для продолжения, ...


Конец ответа

1 голос
/ 18 февраля 2020

Во-первых, если вы используете Raspberrian с GUI, вам нужно включить интерфейс i2 c на Raspberry: Pi Start Menu > Preferences > Raspberry Pi Configuration и на вкладке Interface включить I2 C. Или, если вы используете терминал просто: sudo raspi-config -> Interfacing Options -> I2C

Мое второе предложение - еще раз проверить проводку. I2 C использует соединение с открытым стоком на выводах SDL и SCL. Насколько я знаю, датчики sparkfun BMP180 имеют встроенные подтягивающие резисторы для удержания напряжения на линиях. Проверьте, есть ли у вашей модели подтягивающие резисторы. Если нет, то вы должны включить в цепь несколько резисторов.

...