Bosch BME280을 RasPi에 연결할 때 설정
소개
아저씨는 이전에 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
이었다.
초기화 처리
초기화로 수행하는 것은
배선 확인
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
이었다.
초기화 처리
초기화로 수행하는 것은
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 설정
normal mode라면 1000 [ms]/(11.5 + 62.5) [ms] = 13.51 [Hz]
기타 특성 값
config 매개 변수 로드
0x88에서 0xE7까지 읽습니다. 여기 근처는 많은 구현 예가 굴러 있기 때문에 생략.
소스 코드
파이썬에서 이런 것도 있었다.
요약
BME280 (Bosch)라고 생각하고 humidity를 읽으려고 했지만, 실은 BMP280에서 읽을 수 없었다. 확인하려면 레지스터 값으로 chip ID를 확인하면됩니다.
(2021/07/25)
Reference
이 문제에 관하여(Bosch BME280을 RasPi에 연결할 때 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/XPT60/items/28add4410aef4dcfb759
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Bosch BME280을 RasPi에 연결할 때 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/XPT60/items/28add4410aef4dcfb759텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)