CircuitPython 10行プログラミング Step2 (5) BME680

 温度、湿度、気圧、大気の汚れが同時に測れるセンサがBME680です。BME680はこちらの記事で詳しく説明しています。

接続

 I2Cのモードを選択するためにCSB(CS)をVccへ、スレーブ・アドレスを設定するSDOをGNDにつないで0x76にします。SDOをVccにつなぐと0x77になります。
 Adafruitのサンプル・プログラムでは0x77を使っているので、CS、SDOの端子を共にVccへショートしました。

 Vcc、GND、SCL、SDAはGroveコネクタでマイコン・ボードに接続します。複数のI2Cデバイスをつなぎたいので、I2C用サブボードを作って接続しています。

サンプル・プログラム

 examplesにbme680_simpletest.pyが入っているので、Muに貼り付け、main.pyで保存します。問題なく、動作しました。

 連載第3回のRTCのプログラムと合体します。

  CircuitPython 10行プログラミング Step2 (3) RTC DS3231

import time
import board
from busio import I2C
import adafruit_bme680
import adafruit_ds3231

# Create library object using our Bus I2C port
i2c = I2C(board.SCL, board.SDA)
bme680 = adafruit_bme680.Adafruit_BME680_I2C(i2c, debug=False)
rtc = adafruit_ds3231.DS3231(i2c)

days = ("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
#t = time.struct_time((2019, 5, 23, 9, 17, 15, 0, -1, -1))
#rtc.datetime = t

# change this to match the location's pressure (hPa) at sea level
bme680.sea_level_pressure = 1013.25

while True:
print("\nTemperature: %0.1f C" % bme680.temperature)
print("Gas: %d ohm" % bme680.gas)
print("Humidity: %0.1f %%" % bme680.humidity)
print("Pressure: %0.3f hPa" % bme680.pressure)
print("Altitude = %0.2f meters" % bme680.altitude)
t = rtc.datetime
print("The date is {}/{}/{} {}".format(t.tm_year, t.tm_mon, t.tm_mday, days[int(t.tm_wday)]))
print("The time is {}:{:02}:{:02}".format(t.tm_hour, t.tm_min, t.tm_sec))
time.sleep(1)

 実行中の様子です。