• 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モジュールでMicroPythonを使ってセンサを読み取る

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

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

前回に続いて、XBeeモジュール上でMicroPythonスクリプトを動作させて温度センサTMP36から温度を読み取り、ネットワーク上の別のXBeeモジュールにデータを送信してみます。センサの読み取り用と、データを受信用に計2つ、XBeeモジュールを使用します。

この例では、センサノードにはシリーズ3のXBeeモジュールが必要です。コーディネーターは前セクションで設定したXBeeモジュールがそのまま使えます。

センサノードの設定

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

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

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

コーディネーター側のXBeeモジュールは、前セクションでコーディネーターに設定したモジュールがそのまま使えます。

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

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

図1に示すように、XCTUのメニューからMicroPythonターミナルを起動します。

図1 MicroPythonターミナルを開く

MicroPythonターミナルを開いたら、「Open」ボタンをクリックして接続すると、プロンプト「>>>」が表示されます。表示されない場合は、すでにMicroPythonスクリプトが実行されているかもしれません。その場合は、キーボードからCtrl+Cを入力してスクリプトを止めます。

次に、Ctrl+Fを入力し、MicroPythonスクリプトの書き込みモードにし、下記示したコードを入力します。

入力は下記のコピー&ペーストで結構ですが、6行目の「TARGET_64BIT_ADDR」は使用するコーディネーターの64ビットアドレスに置き換えてください。2文字ごとに区切って、「/x」をそれぞれの先頭に付け加えます。

入力が終わったら、Ctrl+Dを入力してMicroPythonスクリプトを書き込みます。
「Automatically run this code at startup?(XBeeモジュール起動時にこのスクリプトを自動で実行しますか?)」と尋ねられるので、キーボードから「y」を入力して、自動で実行するように設定します。

from machine import ADC
from time import sleep
import xbee

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

for x in range(cycle):
	# 温度値を読み込んでデバッグ用に表示
	temp_pin = ADC("D3")
	temp_raw = temp_pin.read()
	print("raw data: %d, " % temp_raw)

	# 温度を適切な単位に変換する
	temp_c = (float(temp_raw) * (1250.0/4096.0)) * 100 / 1000 - 50
	print("Temp: %.2f C" % temp_c)

	temp_f = (temp_c * 9.0 / 5.0) + 32.0
	print("Temp: %.2f F" % temp_f)

	# コーディネーターにデータを送る
	message = "raw: %d, C: %.2f, F: %.2f" % (temp_raw, temp_c, temp_f)
	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)

下記に、コードのコピー&ペーストと書き込みまでの流れを示します。

flash compile mode; Ctrl-C to cancel, Ctrl-D to finish
   1^^^ from machine import ADC
   2^^^ from time import sleep
   3^^^ import xbee
   4^^^ 
   5^^^ # ??????????
   6^^^ TARGET_64BIT_ADDR = b'\x00\x13\xA2\x00\x41\xC7\x53\x02'
   7^^^ wait_time = 15 #????
   8^^^ cycle = 10 # ??????
   9^^^ 
  10^^^ for x in range(cycle):
  11^^^         # ?????????????????
  12^^^         temp_pin = ADC("D3")
  13^^^         temp_raw = temp_pin.read()
  14^^^         print("raw data: %d, " % temp_raw)
  15^^^ 
  16^^^         # ?????????????
  17^^^         temp_c = (float(temp_raw) * (1250.0/4096.0)) * 100 / 1000 - 50
  18^^^         print("Temp: %.2f C" % temp_c)
  19^^^ 
  20^^^         temp_f = (temp_c * 9.0 / 5.0) + 32.0
  21^^^         print("Temp: %.2f F" % temp_f)
  22^^^ 
  23^^^         # ???????????????
  24^^^         message = "raw: %d, C: %.2f, F: %.2f" % (temp_raw, temp_c, temp_f)
  25^^^         print("Sending: %s" % message)
  26^^^          
  27^^^ 
  28^^^         try:
  29^^^                 xbee.transmit(TARGET_64BIT_ADDR, message)
  30^^^                 print("Data sent Successfully")
  31^^^         except Exception as e:
  32^^^                 print("Data sent Fail: %s" %str(e))
  33^^^ 
  34^^^         # ??????????
  35^^^         sleep(wait_time)
  36^^^ 
  37^^^ 
Erasing /flash/main.mpy...
Compiling 788 bytes of code...
Saved compiled code to /flash/main.mpy (564 bytes).
Automatically run this code at startup [Y/n]? Y
Stored code will run at startup.
Press CTRL-R in the REPL to run the code at any time.

MicroPython v1.12-1548-gfc68e2a on 2020-09-01; XBee3 Zigbee with EFR32MG
Type "help()" for more information.
>>> 

スクリプトを保存したら、Ctrl+Rを押してスクリプトを実行してみましょう。

下記のように表示され、温度センサの値(まだセンサを取り付けていないのでおかしな値になるはずです)が15秒おきに表示されたでしょうか。動作が確認出来たら、Ctrl+Cを押してスクリプトを停止させます。

Loading /flash/main.mpy...
Running bytecode...
raw data: 4095, 
Temp: 74.97 C
Temp: 166.95 F
Sending: raw: 4095, C: 74.97, F: 166.95
Data sent Successfully
raw data: 4095, 
Temp: 74.97 C
Temp: 166.95 F
Sending: raw: 4095, C: 74.97, F: 166.95
Data sent Successfully
Traceback (most recent call last):
  File "<stdin>", line 35, in <module>
KeyboardInterrupt: 

>>> 

プログラムの13~17行目で温度センサの読み取り電圧から摂氏の温度への換算を行っています。

先ほどのMicroPythonを使用しない例と、AD変換の読み取りの最大値が1023から4095に変わっています。MicroPythonのAD変換では0Vを「0」、1.25Vを「4095」として表現しているためです。

スクリプトが正常に動作していることが分かったら、MicroPython Terminalを閉じてXBeeモジュールを取り外し、ブレッドボード上のXBee Explorerにセットします。

続いてコーディネーターの設定を行います。

コーディネーターの設定

コーディネーターとして使用するXBeeモジュールをUSBアダプタにセットし、コーディネーターとして動作するように設定した後、表4-5のように設定します。

設定値コード設定地の名前説明設定値
IDPAN IDネットワークのID8088
NIノード識別子ノードの名前Coordinator
AOAPI出力モード 1
表2 コーディネーターの設定値

設定が終わったら、センサノードの電源を入れてネットワークを確認してみましょう。図2にネットワークの表示例を示します。XCTU上でコーディネーターとなるXBeeモジュールを選択して、右上のアイコンからネットワークモードに入り、「Scan」をクリックするとセンサノードを探して接続する様子が観察できます。うまく接続できない場合は、各設定値を再度見直してみてください。

図2 ネットワークの確認

これでセンサノードのテストの準備が整いました。

センサノードのテスト

まず、コーディネーターとして設定したXBeeモジュールをUSBアダプタに取り付け、PCのUSBコネクタに差し込んで電源を入れます。コーディネーター側のXBeeモジュールを先に電源を入れることがポイントです。XCTUアプリケーションを起動してXBeeモジュールを検出し、ターミナルを開いておきます。

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

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

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

7E 00 2F 91 00 13 A2 00 41 CB C2 FA 17 D2 E8 E8 00 11 C1 05 01 72 61 77 3A 20 32 34 38 34 2C 20 43 3A 20 32 35 2E 38 31 2C 20 46 3A 20 37 38 2E 34 35 11

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

72 61 77 3A 20 32 34 38 34 2C 20 43 3A 20 32 35 2E 38 31 2C 20 46 3A 20 37 38 2E 34 35

の部分です。

これら16進数の値を米国情報交換標準コード(ASCIIコード)に変換すると、このようなメッセージが表示されます。

raw: 2484, C: 25.81, F: 78.45

続いて、パケットの中身を詳しく見ていきましょう。表3に「Explicit RX インジケータ」パケットのレイアウトを示します。

値(例) フィールド名説明
7E   スタートデリミタパケットの先頭
002F  パケットの長さ 
91   フレームタイプExplicit RXインジケータ
0013A20064ビットアドレスセンサノードのアドレス
41CBC2FA
17D2  16ビットアドレス 
E8   ソース エンドポイント 
E8   ディスティネーションエンドポイント 
0011  クラスタID 
C105  プロファイルID 
01   受信オプション 
726177…データ受信したデータ
…2E3435
11   チェックサム 
表3 Explicit RX インジケータパケット

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

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

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