プログラム例

BME280拡張機能日本語仕様を用いたプログラム例の紹介

BME280の機能をmicor:bitTM(以下micro:bitと表記)で使用するため、Microsoft MakeCodeTM(以下MakeCodeと表記)BME280拡張機能日本語仕様を利用したプログラム(ブロック・javascript)の紹介

目次

1.基本編

  1. 初期設定
  2. BME280の基本機能を利用する
  3. 標高差の表示
  4. 飽和水蒸気圧・飽和水蒸気量の表示
  5. 露点の表示
  6. 条件ブロック

2.応用編

  1. PCにデータを送る

Indexにもどる


基本編

(1) 初期設定

BME280初期設定のブロック
【ブロックをjavascriptで示す】
  
  // センサーの初期化
  // I2Cアドレスを設定
  BME280.Address(BME280.BME280_I2C_ADDRESS.ADDR_0x76)
  // センサー起動
  BME280.PowerOn()
  // センター安定化のために1秒待つ
  basic.pause(1000)
  
  

【解説】

micro:bitはBME280と通信する際、I2Cを利用します。まず I2Cアドレスを指定し、micro:bitがBME280に指令を出すときの送り先(アドレス)をmicro:bitに教えます。BME280の場合は0x76か0x77です。どちらを利用するかはBME280センサーモジュールの種類やセンサーモジュールの設定によって異なります。BME280拡張機能日本語仕様の場合、ブロック内のプルダウンで0x76か0x77を選択します。次にmicro:bitにBME28の起動命令を出すように指示します。
 一時停止はセンサーの安定化のための命令。BME280起動直後は、データ測定が不安定なので1000ミリ秒=1秒ほど待ってやると値が安定します。

目次に戻る

(2) BME280の基本機能を利用する

基本機能の利用例 A・Bボタンの組み合わせで気温・気圧・湿度を表示 のブロック
【ブロックをjavascriptで示す】
 
// Aを押すとmicoro:bitのLEDに気温(摂氏 小数第1位)をmicro:bitのLEDに表示
input.onButtonPressed(Button.A, function () {
    basic.showNumber(BME280.temperature(BME280.BME280_T.T_C, BME280.RPoint.RPt))
})
// Bを押すとmicoro:bitのLEDに気温(hPa 小数第1位)をmicro:bitのLEDに表示
input.onButtonPressed(Button.B, function () {
    basic.showNumber(BME280.pressure(BME280.BME280_P.hPa, BME280.RPoint.RPt))
})
// AとBを同時に押すとmicoro:bitのLEDに湿度(% 小数第1位)をmicro:bitのLEDに表示
input.onButtonPressed(Button.AB, function () {
    basic.showNumber(BME280.humidity(BME280.RPoint.RPt))
})
  
  

【解説】

気温ブロック・気圧ブロック・湿度ブロックにより気温・気圧・湿度をBME280から取り出して文字列にし、単位をつけてmicro:bitのLEDに表示するプログラムです。micro:bitの入力ブロックとBME280拡張機能日本語仕様のブロックを組み合わせたものです。
 直接の気温・気圧・湿度の各ブロックを使っていますが変数を利用してもかまいません。応用として測定した気温・気圧・湿度を変数に収め、USB経由でPCに送信することも可能です。

目次に戻る

(3) 標高差の表示

BME280標高差 初期設定のブロック ボタンAを押すと標高差のブロック
【ブロックをjavascriptで示す】
  
// 初期設定
// 変数の定義
let 標高差 = 0
let 基準点の気圧 = 0
// センサーの初期設定
BME280.Address(BME280.BME280_I2C_ADDRESS.ADDR_0x76)
BME280.PowerOn()
BME280.PowerOff()
基準点の気圧 = BME280.pressure(BME280.BME280_P.hPa, BME280.RPoint.RPd)
)
// Aを押すとmicoro:bitのLEDに標高差が表示
input.onButtonPressed(Button.A, function () {
    標高差 = BME280.getElevationdifference(
    BME280.Eldf.altd_m,
    BME280.Rpoint2.RP1st,
    基準点の気圧,
    BME280.BME280_P.hPa
    )
})
  
 

【解説】

気温・気圧から標高差を求めます。
 基準気圧(基準点の気圧)を変数「基準点の気圧」に収め、ブロックの指定の場所に入れることで、基準点との標高差を計算しています。結果は変数「標高差」に格納し、文字列にし単位をつけてmicro:bitのLEDに表示します。
 直接ブロックには出てきませんが、MakeCodeエディタで変数を定義しています。javascriptの「let 標高差 = 0」「let 基準点の気圧 = 0」が変数の定義になります。

目次に戻る

(4) 飽和水蒸気圧・飽和水蒸気量の表示

飽和水蒸気圧・飽和水蒸気量表示のブロック
【ブロックをjavascriptで示す】
  
// 変数の定義
let 気温 = 0
// ボタンAを押すと飽和水蒸気圧(小数第1位)+hPaがmicro:bitのLEDに表示
input.onButtonPressed(Button.A, function () {
    basic.showString("" + BME280.Calcsvpnow(BME280.Rpoint2.RP1st) + "hPa")
})
// ボタンBを押すと飽和水蒸気(整数)++g/m^3がmicro:bitのLEDに表示。
input.onButtonPressed(Button.B, function () {
    気温 = BME280.temperature(BME280.BME280_T.T_C, BME280.RPoint.RPt)
    basic.showString("" + BME280.Calcsva(気温, BME280.Rpoint2.Rintg) + "g/m^3")
})
  
 

【解説】

飽和水蒸気圧・飽和水蒸気量を求めます。
 飽和水蒸気圧はBME280から直接気温の値を得て計算し、文字列にし単位をつけてmicro:bitのLEDに表示させています。飽和水蒸気量はBME280から気温の数値を得て、変数「気温」に収め、ブロックの指定の場所に入れることで、飽和水蒸気量を計算しています。結果は文字列にし単位をつけてmicro:bitのLEDに表示します。MakeCodeエディタで変数「気温」を定義しています。

目次に戻る

(5) 露点の表示

ボタンAとボタンBを同時に押すと露点表示のブロック
【ブロックをjavascriptで示す】
  
// ボタンA+Bを押すと露点(整数)+Cがmicro:bitのLEDに表示
input.onButtonPressed(Button.AB, function () {
    basic.showString("" + BME280.getDewpointnow(BME280.Rpoint2.Rintg) + "c")
})
  
 

【解説】

露点を求めます。
 露点は気温と湿度が分かれば求めることができます。BME280から気温・湿度の値を得て計算し、文字列にし単位をつけてmicro:bitのLEDに表示させています。利用している改良マグヌス式は近似値を求める式なので若干のずれがあります。MakeCodeエディタで変数「気温」と「湿度」を定義し気温・湿度を変数に代入して求めるブロックを利用する方法もあります。詳しくは「2.ブロックの紹介」を参考にしてください。

目次に戻る

(6) 条件ブロック

準備中

目次に戻る


応用編

(1) PCにデータを送る

BME280で測定した気温・気圧・湿度と気温・気圧を利用して算出した標高差をPCに送り、ブラウザ上でグラフ化をします。

PCとのシリアル通信 初期化ブロック
PCとのシリアル通信 初期化ブロック
メインブロック:データ取得・送信部(ブロックが大きいため分割)
PCとのシリアル通信 メインブロック上部
「シリアル通信」の条件ブロックでPCから改行コードが来たときに行うイベントを指定
ア 変数「command」に改行コードまでの信号を入れる。 (a) 変数「気温」・「気圧」・「標高差」・「湿度」に数値を代入
PCとのシリアル通信 メインブロック中部
(b)「気温」・「気圧」・「標高差」・「湿度」の数値をカンマ切り(csv形式)でPCに送信
PCとのシリアル通信 メインブロック下部

Indexにもどる