Bosch BME280을 RasPi에 연결할 때 설정

4038 단어 BME280파이썬I2C

소개



아저씨는 이전에 BME280을 ESP32와 RasPi에 연결하여 클라우드에 데이터를 업로드했습니다. 이번에, 새롭게 센서를 구입해, 클라우드도 쇄신해 만들려고 했습니다만, humidity 가 0이라고 읽을 수 없고, 고민에 고민했습니다. 그 결과, 구입한 것이 BMP280에서 humidity를 출력하지 않는, 비슷하지 않은 것이었다, 라는 떨어졌습니다. (슬픈)

구입한 것은 훨씬 옛날인데, 「싸기 때문에 5개 정리 사」를 하고 있었습니다. 어쩌면 아마존에서 BME280이라고 쓰여 있었던 것이라고 의심하고 있습니다. (← 스스로 확인해 볼까...)

모처럼이므로, 여러가지 재검토했을 때의 내용을 메모해 둡니다.

Raspberry Pi의 I2C 설정



배선 확인



I2C에서 사용하기 때문에, 이런 느낌.



I2C 설정 확인



raspi-config에서 I2C를 활성화하고 i2ctools를 설치합니다.
$ lsmod | grep i2c
i2c_bcm2835            16384  1
i2c_dev                16384  2
$ 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: -- -- -- -- -- -- 76 --
$ cat  /etc/modules | grep i2c
i2c-dev
$ cat /boot/config.txt | grep i2c
dtparam=i2c_arm=on

I2C의 baudrate가 dmesg에서 볼 수있는 것 같지만, 아저씨는 할 수 없었다.

I2C의 baudrate를 바꿀 수 있기 때문에 바꾸어 보았다. 이 기사 를 참고로.
dtparam=i2c_baudrate=50000
를 마지막 행에 추가했습니다. 50k라고 할까.

배선



처음에는 아래의 기사를 읽고 pull-up 저항이 필요할지도 생각했습니다. RasPi는
내장되어 들었기 때문에 아무것도하지 않습니다.

아저씨는 오실로 사용할 수 없기 때문에.

BME280과 BMP280의 구별



humidity 를 읽을 수 없기 때문에 알 수 있다는 것은 뒷부분의 지식.
ID의 register를 읽으면 분명합니다. 다음은 사양서.


0x0D를 읽어 본다.
from smbus2 import SMBus
bus_number  = 1
bus = SMBus(bus_number)
i2c_address = 0x76
bus.write_byte_data(i2c_address, 0xE0, 0xB6)
print("chip ID: ", hex(bus.read_byte_data(i2c_address, 0xD0)) )

슬프게도 내 곳에서 수행 한 결과는
chip ID:  0x58

이었다.

초기화 처리



초기화로 수행하는 것은
  • 측정 사이클 및 오버 샘플링 설정
  • 구성 매개 변수를로드합니다.

    측정 사이클 및 Oversampling 설정


  • ODR(output data rate)은 측정 시간과 대기 시간으로부터 계산할 수 있다. 예를 들면
    normal mode라면 1000 [ms]/(11.5 + 62.5) [ms] = 13.51 [Hz]

  • 기타 특성 값


  • IIR filter의 시정수, 소비 전류는 ODR로부터 계산할 수 있다.

  • config 매개 변수 로드



    0x88에서 0xE7까지 읽습니다. 여기 근처는 많은 구현 예가 굴러 있기 때문에 생략.

    소스 코드



    파이썬에서 이런 것도 있었다.

    요약



    BME280 (Bosch)라고 생각하고 humidity를 읽으려고 했지만, 실은 BMP280에서 읽을 수 없었다. 확인하려면 레지스터 값으로 chip ID를 확인하면됩니다.

    (2021/07/25)

    좋은 웹페이지 즐겨찾기