3年前,このブログにAE-BME280をRaspberry PiにI2Cで接続し,温度・湿度・気圧を測定するという記事を書いた。08/14 秋月電子のAK-BME280とRaspberry Piで温度・湿度・気圧を測る ちょうど8月上旬の一番暑い時期で,締め切った2階の書斎は40度に達していた。当時はRaspberry Piを1台しか持っておらず,仕事で使う必要があったので自宅での環境測定は1週間ぐらいで止めてしまった。
AE-BME280がI2Cで認識されなくなっていた
最近,またAE-BME280をRaspberry Piにつないでみたのだが,どうやってもRaspberry PiからAE-BME280を認識しない。前回と同様に接続し,ターミナルでi2cdetectを叩いても
$ sudo 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: — — — — — — — —
と,何も表示されない。本来ならば
$ sudo 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 —
のようにBME280のアドレスx76が表示されるはず。1Wire接続のマキシムDS18B20ではちゃんと温度が測定できるのでRaspberry PiのGPIOは正常なようだ。
AE-BME280が壊れたのかと思い,秋月電子でもう1個AE-BME280を買ってきたが,やはりi2cdetectでアドレスが表示されない。I2C接続のセンサーは他に持ってない。
スペックシートによればAE-BME280はI2CとSPIの両方の接続に対応している。それではSPIでつないだら動くだろうか。ところがRaspberry Pi・AE-BME280・SPIで検索しても出てくるのはI2C接続の事例ばかり。SPIでヒットするのはArduinoなどワンボードマイコンを使う記事しかない。
SPIとI2Cとは
そもそもSPIとI2Cとは何か,調べてみた。
いずれも同期シリアルで複数のスレーブ(センサーやディスプレイなど)を接続できる。シンプルで製造コストを抑えることが速度よりも重要とされるような周辺機器の接続に適している。
インターフェイス名 | 開発元 | 信号線 | 備考 |
SPI(Serial Peripheral Interface) | モトローラ | SCK(Serial Clock),MISO(Master In Slave Out),MOSI(Master Out Slave In),SS(Slave Select) | スレーブが増えるとSSが増える |
I2C(Inter-Integrated Circuit) | フィリップス | シリアルデータ(SDA)とシリアルクロック(SCL)の2本のみ | 最大1008ノードまで |
というわけで,線が2本+電源+グランドの4本で済むI2Cの方が手軽なため,重宝されているようだ。ArduinoもI2CとSPIの両方に対応しているが,なぜSPIというとArduinoばっかり出てくるのかは不明。
秋月電子のサイトに載っているAE-BME280のマニュアルによると3線式と4線式の接続がある。参考にしたサイトが4線式で繋いでいたので,自分も4線式にする。
Raspberry Piとの接続は
GPIOピン番号 | GPIO | AE-BME280ピン | AE-BME280ピン番号 |
23番ピン | SCK | SLCK | 6番ピン |
19番ピン | SDI | MOSI | 4番ピン |
24番ピン | CS | CE0 | 3番ピン |
9番ピン | GND | Ground | 2番ピン |
1番ピン | 3.3Vcc | 3.3Vcc | 1番ピン |
21番ピン | SDO | MISO | 5番ピン |
ソースコードをダウンロードし,改修してコンパイル
Raspberry PiでAE-BME280をSPI接続する事例がほとんど無く,ソフトも載ってない。I2Cのi2detectみたいにチェックするツールとかも見当たらない。それでも「自作ガジェット工房」というブログで「Gadget No.1 温度、湿度、気圧表示ガジェット」という記事を発見した。
これはRaspberry Pi+BME280+16桁×2行LCDディスプレイで気温・湿度・気温を測定・表示するというもの。
さっそくSPI経由BME280操作アプリケーションをダウンロードし,コンパイル。ところがこれはLCDディスプレイに表示する前提となっており,ターミナルで接続していると何も表示されない。
そこでspi_BME280.cをエディタで開き,LCD関連の行をコメントアウトする。
つまり39,41~44行と60行,95行,339行をコメントアウトするわけだ。
./configure –without-x
でMakeファイルを作り,
make
sudo make install
で完了。
TEMP : 26.5 DegC, PRESS : 1005.3 hPa, HUM : 48.7 %
TEMP : 26.5 DegC, PRESS : 1005.3 hPa, HUM : 49.0 %
TEMP : 26.5 DegC, PRESS : 1005.3 hPa, HUM : 47.2 %
TEMP : 26.5 DegC, PRESS : 1005.2 hPa, HUM : 48.7 %
TEMP : 26.5 DegC, PRESS : 1005.3 hPa, HUM : 47.7 %
TEMP : 26.5 DegC, PRESS : 1005.4 hPa, HUM : 47.8 %
TEMP : 26.5 DegC, PRESS : 1005.3 hPa, HUM : 49.2 %
TEMP : 26.5 DegC, PRESS : 1005.4 hPa, HUM : 49.5 %
TEMP : 26.4 DegC, PRESS : 1005.3 hPa, HUM : 49.4 %
これで1階居間の気候情報が確認できた。この後,Webサイトを立ち上げて気象情報を表示できれば個人気象台が完成だ。