Refactor bme280, add SPI support (#17314)

Co-authored-by: Franck Nijhof <git@frenck.dev>
This commit is contained in:
Kuzj 2021-07-28 14:18:14 +03:00 committed by GitHub
parent 799bcc523b
commit a7b95eaf04
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -10,11 +10,7 @@ ha_platforms:
- sensor - sensor
--- ---
The `bme280` sensor platform allows you to read temperature, humidity and pressure values of a [Bosch BME280 Environmental sensor](https://cdn-shop.adafruit.com/datasheets/BST-BME280_DS001-10.pdf) connected via [I2c](https://en.wikipedia.org/wiki/I²C) bus (SDA, SCL pins). It allows you to use all the operation modes of the sensor described in its datasheet. The Bosch BME280 integration allows you to read temperature, humidity and pressure values of a [Bosch BME280 Environmental sensor](https://cdn-shop.adafruit.com/datasheets/BST-BME280_DS001-10.pdf) connected via [I2c](https://en.wikipedia.org/wiki/I²C) bus (SDA, SCL pins) or connected via SPI. It allows you to use all the operation modes of the sensor described in its datasheet.
Tested devices:
- [Raspberry Pi](https://www.raspberrypi.org/)
## Configuration ## Configuration
@ -22,8 +18,8 @@ To use your BME280 sensor in your installation, add the following to your `confi
```yaml ```yaml
# Example configuration.yaml entry # Example configuration.yaml entry
sensor: bme280:
- platform: bme280 - name: Ambient
``` ```
{% configuration %} {% configuration %}
@ -82,6 +78,14 @@ monitored_conditions:
required: false required: false
default: All three conditions default: All three conditions
type: list type: list
spi_bus:
description: sensor SPI bus number.
required: false
type: integer
spi_dev:
description: sensor SPI device number.
required: false
type: integer
{% endconfiguration %} {% endconfiguration %}
## Full Examples ## Full Examples
@ -90,9 +94,8 @@ If you want to specify the working mode of the digital sensor or need to change
```yaml ```yaml
# Example of customized configuration.yaml entry # Example of customized configuration.yaml entry
sensor: bme280:
- platform: bme280 - name: Ambient
name: Ambient
i2c_address: 0x77 i2c_address: 0x77
operation_mode: 2 # forced mode operation_mode: 2 # forced mode
time_standby: 5 time_standby: 5
@ -142,6 +145,10 @@ group:
## Directions for installing smbus support on Raspberry Pi ## Directions for installing smbus support on Raspberry Pi
<div class="note">
This section only applies to devices running the Home Assistant Core installation method.
</div>
Enable I2c interface with the Raspberry Pi configuration utility: Enable I2c interface with the Raspberry Pi configuration utility:
```bash ```bash
@ -187,3 +194,81 @@ It will output a table like this:
``` ```
So you can see the sensor address what you are looking for is **0x77** (there are more i2c sensors in that Raspberry Pi). So you can see the sensor address what you are looking for is **0x77** (there are more i2c sensors in that Raspberry Pi).
## SPI Support
Alternatively, this integration can also be used with SPI.
### Config example
```yaml
# Example of customized configuration.yaml entry
bme280:
- name: Stary_Oskol
spi_bus: 0
spi_dev: 1
time_standby: 5
oversampling_temperature: 4
oversampling_pressure: 4
oversampling_humidity: 4
monitored_conditions:
- temperature
- humidity
- pressure
scan_interval: 40
```
## Directions for installing SPI support on Raspberry Pi
<div class="note">
This section only applies to devices running the Home Assistant Core installation method.
</div>
Enable SPI interface with the Raspberry Pi:
```bash
sudo groupadd spi
# Add homeassistant user to the spi group
sudo usermod -a -G spi user
# Add udev rules
sudo echo 'SUBSYSTEM=="spidev", GROUP="spi", MODE="0660"' > /etc/udev/rules.d/77-spi.rules
# apply changes without logout
newgrp spi
sudo udevadm control --reload-rules && udevadm trigger
```
```bash
sudo echo 'dtparam=spi=on' >> /boot/firmware/config.txt
sudo echo 'dtoverlay=spi1-3cs' >> /boot/firmware/config.txt
sudo reboot
```
### Check the spi devices
```bash
ls /dev/spidev*
/dev/spidev0.0 /dev/spidev0.1 /dev/spidev1.0 /dev/spidev1.1 /dev/spidev1.2
```
## Connect sensors
### SPI0 (available on J8/P1 headers on all Raspberry Pi versions)
|SPI Function|Header Pin|Broadcom Pin Name|Broadcom Pin Function|
|------------|----------|-----------------|---------------------|
|MOSI |19 |GPIO10 |SPI0_MOSI
|MISO |21 |GPIO09 |SPI0_MISO
|SCLK |23 |GPIO11 |SPI0_SCLK
|CE0 |24 |GPIO08 |SPI0_CE0_N
|CE1 |26 |GPIO07 |SPI0_CE1_N
### SPI1 (available only on 40-pin J8 header)
|SPI Function|Header Pin|Broadcom Pin Name|Broadcom Pin Function|
|------------|----------|-----------------|---------------------|
|MOSI |38 |GPIO20 |SPI1_MOSI
|MISO |35 |GPIO19 |SPI1_MISO
|SCLK |40 |GPIO21 |SPI1_SCLK
|CE0 |12 |GPIO18 |SPI1_CE0_N
|CE1 |11 |GPIO17 |SPI1_CE1_N
|CE2 |36 |GPIO16 |SPI1_CE2_N