Цифровой датчик барометрического давления BMP180 I2C
Устройство BMP180 представляет собой цифровой датчик атмосферного давления. Это доступно в небольшом модуле, который обеспечивает доступ к датчику через интерфейс I2C. Это позволяет нам легко подключить его к Raspberry Pi с минимумом проводки.
Мой модуль представляет собой небольшую печатную плату размером 15x13 мм с 5-контактным разъемом. Порядок контактов может отличаться на других модулях, поэтому следите за этикетками, чтобы подключить правильные провода от Pi.
BMP180 производится Bosch, и официальное техническое описание BMP180 включает все технические детали.
Настроить интерфейс I2C
Чтобы использовать этот модуль, вы должны включить интерфейс I2C на Raspberry Pi, поскольку он не включен по умолчанию. Это довольно простой процесс, описанный в моем руководстве «Включение интерфейса I2C на Raspberry Pi».
Подключение оборудования
В таблице ниже показано, как модуль подключается к GPIO-заголовку Raspberyr Pi (P1). См. Схему в моем руководстве по заголовку GPIO.
Плата модуля | Desc | Контакты заголовка GPIO |
---|---|---|
VCC | 3,3 В | P1-01 |
GND | Земля | P1-06 |
SCL | I2C SCL | P1-05 |
SDA | I2C SDA | P1-03 |
3,3 В | - | - |
Вот схема макета. Если вы подключаете четыре контакта модуля напрямую к Pi, вам понадобится только четыре провода типа мама-мама.
На макетной схеме используется пользовательская часть, которую я определил во Fritzing. Доступны и другие модули с другим расположением выводов, поэтому убедитесь, что вы подключаете правильные выводы к Pi, если ваш вывод отличается от показанного в этом руководстве.
Когда устройство подключено и Pi включен, команда «i2cdetect» должна показать устройство с адресом 0x77.
Пример скрипта Python
Вот пример сценария Python для считывания данных о давлении и температуре с датчика:
<Таблица граница ="0" CELLSPACING ="0" CELLPADDING ="0"> #! / usr / bin / python
импорт
smbus
импорт
время
из
ctypes
импорт
c_short
УСТРОЙСТВО
=
0x77
# I2C-адрес устройства по умолчанию
# bus =smbus.SMBus (0) # Rev 1 Pi использует 0
автобус
=
smbus.SMBus (
1
)
# Rev 2 Pi использует 1
def
convertToString (data):
# Простая функция для преобразования двоичных данных в
# строка
возврат
str
((данные [
1
]
+
(
256
*
данные [
0
]))
/
1,2
)
def
getShort (данные, индекс):
# вернуть два байта из данных как 16-битное значение со знаком
возврат
c_short ((data [index] <<
8
)
+
данные [индекс
+
1
]). значение
def
getUshort (данные, индекс):
# вернуть два байта из данных как 16-битное значение без знака
возврат
(данные [индекс] <<
8
)
+
данные [индекс
+
1
]
def
readBmp180Id (addr
=
УСТРОЙСТВО):
# Зарегистрируйте адрес
REG_ID
=
0xD0
(chip_id, chip_version)
=
bus.read_i2c_block_data (addr, REG_ID,
2
)
возврат
(chip_id, chip_version)
def
readBmp180 (addr
=
УСТРОЙСТВО):
# Зарегистрируйте адреса
REG_CALIB
=
0xAA
REG_MEAS
=
0xF4
REG_MSB
=
0xF6
REG_LSB
=
0xF7
# Адрес контрольного регистра
CRV_TEMP
=
0x2E
CRV_PRES
=
0x34
# Настройка передискретизации
НАДПИСЬ
=
3
# 0–3
# Прочитать данные калибровки
# Чтение данных калибровки из EEPROM
cal
=
bus.read_i2c_block_data (addr, REG_CALIB,
22
)
# Преобразование байтовых данных в словарные значения
AC1
=
getShort (cal,
0
)
AC2
=
getShort (cal,
2
)
AC3
=
getShort (cal,
4
)
AC4
=
getUshort (cal,
6
)
AC5
=
getUshort (cal,
8
)
AC6
=
getUshort (cal,
10
)
B1
=
getShort (cal,
12
)
B2
=
getShort (cal,
14
)
МБ
=
getShort (cal,
16
)
MC
=
getShort (cal,
18
)
MD
=
getShort (cal,
20
)
# Считать температуру
bus.write_byte_data (addr, REG_MEAS, CRV_TEMP)
time.sleep (
0,005
)
(msb, lsb)
=
bus.read_i2c_block_data (addr, REG_MSB,
2
)
UT
=
(msb <<
8
)
+
lsb
# Давление при чтении
bus.write_byte_data (addr, REG_MEAS, CRV_PRES
+
(OVERSAMPLE <<
6
))
time.sleep (
0,04
)
(msb, lsb, xsb)
=
bus.read_i2c_block_data (addr, REG_MSB,
3
)
ВВЕРХ
=
((msb <<
16
)
+
(lsb <<
8
)
+
xsb)>> (
8
-
OVERSAMPLE)
# Уточнить температуру
X1
=
((UT
-
AC6)
*
AC5)>>
15
X2
=
(MC <<
11
)
/
(X1
+
MD)
B5
=
X1
+
X2
температура
=
(B5
+
8
)>>
4
# Уточнить давление
B6
=
B5
-
4000
B62
=
B6
*
B6>>
12
X1
=
(B2
*
B62)>>
11
X2
=
AC2
*
B6>>
11
X3
=
X1
+
X2
B3
=
(((AC1
*
4
+
X3) < +
2
)>>
2
X1
=
AC3
*
B6>>
13
X2
=
(B1
*
B62)>>
16
X3
=
((X1
+
X2)
+
2
)>>
2
B4
=
(AC4
*
(X3
+
32768
))>>
15
B7
=
(ВВЕРХ
-
B3)
*
(
50000
>> OVERSAMPLE)
P
=
(B7
*
2
)
/
B4
X1
=
(P>>
8
)
*
(P>>
8
)
X1
=
(X1
*
3038
)>>
16
X2
=
(
-
7357
*
P)>>
16
давление
=
P
+
((X1
+
X2
+
3791
)>>
4
)
возврат
(температура
/
10.0
, давление
/
100.0
)
def
main ():
(chip_id, chip_version)
=
readBmp180Id ()
печать
"Chip ID:"
, chip_id
печать
"Версия:"
, chip_version
печать
(температура, давление)
=
readBmp180 ()
печать
"Температура:"
, температура,
"C"
печать
"Давление:"
, давление,
"mbar"
если
__ name__
=
=
"__ main__"
:
main ()
Рекомендуется загрузить этот скрипт прямо на свой Pi, используя следующую команду:
wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bmp180.py
или воспользуйтесь этой ссылкой в браузере.
Для его запуска вы можете использовать следующую команду:
Подробнее:Цифровой датчик атмосферного давления BMP180 I2C
Производственный процесс
- Infineon:сверхмалый датчик атмосферного давления
- Infineon запускает высокоточный цифровой датчик Turbo MAP
- Основы цифровых магнитных датчиков
- Конструкторский комплект для измерения артериального давления с помощью оптического датчика
- Датчик атмосферного давления обеспечивает повышенную точность
- Регистратор температуры Raspberry Pi
- Цифровой датчик термометра Raspberry Pi 1-Wire (DS18B20)
- Цифровой датчик Холла Raspberry Pi в JAVA
- Цифровой датчик освещенности
- Износостойкий датчик давления из жидкого металла