• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • HOME
  • Arduino
    • Arduino初心者編
    • Arduino基礎編
    • Arduino応用編
    • Arduino実践編
  • Raspberry Pi
  • microbit
  • XBee
  • Scratch
  • Contact Us
  • Privacy Policy

STEMSHIP

ものづくりを通して、科学を学ぼう!

現在の場所:ホーム / XBee / XBeeモジュールとBMP280センサを使用してデータ収集する

XBeeモジュールとBMP280センサを使用してデータ収集する

2021年5月31日 by STEMSHIP コメントを書く

前回とは別のセンサを用いて、異なる通信インターフェースでのセンサの読み取りに取り組みます。また、プロトタイピング用のモジュールを使用して、配線作業をより簡単に行います。

ブレッドボード上でのXBee Explorerモジュールの代わりに、図1に示すような、XBee Grove Development Boardを使用します。この基板はXBeeモジュールを取り付けて使用しますが、基板上に6つのGroveコネクタ、ボタンスイッチやLEDなどが実装されています。この基板についての詳細はDigiインターナショナル社のwebページにある資料をご覧ください。

図1 XBee Grove Development Board

Groveは、Seeed Studio社によって作られたプロトタイピング用のプラットフォームで、4線式のコネクタを使って各デバイスを簡単に接続できるように設計されています。対応する様々な電子部品・デバイスを活用することで、素早く簡単に電子回路が組み立てられます。Groveシステムについて詳細は、Seeed StudioのWikiを参照してください。

ここでは、温度・大気圧センサのBMP280を使用します。Groveモジュールとして発売されていますが、もしも手に入らなければ同じBMP280というセンサを使用したモジュールであれば同じように使用できます。センサそのものは非常に小さいものなので、センサそのものではなくセンサをいくつかの電子部品とともに小さな基板に取り付けた「モジュール」を使用します。

詳しくは文末の「使用したパーツのリスト」欄にまとめておきました。

図2 BMP280モジュールの例(Groveではありません)

このセンサは、7ビットのアドレス指定が可能なI2C(Inter-Integrated Circuit)インターフェースを使用しています。電源、GND、クロック信号線(SCL)、データ信号線(SDA)の4本の電線を接続することでセンサが動作します。

I2Cインターフェースはそれぞれのパーツがアドレスを持っているため、1組のバス(信号線のまとまり)に複数のデバイスを接続して、個別に制御する、データを読み書きするといった使い方ができます。ただし、同じI2Cインターフェースで動作するとはいえ、各デバイスはそれぞれの通信プロトコルで動作するため、デバイスを動作させるためには専用のライブラリ(ドライバとも呼ばれる)が必要になります。

温度・大気圧センサBMP280については、MicroPythonで動作させるために必要なライブラリが公開されているため、ダウンロードしてXBeeモジュールに書き込んで使用します。

ハードウェアの設定

この例でのハードウェアのセットアップは、これまでよりも簡単です。

XBee Grove Development Board、BMP280センサモジュール、Groveのジャンパーケーブルを用意します。

用意したBMP280モジュールにピンヘッダがはんだ付けされていない場合、はんだ付けしておいてください。

センサのXBeeモジュールへの接続は、先述の通りI2Cインターフェースで行います。BMP280 自体はSPIインターフェースにも対応していることから、モジュールによってはSPI用のピンヘッダが付いているものもありますので注意してください。

また、XBee Grove Development Boardの基板が斜めにカットされた側を上に置いて表から見たとき、一番右上のGroveコネクタを使用します。

以下、接続例をいくつか示します 。まだ、XBeeモジュールを取り付けたり、PCに接続したりはしないでください。

Grove BMP280モジュール

BMP280 Groveモジュールを使用する場合、図3のようにGroveケーブルを使用して接続するだけで準備が完了します。

図3 BMP280 Groveモジュールを使用する場合

BMP280モジュール+Groveブレイクアウトケーブル

GroveモジュールではないBMP280モジュールを使用する場合、Groveブレイクアウトケーブルを使用すると作業が簡単になります。これは、ケーブルの一方がGroveコネクタ、もう一方がジャンプワイヤーのメス端子になったケーブルです。(Groveコネクタとジャンプワイヤーのオス端子になったものもあります。)

Groveコネクタ側をXBee Grove Development BoardのGroveコネクタに、反対側をBMP280モジュールに接続します。図4に一例を示しますが、使用するモジュールによってピンの並びは異なります。XBee Grove Development Boardとモジュールそれぞれで信号線が一致するように接続してください。

図4 Groveブレイクアウトケーブルを使用する場合

ジャンプワイヤーを使用する

通常のジャンプワイヤーでも接続できますが、この場合にはGroveコネクタを2つ使用します。Groveコネクタのピン間隔がブレッドボード等よりも狭いため、1つのコネクタに4本分のジャンプワイヤーを接続できないためです。

図5 ジャンプワイヤーを使用する場合

センサノードの設定

センサノードとして使用するXBeeモジュールは、APIファームウェアが書き込まれた、エンドデバイスかルーターで、MicroPythonが実行できるよう設定して使用します。

XBee Grove Development BoardにXBeeモジュールをセットし、USBケーブルでPCに接続すると、XBeeアダプタとしても使用できます。

表1のように設定します。設定値はすべて16進数で入力し、設定値を変更したら、「Write」ボタンをクリックしてXBeeモジュールに設定値を保存するのを忘れないようにしてください。

設定値コード設定地の名前説明設定値
APAPI EnbleAPIモードの設定MicroPython REPL [4]
BDUART Baud Rateシリアル通信速度115200 [7]
D1DIO1/AD1DIO1ピンの設定I2C SCL[4]
P1DIO11DIO11ピンの設定I2C SDA[6][S92] 
IDPAN IDネットワークのID8088
NIノード識別子ノードの名前sensor_node
PSMicroPython Auto StartMicroPythonを自動実行Enable [1]
表1 XBeeセンサノードの設定値

センサノードのプログラミング

XBeeモジュール上でMicroPythonを使用する方法として、スクリプトを対話的に描いてファイルに保存する方法と、ファイルを作成してモジュールにアップロードする方法がありました。先の例で対話型モードを試したので、今度はファイルをアップロードする方法を試してみましょう。

まず、BMP280用のライブラリを入手します。David Wahlund氏によってインターネット上に公開されていますので、下記リンクからダウンロードします。

https://github.com/dafvid/micropython-bmp280

BMP280以外のI2Cで動作するデバイス用のオリジナルライブラリを制作する場合、このライブラリをテンプレートとして使用しても良いでしょう。

ダウンロードしたらZIPファイルを解凍して、「bmp280.py」ファイルを一部修正の上、XBeeモジュールにコピーします。

122~123行目辺りの

        if use_case is None:

            self.use_case(use_case)

を、

         self.use_case(use_case)

に変更します。「if~」の行を消した後、「Self~」の行のインデントを1つ削除して、前の行と先頭を揃えます。

また、「pressure()」よりも後にあるメソッドのうち、「def use_case(self,uc):」以外のものを削除します。以上修正すると、次のようになります。





ファイルの変更が終わったら、XBeeモジュールにコピーします。

XBee Grove Development BoardとXBeeモジュールをPCに接続し、XCTU上でXBeeモジュールを選択したら、図6のようにToolsメニューから「File System Manager」を開きます。

図6 File System Managerを開く

「Open」ボタンをクリックすることでXBeeモジュールに接続します。

File System Managerの左画面にはPC上のフォルダが、右画面にはXBeeモジュール上のフォルダが表示されます。

右画面で「lib」というフォルダに移動しておき、左画面で「bmp280.py」を探して右画面にドラッグ&ドロップしてください。これでbmp280.pyがXBeeモジュール上にコピーされました。図7がコピー後の状態です。

図7 File System Managerを使ってbmp280.pyをコピー

ライブラリがコピーできたら、File System Managerを閉じてライブラリのテストを行いましょう。

Toolsメニューから「MicroPython Terminal」を開き、「Open」ボタンをクリックしてXBeeモジュールに接続します。

ENTERキーを押すかCtrl+Cを入力すると>>>(プロンプト)が表示されてスクリプトが入力できるようになります。次のように入力します。

from machine import I2C
from bmp280 import BMP280
bmp280 = BMP280(I2C(1, freq=100000), 0x77)
print(bmp280.temperature)
print(bmp280.pressure)

MicroPythonに標準で入っているI2C通信を行うライブラリと、先ほどコピーしたbmp280用のライブラリを読み込み、I2C通信を開始、温度と気圧を表示するスクリプトです。

このように表示されればOKです。温度や気圧の数値はその時々で異なることでしょう。

>>> from machine import I2C
>>> from bmp280 import BMP280
>>> bmp280 = BMP280(I2C(1, freq=100000), 0x77)
>>> print(bmp280.temperature)
21.71
>>> print(bmp280.pressure)
102357.4

アドレスエラーやNOENVエラーなど、エラーが表示された場合は配線を再確認してください。ジャンプワイヤーやコネクタを挿しなおすと直ることもあります。

これでbmp280ドライバーの動作が確認できました。センサを読み取るためのスクリプトを作成していきましょう。次のようになります。

MicroPythonスクリプトによる温度・大気圧センサbmp280の読み取り

from machine import I2C
from bmp280 import BMP280
from time import sleep
import xbee

# BMP280アドレス
BMP_ADDR = 0x77
# データ送信先アドレス
TARGET_64BIT_ADDR = b'\x00\x13\xA2\x00\x41\xC1\x99\xCA'
wait_time = 15 #測定間隔
cycle = 10 # 繰り返し回数

bmp280 = BMP280(I2C(1, freq=100000), BMP_ADDR)

for x in range(cycle):
	# 温度と気圧を読み取る
	temp_c = bmp280.temperature
	pressure = bmp280.pressure

	# 温度を適切な単位に変換する
	print("Temp: %.2f C" % temp_c)
	temp_f = (temp_c * 9.0 / 5.0) + 32.0
	print("Temp: %.2f F" % temp_f)

	# コーディネーターにデータを送る
	message = "C: %.2f, F: %.2f, B: %.4f" % (temp_c, temp_f, pressure)
	print("Sending: %s" % message)
	 

	try:
		xbee.transmit(TARGET_64BIT_ADDR, message)
		print("Data sent Successfully")
	except Exception as e:
		print("Data sent Fail: %s" %str(e))

	# サイクル間の待ち時間
	sleep(wait_time)

このスクリプトを「main.py」という名前で保存し、File System ManagerでXBeeモジュールのルートフォルダにコピーします。(先ほどbmp280のライブラリをコピーした「lib」というフォルダと同じ階層です)

これでセンサノードをテストする準備が整いました。センサノードの電源はいったん切っておきます。

コーディネーターの設定

コーディネーターは先の例題と同じ設定のままで使用できます。

センサノードのテスト

まず、コーディネーターとして設定したXBeeモジュールをPCに接続して電源を入れます。XCTUアプリケーションでXBeeモジュールを検出して接続し、ターミナルを開いておきます。

次に、センサノード側のXBeeモジュールにも電源を入れます。コーディネーター側のモジュールと接続してネットワークに参加するまでには時間がかかることもあります。コーディネーターがデータを受信すると、図8のようにデータを受信していることが分かります。

図8 センサノードからのデータを受信

受信したパケットが表示されたでしょうか?

これまでの例と同様、データの先頭は区切り文字「7E」で始まっているはずです。受信したパケットの中身は次のような、16進数の値の羅列です。

7E 00 2E 90 00 13 A2 00 41 92 DB A4 94 CC 01 43 3A 20 31 39 2E 36 39 2C 20 46 3A 20 36 37 2E 34 34 2C 20 42 3A 20 31 30 32 33 37 38 2E 32 34 39 32 58

この中で、MicroPythonスクリプトで送信したデータはやはりパケットの最後の方に含まれています。この例では、

43 3A 20 31 39 2E 36 39 2C 20 46 3A 20 36 37 2E 34 34 2C 20 42 3A 20 31 30 32 33 37 38 2E 32 34 39 32

これを、ASCIIコードに変換すると、次のようなメッセージが現れます。

C: 19.69, F:61.44, B: 102378.2492

パケットの中身を詳しく見ていきましょう。表2に「受信」パケットのレイアウトを示します。

値(例)フィールド名説明
7E   スタートデリミタパケットの先頭
0014  パケットの長さ 
90   フレームタイプ受信パケット
0013A20064ビットアドレスセンサノードのアドレス
4192DBA4
94CC  予約 
01   受信オプション 
433A20…データ受信したデータ
…343932
58   チェックサム 
表2 受信パケット

こちらも同様に、センサノードからのデータが受信できているとわかったら、ある程度動作させて温度の変化を観察してみてください。あるいは、手でセンサを温めてみたり、息を吹きかけてみたりすると温度変化が観察できるはずです。

温度の変化がデータの変化として受信できれば、正常に動作しているとみていいでしょう。

使用したパーツのリスト

TMP36を使用した例を実行するために必要な電子部品を表3に、BMP280を使用した例を実行するために必要な電子部品を表4、5に、それぞれリストアップします。重複しているものはいずれか1セットだけで構いません。

この他、XBee USBアダプタ類に使用するUSBケーブル、ブレッドボード用のジャンプワイヤーなど、必要に応じて用意してください。

表3 TMP36を使用する例で必要な電子パーツ

項目製品例価格必要数
XBee-ZBシリーズ2/2.5/3https://www.switch-science.com/catalog/5311/¥2,546-2
XBee Explorer ドングルhttps://www.switch-science.com/catalog/1790/¥3,243-1 *
XBee Explorer USBhttps://www.switch-science.com/catalog/1791/¥3,243-1 *
ブレッドボードhttps://www.switch-science.com/catalog/313/\275-1
温度センサTMP36https://www.marutsu.co.jp/pc/i/171271/\160-1
0.1uFコンデンサhttps://www.marutsu.co.jp/pc/i/13850760/\104-1

* これら3種類の組み合わせは何でも構いませんが、合計2つ必要です。

表4 BMP280を使用する例で必要な電子パーツ(Groveモジュール使用)

項目製品例価格必要数
XBee-ZBシリーズ2/2.5/3https://www.switch-science.com/catalog/5311/¥2,546-2
XBee Explorer ドングルhttps://www.switch-science.com/catalog/1790/¥3,243-1 *
XBee Explorer USBhttps://www.switch-science.com/catalog/1791/¥3,243-1 *
Grove XBeeキャリア (XBee Grove Development Boardの代用)https://www.switch-science.com/catalog/1052/\2,310-1
Grove BMP280モジュールhttps://www.switch-science.com/catalog/3373/\1,276-1 **

* いずれか1つ使用します。

** Groveケーブルが1本付属します。

表5 BMP280を使用する例で必要な電子パーツ(Groveモジュール不使用)

項目製品例価格必要数
XBee-ZBシリーズ2/2.5/3https://www.switch-science.com/catalog/5311/¥2,546-2
XBee Explorer ドングルhttps://www.switch-science.com/catalog/1790/¥3,243-1 *
XBee Explorer USBhttps://www.switch-science.com/catalog/1791/¥3,243-1 *
Grove XBeeキャリア (XBee Grove Development Boardの代用)https://www.switch-science.com/catalog/1052/\2,310-1
BMP280モジュールhttps://www.marutsu.co.jp/pc/i/31850209/ https://www.marutsu.co.jp/pc/i/10546192/ など\1,215- \1,277-  いずれか 1
Groveブレイクアウト ケーブルhttps://www.marutsu.co.jp/pc/i/829423/\590-1

* いずれか1つ使用します。

まとめ

XBeeモジュールは、デバイス同士でデータの無線転送を行ったり、多くのセンサをホスト(接続)してデータを収集したりといったことを、簡単に安価に実現できる素晴らしい方法です。

このセクションでは実際に実験を行いながら、MicroPythonスクリプトを応用することで様々なインターフェースで通信してデータを得たり、データを送信する前に何らかの計算をしたりできるということを学びました。

Seeed Studio社が展開するプロトタイピングプラットフォーム「Grove」についても少し紹介しました。Groveを活用すると、プリント基板やユニバーサル基板、ブレッドボード上で行っていた回路作製の作業をもっと簡単に行うことができます。

Filed Under: XBee

Reader Interactions

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

最初のサイドバー

CONTACT US

  • Facebook
  • Twitter
  • Youtube

More to See

Arduinoベースのセンサノード:XBeeデータ収集ノードの製作

2021年9月27日 By STEMSHIP

Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

2021年9月21日 By STEMSHIP

XBeeモジュールとBMP280センサを使用してデータ収集する

2021年5月31日 By STEMSHIP

XBeeモジュールでMicroPythonを使ってセンサを読み取る

2021年5月24日 By STEMSHIP

XBeeモジュールでセンサを読み取る:センサノードの設定と測定

2021年5月17日 By STEMSHIP

カテゴリー

  • Arduino (44)
    • Arduino初心者編 (15)
    • Arduino基礎編 (11)
    • Arduino実践編 (4)
    • Arduino応用編 (11)
    • Arduino番外編 (3)
  • MakeyMakey (1)
  • microbit (11)
  • Raspberry Pi (13)
  • Scratch (6)
  • STEM教育 (5)
  • XBee (15)
  • ものづくり教育 (2)
  • 子供の教育 (2)
  • 科学 (6)
  • 算数 (5)

Tags

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Footer

最近の投稿

  • Arduinoベースのセンサノード:スケッチ(プログラム)の作製
  • Arduinoベースのセンサノード:XBeeデータ収集ノードの製作
  • Arduinoベースのセンサノード:Arduinoを使った温度センサの作製
  • XBeeモジュールとBMP280センサを使用してデータ収集する
  • XBeeモジュールでMicroPythonを使ってセンサを読み取る

タグ

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Search

2025年5月
月 火 水 木 金 土 日
 1234
567891011
12131415161718
19202122232425
262728293031  
« 10月    

Copyright © 2025 · STEMSHIP.COM