土壌湿度センサー「かけはし」のデータ収集ソフト

| | コメント(0) | トラックバック(0)
土壌湿度センサー「かけはし」からデータ収集するソフトです。

「かけはし」から1分毎に収集したデータをCSV形式で格納するPC用ソフトをVB .NETで作成しました。
(1)「かけはし」からのデータ収集方法概要
 温度センサー、土壌センサーはXBee WiFi内のA/Dコンバータに接続されており、XBee WiFiのA/Dコンバータ値を読み出すことにより、温度センサー、土壌センサーの値を読み出すことができる。値を読み出すにはXBee WiFiにコマンドパケットを送ると、XBeeよりコマンドの返答が返ってくる。

 XBee WiFiには"XBee IP Services"があり、その中にXBee WiFiの設定などを行うための"Xbee Application Service"がある。A/Dコンバータのセンサ値を読み出すためにはAT Commandを発行する必要があるが、"Xbee Application Service"の一つにXBee WifiにAT Commandを発行する"API Frames"があり、そのフレームを使用し、コマンド発行する。(詳細は*XBee WiFi User Manual 4章XBee IP Servicesを参照)

 XBee WiFiにはIPアドレスが割り振られているため、データ収集ソフトウェアとしてはWiFiを意識することはなく、XBee WiFiに割り当てたIPアドレスに対してUDP IPの通信をすることになる。

  * XBee WiFi User Manual: http://www.digi.comから"Products"→"Embedded Solutions"→"RF Modules"→"XBee RF Modules"→"XBee WiFi RF Modules"→"XBee WiFi"を選択し"User Manual: XBee S6B Wi-Fi RF Module"(英文)をダウンロード

 (2)データ収集パケット内容
 ・XBee WiFiに割り当てたIPアドレスPort 番号3054(0xBEE)にUDP/IPのパケット送信すると、そのIPアドレスのPort番号3054(xBEE)から結果のパケットが返される。
 ・A/Dコンバータのセンサ値を読み出すためにAT Commandを発行する以下のパケットを送信する。(詳細はUser Manual 4章XBee IP Servicesの"Sending Configuration Commands"の表参照)

   送信データ: 42h 42h 00h 00h 00h 00h 02h 00 01h 02h +"IS"
     上記フィールドの説明
                 Offset                値        説明
                 ------------------------------------------------------------------------------------------
      Offset0-1:      4242h    Number1
      Offset2-3:      0000h    Number2 (Number1 ^ Number2 = 0x4242)
      Offset4:              00h    Packet ID  (Reserved for later use)
      Offset5:              00h    Encryption Pad  (Reserved for later use)
                 Offset6:              02h    Command ID (Indicates Remote AT Command)
                 Offset7:              00h    Command Options
                    (Options are not available for this command)
                 Offset8:              01h    Frame ID
                 Offset9:              02h    Configuration options
                    (2 - Apply changes to all changed commands)
                 Offset10-11: 4953h("IS")  AT Command

  AT Command "IS": Force Sample
                                       Forces a read of all enabled digital and analog input lines.
                                       If no lines are enabled for digital or analog input, an error
                                       is returned.

   返り値
     Offset16-17: A/Dコンバータ#1の値。「かけはし」の場合、LM35DZが接続されており、温度値が読める。

     温度計算式
        <温度[℃]> = <デジタル読み値(0~1023)> ÷ 1023 x 1.25[V](Vref) ÷ 0.01 [V/℃]( +10[mV/℃])

     Offset18-19: A/Dコンバータ#2の値。「かけはし」の場合土壌センサ#1の値。
     Offset20-21: A/Dコンバータ#3の値。「かけはし」の場合土壌センサ#2の値。

 ・XBee WiFi内の温度も読み出すことができる。土壌センサとしては不要であるが、XBee WiFiの動作環境(動作温度が高すぎないか)のチェックをするために読み出しておく。(XBeeの動作温度仕様は-30℃~85℃)

   送信データ: 42h 42h 00h 00h 00h 00h 02h 00 01h 02h +"TP"
     上記フィールドの説明
                 Offset                値        説明
                 ------------------------------------------------------------------------------------------
      Offset0-1:      4242h    Number1
      Offset2-3:      0000h    Number2 (Number1 ^ Number2 = 0x4242)
      Offset4:              00h    Packet ID  (Reserved for later use)
      Offset5:              00h    Encryption Pad  (Reserved for later use)
                 Offset6:              02h    Command ID (Indicates Remote AT Command)
                 Offset7:              00h    Command Options
                    (Options are not available for this command)
                 Offset8:              01h    Frame ID
                 Offset9:              02h    Configuration options
                    (2 - Apply changes to all changed commands)
                 Offset10-11: 5450h("TP")  AT Command

                   AT Command "TP": Temperature
                                                       Read temperature of module in degrees Celsius.

   返り値
     Offset12-13: XBee WiFi内温度[℃]

(3)VB .NETによるUDP/IPパケット送受信方法
 ・ローカルポート番号localPortにバインドする
       Dim localPort As Integer = 3054
    Dim udp As New System.Net.Sockets.UdpClient(localPort)
    <UDP送受信>
       udp.Close()

 ・データを送信する
  udp.Send(sendBytes, sendBytes.Length, remoteHost, remotePort)

 ・データを受信する
     ' UDP同期受信タイムアウト時間を[ms]で指定(0.5秒)
     udp.Client.ReceiveTimeout = 500 

  remoteEP = Nothing
      rcvBytes = udp.Receive(remoteEP)

  XBee WiFiとはUDP/IPで通信する。また、プログラムが容易なUDP同期通信を選択した。
  UDP/IPはパケット消失しても再送しないため、XBee応答がなくて受信を待ち続けることが発生した。これを避けるために返答がなかった場合に同期受信タイムアウトを発生させて処理をスキップし、次回の送受信できるようにした。「かけはし」の温度データや土壌湿度データの変化は緩やかなので1回分のデータがなくても問題ないためリトライまではせずにスキップするのみとした。
このUDP同期受信のタイムアウト処理をするために、タイムアウト時間の設定とTry文、例外処理を用意しておく。
    Try
     <UDP送信/受信>
         Catch ex As Exception
                    'タイムアウトになったら処理をスキップするのみなので何もしない。
                End Try

(4)作成した「かけはし」からのデータ収集プログラム
 上記UDP/IPパケットを送受信し、温度、土壌湿度を1分毎に採取し、採取時間を付加し、CSV形式で出力するデータ収集プログラムを作成した。

トラックバック(0)

このブログ記事を参照しているブログ一覧: 土壌湿度センサー「かけはし」のデータ収集ソフト

このブログ記事に対するトラックバックURL: http://osamaru.egoism.jp/mt/mt-tb.cgi/170

コメントする

ウェブページ

Powered by Movable Type 4.1

このブログ記事について

このページは、おさ。が2015年5月 5日 11:40に書いたブログ記事です。

ひとつ前のブログ記事は「土壌湿度センサー「かけはし」のハードウェア」です。

次のブログ記事は「土壌センサー「かけはし」の防水対策」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。