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の接続は、以下のとおりです。
1pin VDD
2pin GND
3pin CSB→VDD チップセレクトとありますが、I2Cは関係ないそうです。
4pin SDA
5pin SDO→GND I2C ADDR 0x76になります
6pin SCL
いきなり成果写真になってますが、BME280はOLEDの隣に設置し、SDAとSCLをOLED経由でバス接続で延ばして接続します。
母艦PCのuPyCraftの通信状況部分にも確認のためprint文で表示させ、OLEDの表示とあってるか確認しました。モニター画面反射してますがすいません。
OLEDの日本語化とか最新データのグラフ化とか使い方はまだまだあります。
pythonコードは、以下のとおりです。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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) |
0 件のコメント:
コメントを投稿