1. 記事一覧 >
  2. ブログ記事
category logo

Raspberry Pi 4に温湿度気圧センサBME280を取り付けてデータをLCD 1602Aに表示する

(更新) (公開)

はじめに

ラズベリーパイとセンサーを組み合わせて温度、湿度、気圧のデータを取得しWeb画面にグラフを表示するシステムを構築しました。 いわゆる IoT です。

・Raspberry Pi 4に温湿度気圧センサBME280を取り付けてデータをLCD 1602Aに表示する
BME280で取得した温湿度気圧をWeb画面に表示する(wiringpi-php8使用)
の2回に分け、今回は、センサーとLCD取り付け~動作確認までになります。

Raspberry Pi 4 組み立て
BME280センサはんだ付け
LCD 1602Aはんだ付け
I2C有効化
ブレッドボードへ配線
デバイス確認
動作確認

今回の検証環境は、

LABISTS Raspberry Pi 4 STARTER KIT

Raspbian GNU/Linux 10 (buster)

Python 2.7.16

温湿度気圧センサBME280

LCD 1602A

になります。


Raspberry Pi 4 組み立て

LABISTS Raspberry Pi 4 STARTER KIT を購入しました。
マニュアル(日本語有り)も入っていますので、基本的には、それを読みながらで特に問題無かったです。

ヒートシンクを取り付けます。

端子と側面の穴に合わせるようにして、ボードをケースの中に収めます。
→ここが一番の難所でしたが、ガチャガチャやっている内に、所定位置にぴったり収まりました。穴と端子はズレていなくて、差し込み辛いということも無いです。

ボードが入ったら、ネジ締めして、ファンを取り付けて完成です。ネジ穴は、ズレていることは無く、ぴったりでした。

・電源ケーブル
・HDMI - モニター
を接続して、電源投入、特に迷うことなく、初期設定完了です。

今回は、Wifiで通信を行い、IPアドレスは、DHCPで取得して、初期起動時からインターネットに繋がる環境でした。SSHを有効にして、SSH接続できました。
初期ユーザーは、piで今回最初にパスワードを入力する画面がありましたので、パスワードはそこで決まりました。その画面が無かった場合、
ユーザー名:pi
パスワード:raspberry
です。

固定IPアドレスの設定、SSH接続については、以下を参照してください。
Raspberry Pi OSをVMware-workstation-16.1.1にインストール


BME280センサはんだ付け

BME280センサとピンヘッダ(足)をはんだ付けします。
BME280センサ本体とピンヘッダが既にはんだ付けされているのもあるみたいですが、今回は、別々になっていましたので、はんだ付けしました。

【 BME280とBMP280について 】

最初、BME280 と書いてある商品を購入したら、BMP280 が送られてきました。(EとPの違いです。)BME280 は正方形、BMP280 はやや長方形気味ですので、見た目で分かります。


BMP280の方

BMPの方は気圧計機能が有りません。


BME280の方


LCD 1602Aはんだ付け

LCD 1602AとI2Cシリアルインターフェイスボードをはんだ付けで接続します。
ググると、LCDの裏側に付けている画像がたくさん出てきますが、向きを間違えなければ、どちらでも良いです。

【I2C】

デバイス間の通信方式の名前です。ここでは、詳細な説明は省略します。


I2C有効化

ラズパイ側でI2Cを有効化しておきます。

「設定」→「Raspberry Pi の設定」をクリックします。
「インターフェイス」タブの「I2C」「有効」にチェックを入れて、「OK」をクリックします。


ブレッドボードへ配線

ラズパイ - ブレッドボード

GPIOケーブルでラズパイ側GPIO端子と繋いでGPIO Extension Boardをブレッドボードに取り付けます。

各端子、割と奥まで入ります。GPIOケーブルの取り付けが緩くて、センサのデータ取得が不安定になることがありました。


GPIO Extension Boardは、単純に各ピンの役割が分かりやすくなるだけで、必須ではありません。


GPIO - BME280

GPIOBME280
3V3(3.3V電源)VIN
GNDGND
SCL1SCL
SDA1SDA

とジャンパーワイヤを繋げます。※今回は単純な配線のため、ジャンパーワイヤの色は適当です。


GPIO - 1602A

GPIO1602A(I2C)
GNDGND
VCC5V0(5.0V電源)
SDA1SDA
SCL1SCL

とジャンパーワイヤを繋げます。

SDA1とSCL1は、BME280にもつながっている形になります。I2Cは、デバイスの番号で信号を識別するため、このような配線が可能です。


デバイス確認

SSHで接続して、i2cdetectコマンドを入力します。

$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --

27(16進数で0x27)が LCD 1602A 、76(16進数で0x76)が BME280 です。
とりあえずは、認識されています。

【i2cdetectのオプション】

-y : Continue? [Y/n]と聞かれなくなるオプションです。

1 : I2Cバス番号です。0か1で、ラズパイによっては、0のこともあるようですが、通常は、1のようです。


載っているセンサチップが本当にBME280かどうか念のため確認します。

$ i2cget -y 1 0x76 0xd0
0x60

0x60 のため、問題ありません。
i2cget -y 1 0x76 0xd0 を実行して表示される値が
0x58 : BMP280
0x60 : BME280
0x61 : BME680
です。
なぜ分かるかと言うと、データシートを見ると分かります。
第一引数:i2cdetectで確認したデバイス番号→0x76
第二引数:データシート "ID・レジスター" のアドレス→0xd0
結果:01100000(2進数)→0x60(16進数)


動作確認

BME280動作確認/C言語

こちらのソースコード bme280-sample-master.zip を設置します。

kwgt/bme280-sample(GitHub)

$ unzip bme280-sample-master.zip
$ cd bme280-sample-master
$ make
cc -O2 -Wall   -c -o main.o main.c
cc -O2 -Wall   -c -o i2c.o i2c.c
cc -o test main.o i2c.o -lpthread
$ ./test
26.990000 45.737305 1006.980000
27.190000 45.757812 1006.960000
27.230000 45.594727 1007.050000
→CTRL+C

温度、湿度、気圧の順にそれらしい値が出力されています。
⇒OKです。


BME280動作確認/Python

こちらのソースコード bme280_sample.py を設置します。

SWITCHSCIENCE/samplecodes/BME280/Python27(GitHub)

$ pip install smbus2
$ python bme280_sample.py
temp : 27.44  ℃
pressure : 1007.25 hPa
hum :  39.71 %

⇒OKです。


何もしていない状態で python bme280_sample.py とすると、以下のようにエラーになるため、pip install smbus2が必要です。

$ python bme280_sample.py
Traceback (most recent call last):
  File "bme280_sample.py", line 3, in <module>
    from smbus2 import SMBus
ImportError: No module named smbus2

1602A動作確認/C言語

こちらのソースコード code.zip を設置します。

WayinTop/C-Python-Java-JP(GitHub)

$ unzip code.zip
$ cd code/C/21.LCD1602
$ sudo gcc LCD1602.c -o LCD1602 -lwiringPi -lwiringPiDev
$ ./LCD1602
CPU's temperature : 54.53
Thu Jun 24 11:20:54 2021

CPU's temperature : 55.02
Thu Jun 24 11:20:55 2021
→CTRL+C

LCDに端末と同じ値が表示されています。
⇒OKです。

最初、特にエラーが無いのに映らなくて、可変抵抗器をドライバで回す必要がありました。


1602A動作確認/Python

Pyhonのプログラムも動かしてみます。(上の続き)

$ cd ../../python/21.LCD1602/
$ python LCD1602.py
starting ...
→CTRL+C

⇒OKです。


できました!


続きはこちらです。

BME280で取得した温湿度気圧をWeb画面に表示する(wiringpi-php8使用)

loading...