8/17 AE-BME280をSPIでRaspberry Piに接続する

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サイトを立ち上げて気象情報を表示できれば個人気象台が完成だ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください