Raspi

2年目のラズパイ15日目…ESP32+BME280

2年目のラズパイ15日目…ESP32+BME280

引き続きESP32です。BOSCH製の温湿度・気圧センサーBME280を接続して値を読み込み、先週のOLEDに表示するまでを頑張ります。

BME280は、秋月で買うと1,080円です。海外通販だと2-300円だそうです。送られてくるまで日数はかかるそうですが。 上位機種のBME680というのもあり3項目に加えて空気中のガス濃度を測定してくれます。

BME280は、ラズパイに接続しAmbientのクラウドへ値を15分周期で送るのに使ってます。linuxでの設定は結構簡単だった記憶です。

BME280のドライバーは先人の知恵をいただきます。 https://github.com/catdog2/mpy_bme280_esp8266/blob/master/bme280.py

参考ページは、この辺で https://qiita.com/tshimizu8/items/e64e1af656b3b00a92d9

I2C接続のマスターはESP32なのでスレーブ側のセンサー等はバス接続でSCLとSDAの2線を共通にどんどん接続できます。 ただし、I2Cアドレスが競合するとよくないので、その辺はそれぞれのデバイスのデーターシートをよく確認する必要があります。

BM280の接続は、以下のとおりです。

1
2
3
4
5
6
1pin VDD
2pin GND
3pin CSB→VDD チップセレクトとありますが、I2Cは関係ないそうです。
4pin SDA
5pin SDO→GND I2C ADDR 0x76になります
6pin SCL

いきなり成果写真になってますが、BME280はOLEDの隣に設置し、SDAとSCLをOLEDを経由してバス接続で延ばして接続します。

OLEDにセンサーから読み取った温度、湿度、気圧が30秒更新され表示されてます。

母艦PCのuPyCraftの通信状況部分にも確認のためprint文で表示させ、OLEDの表示とあってるか確認しました。モニター画面反射してますがすいません。

OLEDの日本語化とか最新データのグラフ化とか使い方はまだまだあります。 pythonコードは、以下のとおりです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# BME280 sensor I2C + oled

import machine, time
import bme280, ssd1306

i2cBME280 = machine.I2C(scl=machine.Pin(4), sda=machine.Pin(5))
bme = bme280.BME280(i2c=i2cBME280)

#i2cSSD1306 = machine.I2C(scl=machine.Pin(4), sda=machine.Pin(5))
oled = ssd1306.SSD1306_I2C(128, 64, i2cBME280)

while True:
  
  sensorString = bme.values
  print(sensorString)
  
  oled.text(sensorString[0], 0, 0)
  oled.text(sensorString[2], 0, 10)
  oled.text(sensorString[1], 0, 20)

  oled.text('BME280 on SSD1306', 0, 50)

  oled.show()
  time.sleep(30)
comments powered by Disqus