(57)【要約】    【構成】  ワイヤレス・センサ・ネットワーク・システム１０はＰＣ１２を含み、ＰＣ１２はコーディネータ１４と接続される。コーディネータ１４には、複数のルータ１６を介して複数のエンド・デバイス１８が接続される。各エンド・デバイス１８には、赤外線センサとしての受光モジュール（６０）が接続される。エンド・デバイス１８は、スリープ機能を有し、電池によって駆動される。エンド・デバイス１８は、スリープするとき、次回起動予定時刻を知らせるＧＴＢコマンドをＰＣ１２に送信し、また、スリープの状態から起動したとき、起動したことと次回スリープ予定時刻とを知らせるＩＡＡコマンドをＰＣ１２に送信する。したがって、ＰＣ１２はエンド・デバイス１８が起動中かどうかを知る。    【効果】  ＰＣはエンド・デバイスの起動中にデータやコマンドを送信すれば良いので、エンド・デバイスの電池消耗を最低限に抑えて、確実に通信できる。【選択図】  図１
2009055301.tif 000002
【特許請求の範囲】
【請求項１】
スリープ機能およびレジューム機能を有する１または複数のエンド・デバイス、
前記エンド・デバイスと直接またはルータを介して接続される１のコーディネータ、および
前記コーディネータと通信可能に接続されるコンピュータを備える、ワイヤレス・センサ・ネットワーク・システムにおいて、
前記エンド・デバイスは、
前記スリープ機能によってスリープするとき、次回起動予定時刻を前記コンピュータに通知する起動予定通知手段を備え、
前記コンピュータは、
前記起動予定通知手段によって通知された次回起動予定時刻を受信して記憶する予定時刻記憶手段、
前記エンド・デバイスに送信するデータやコマンドが有るとき、少なくとも前記次回起動予定時刻に基づいて、当該エンド・デバイスがスリープ中かどうかを判別するスリープ判別手段、および
前記スリープ判別手段によってスリープ中でないことが判別されたとき、前記エンド・デバイスにデータやコマンドを送信する送信手段を備えることを特徴とする、ワイヤレス・センサ・ネットワーク・システム。
【請求項２】
前記エンド・デバイスは、起動したことおよび次回スリープ予定時刻を含む起動中情報を前記コンピュータに通知する起動中通知手段をさらに備え、
前記コンピュータは、前記起動中通知手段によって通知された起動中情報を受信する起動中情報受信手段をさらに備え、
前記スリープ判別手段は、前記次回起動予定時刻と前記起動中情報とに基づいて、前記エンド・デバイスがスリープ中かどうかを判別する、請求項１記載のワイヤレス・センサ・ネットワーク・システム。
【請求項３】
前記エンド・デバイスは、センサ入力を検出するセンサ入力検出手段、および当該エンド・デバイスのスリープ中に前記センサ入力検出手段によってセンサ入力が検出されたとき当該エンド・デバイスを起動させる起動手段をさらに備え、
前記起動中通知手段は、前記起動手段によって当該エンド・デバイスが起動されたとき、前記起動中情報を前記コンピュータに通知する、請求項２記載のワイヤレス・センサ・ネットワーク・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はワイヤレス・センサ・ネットワーク・システムに関し、特にたとえば、ＺｉｇＢｅｅ（登録商標）モジュールを備えるノードを有する、ワイヤレス・センサ・ネットワーク・システムに関する。
【背景技術】
【０００２】
従来のこの種のワイヤレス・センサ・ネットワーク・システムの一例が、非特許文献１に開示されている。この非特許文献１に開示されるＺｉｇＢｅｅは、アドホックなワイヤレス・センサ・ネットワークの構成を目的として、IEEE 802.15.4をベースとし、ＺｉｇＢｅｅアライアンスによって規格化されたシステムである。たとえば、ＺｉｇＢｅｅは、１のＺｉｇＢｅｅコーディネータが、直接またはＺｉｇＢｅｅルータを介して、１または複数のＺｉｇＢｅｅエンド・デバイスに接続された、ツリー構造やスター構造のネットワークである。また、ＺｉｇＢｅｅコーディネータには、ＰＣがシリアルに接続されている。
【非特許文献１】実践入門ネットワーク  ＺｉｇＢｅｅ開発ハンドブック  鄭立著  リックテレコム
【発明の開示】
【発明が解決しようとする課題】
【０００３】
このような非特許文献１に開示されるワイヤレス・センサ・ネットワーク・システムは、或る建物内に設置され、センサ入力に基づいたサービスが提供される。ＺｉｇＢｅｅエンド・デバイスは、スリープ機能およびレジューム機能を備え、スリープすることにより、間欠的に動作し、電力の消費をできるだけ少なくしている。しかし、スリープ管理については、ＺｉｇＢｅｅの規格で定められておらず、ユーザのアプリケーションに任されている。このため、たとえば、ＺｉｇＢｅｅエンド・デバイスのスリープ中に、ＰＣから当該ＺｉｇＢｅｅエンド・デバイスにデータやコマンドが送信されると、そのデータやコマンドを受信することができず、消失してしまうこともある。これを防止するために、ＺｉｇＢｅｅエンド・デバイスのスリープ期間を短くして、ＰＣからのデータやコマンドを受信する機会を増やすと、消費電力が増大し、電池の寿命を短くしてしまうという問題がある。
【０００４】
それゆえに、この発明の主たる目的は、新規な、ワイヤレス・センサ・ネットワーク・システムを提供することである。
【０００５】
この発明の他の目的は、消費電力を増加させることなく、確実に通信することができる、ワイヤレス・センサ・ネットワーク・システムを提供することである。
【課題を解決するための手段】
【０００６】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施の形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【０００７】
第１の発明は、スリープ機能およびレジューム機能を有する１または複数のエンド・デバイス、エンド・デバイスと直接またはルータを介して接続される１のコーディネータ、およびコーディネータと通信可能に接続されるコンピュータを備える、ワイヤレス・センサ・ネットワーク・システムにおいて、エンド・デバイスは、スリープ機能によってスリープするとき、次回起動予定時刻をコンピュータに通知する起動予定通知手段を備え、コンピュータは、起動予定通知手段によって通知された次回起動予定時刻を受信して記憶する予定時刻記憶手段、エンド・デバイスに送信するデータやコマンドが有るとき、少なくとも次回起動予定時刻に基づいて、当該エンド・デバイスがスリープ中かどうかを判別するスリープ判別手段、およびスリープ判別手段によってスリープ中でないことが判別されたとき、エンド・デバイスにデータやコマンドを送信する送信手段を備えることを特徴とする、ワイヤレス・センサ・ネットワーク・システムである。
【０００８】
第１の発明では、ワイヤレス・センサ・ネットワーク・システム（１０）は、１または複数のエンド・デバイス（１８）、コーディネータ（１４）を含み、エンド・デバイスとコーディネータとは直接、または１または複数のルータ（１６）を介して通信可能に接続される。コーディネータにはコンピュータ（１２）が接続され、コーディネータはゲートウェイとして機能する。エンド・デバイスは、スリープ機能およびレジューム機能を有し、エンド・デバイスの起動予定通知手段（５０ａ，Ｓ１７，Ｓ５１，Ｓ９７）は、スリープ機能によってスリープするとき、次回起動予定時刻をコンピュータに通知する。一方、コンピュータでは、予定時刻記憶手段（Ｓ１４９，Ｓ１５１）が、エンド・デバイスから通知された次回起動予定時刻を受信して記憶する。したがって、コンピュータでは、スリープ判別手段（Ｓ１２３）は、エンド・デバイスに送信するデータやコマンドが有るとき（Ｓ１２１で“ＹＥＳ”）、少なくとも次回起動予定時刻に基づいて、当該エンド・デバイスがスリープ中であるかどうかを判別する。送信手段（Ｓ１２５）は、エンド・デバイスがスリープ中でないことが判別されたとき（Ｓ１２３で“ＮＯ”）、当該エンド・デバイスにデータやコマンドを送信する。
【０００９】
第１の発明によれば、エンド・デバイスは、スリープするとき、次回起動予定時刻をコンピュータに知らせるので、コンピュータはエンド・デバイスが起動しているときにデータやコマンドを送信することができる。つまり、スリープしならが間欠的に起動しても、確実に通信することができる。また、頻繁にエンド・デバイスを起動する必要がないので、消費電力を最低限に抑えることができる。
【００１０】
第２の発明は第１の発明に従属し、エンド・デバイスは、起動したことおよび次回スリープ予定時刻を含む起動中情報をコンピュータに通知する起動中通知手段をさらに備え、コンピュータは、起動中通知手段によって通知された起動中情報を受信する起動中情報受信手段をさらに備え、スリープ判別手段は、次回起動予定時刻と起動中情報とに基づいて、エンド・デバイスがスリープ中かどうかを判断する。
【００１１】
第２の発明では、エンド・デバイスでは、起動中通知手段（５０ａ，Ｓ３，Ｓ１３，Ｓ３７，Ｓ８７）が、自身が起動したことおよび次回スリープ予定時刻を含む起動中情報をコンピュータに通知する。ただし、起動中情報は、エンド・デバイスがスリープの状態から起動（復帰）した場合のみならず、エンド・デバイスの電源が投入されることにより起動した場合にも、コンピュータに通知される。一方、コンピュータでは、起動中情報受信手段（Ｓ１２９）が、その起動中情報を受信する。スリープ判別手段は、次回起動予定時刻と起動中情報とに基づいて、エンド・デバイスがスリープ中かどうかを判別する。
【００１２】
第２の発明では、コンピュータはエンド・デバイスが実際に起動しているか否かを知ることができるので、確実にデータやコマンドを送信することができる。
【００１３】
第３の発明は第２の発明に従属し、エンド・デバイスは、センサ入力を検出するセンサ入力検出手段、および当該エンド・デバイスのスリープ中にセンサ入力検出手段によってセンサ入力が検出されたとき当該エンド・デバイスを起動させる起動手段をさらに備え、起動中通知手段は、起動手段によって当該エンド・デバイスが起動されたとき、起動中情報をコンピュータに通知する。
【００１４】
第３の発明では、エンド・デバイスでは、センサ入力検出手段（Ｓ４１）がセンサ入力を検出する。起動手段（Ｓ７１，Ｓ８１，Ｓ８３）は、エンド・デバイスのスリープ中に、センサ入力が検出されると（Ｓ４１で“ＹＥＳ”）、当該エンド・デバイスを起動する。つまり、センサ入力をトリガとして、エンド・デバイスは目覚める。このとき、起動中通知手段は、起動中情報をコンピュータに通知する。
【００１５】
第３の発明によれば、エンド・デバイスがスリープ中であってもセンサ入力があると、これを起動するので、このとき、エンド・デバイスからセンサデータを送信することができるし、起動中では、コンピュータからデータやコマンドを送信することもできる。
【発明の効果】
【００１６】
この発明によれば、エンド・デバイスの次回起動予定時刻をコンピュータに知らせるので、エンド・デバイスがスリープしながら間欠的に駆動する場合であっても、コンピュータはエンド・デバイスの起動中にのみデータやコマンドを送信することができる。つまり、エンド・デバイスの消費電力を増加させることなく、確実に通信することができる。このため、エンド・デバイスをバッテリ駆動しても、比較的長期間の駆動が可能である。
【００１７】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【発明を実施するための最良の形態】
【００１８】
図１を参照して、この発明の一実施例であるワイヤレス・センサ・ネットワーク・システム（以下、単に「システム」という。）１０は、汎用のコンピュータであるＰＣ１２を含み、ＰＣ１２にはＲＣ２３２Ｃを介してシリアルにＺｉｇＢｅｅコーディネータ（以下、単に「コーディネータ」という。）１４が接続される。コーディネータ１４には、複数のＺｉｇＢｅｅルータ（以下、単に「ルータ」という。）１６が接続され、各ルータ１６には、ルータ１６または複数のＺｉｇＢｅｅエンド・デバイス（以下、単に「エンド・デバイス」という。）１８が接続される。ここで、図１の点線枠で示すように、コーディネータ１４、ルータ１６およびエンド・デバイス１８によって構成されるネットワークが、ワイヤレス・センサ・ネットワーク（ＺｉｇＢｅｅ）２０である。
【００１９】
なお、この実施例では、コーディネータ１４に複数のルータ１６を接続するようにしてあるが、ルータ１６は１つでも構わない。また、コーディネータ１４に直接エンド・デバイス１８を接続するようにしても構わない。さらに、ルータ１６には、複数のエンド・デバイス１８を接続するようにしてあるが、エンド・デバイス１８は１つでも構わない。ただし、場合によっては、一部のルータ１６にはエンド・デバイス１８が接続されていないこともある。さらにまた、図１では、コーディネータ１４とエンド・デバイス１８との間に１つまたは２つのルータ１６を設ける例を示してあるが、ルータ１６は３つ以上であっても構わない。
【００２０】
このようなシステム１０は、或る建物内に設置され、センサ（この実施例では、後述する受光モジュール６０）によって検出された検出信号（センサデータ：この実施例では、送信機ＩＤ）をＰＣ１２に送信し、図示は省略するが、ＰＣ１２はこのセンサデータを内部メモリ（ハードディスクやＲＡＭなど）やアクセス可能なデータベースに記憶する。ただし、センサデータを用いて、任意のアプリケーションを実行するようにしてもよい。また、ＰＣ１２は、バッテリ駆動されるエンド・デバイス１８に、電池残量や時刻設定（現在時刻）を問い合わせたり、エンド・デバイス１８の時刻設定を行ったり、エンド・デバイス１８にデータを送ったりする。
【００２１】
ここで、コーディネータ１４やルータ１６は比較的数が少ないため、システム１０を或る建物内に設置する場合には、既存のコンセントから商用電源を供給するようにすればよいが、エンド・デバイス１８は多数存在するため、既存のコンセントからの電源供給は現実的ではない。また、システム１０を設置するために、コンセントを増設することも現実的ではない。このため、図２（Ａ）および図２（Ｂ）に示すように、コーディネータ１４とルータ１６とを商用電源により駆動し、図２（Ｃ）に示すように、エンド・デバイス１８のみをバッテリ（電池）により駆動するようにしてある。
【００２２】
図２（Ａ）は、図１に示したコーディネータ１４の電気的な構成を示すブロック図である。図２（Ａ）に示すように、コーディネータ１４は、ＺｉｇＢｅｅモジュール３２を含み、このＺｉｇＢｅｅモジュール３２には、ＣＰＵコア３２ａが内蔵される。ＺｉｇＢｅｅモジュール３２には、上述したように、ＲＳ２３２Ｃのようなインターフェイスを介してＰＣ１２が接続される。また、コーディネータ１４は、電源回路３４を含み、電源回路３４は図示しないコンセントプラグを壁ソケットに差し込んで得られる商用電源を降圧および整流して生成された直流電圧を、ＺｉｇＢｅｅモジュール３２に与える。
【００２３】
なお、ＺｉｇＢｅｅモジュール３２（後述するＺｉｇＢｅｅモジュール５２も同じ。）としては、株式会社ルネサス製のＺｉｇＢｅｅモジュール「品番：YCSCZB2」を用いることができる。
【００２４】
コーディネータ１４は、ワイヤレス・センサ・ネットワーク（以下、単に「ネットワーク」という。）２０全体を管理し、ＰＣ１２とのゲートウェイとなる。コーディネータ１４は、ＺｉｇＢｅｅモジュール３２を用いた無線通信により、ルータ１６またはエンド・デバイス１８から送信されるデータやコマンドを、インターフェイス（ＲＳ２３２Ｃ）を介してＰＣ１２に送信する。また、コーディネータ１４は、インターフェイスを介してＰＣ１２から送信されるデータやコマンドを、直接、またはルータ１６を介して、エンド・デバイス１８に送信する。
【００２５】
図２（Ｂ）はルータ１６の電気的な構成を示すブロック図である。図面からも分かるように、ルータ１６は、コーディネータ１４とほぼ同じであるため、同じコンポーネントには同じ参照番号を付してある。また、重複した説明は省略するルータ１６では、ＺｉｇＢｅｅモジュール３２が無線通信のみを実行する。
【００２６】
ルータ１６は、主として、通信の中継を行う。具体的には、ルータ１６は、ＺｉｇＢｅｅモジュール３２を用いた無線通信より、配下に接続されたエンド・デバイス１８から送信されるデータやコマンドを上位のルータ１６やコーディネータ１４を介してＰＣ１２に送信する。また、ルータ１６は、コーディネータ１４や上位のルータ１６を介して送信されるＰＣ１２からのデータやコマンドを、自身の配下のエンド・デバイス１８に送信する。
【００２７】
図２（Ｃ）は、エンド・デバイス１８の電気的な構成を示すブロック図である。図２（Ｃ）に示すように、エンド・デバイス１８は、マイコン５０を含み、マイコン５０にはＣＰＵコア５０ａおよびタイマ５０ｂなどのコンポーネントが内蔵される。また、マイコン５０には、ＺｉｇＢｅｅモジュール５２が接続される。ＺｉｇＢｅｅモジュール５２には、ＣＰＵコア５２などのコンポーネントが内蔵される。また、エンド・デバイス１８は電源回路５４を含み、電池（バッテリ）５６からの直流電圧を、ＣＰＵコア５０ａの指示に従って、マイコン５０およびＺｉｇＢｅｅモジュール５２に付与する。このエンド・デバイス１８には、赤外線センサとしての受光モジュール６０が接続される。図示は省略するが、受光モジュール６０は、マイコン５０に接続される。
【００２８】
なお、マイコン５０としては、株式会社ルネサス製のマイクロコンピュータ「品番：R8C/25(R5F21258SNFP)」を用いることができる。
【００２９】
また、この実施例では、エンド・デバイス１８には、赤外線センサを接続するようにしてあるが、これに代えて、または、これと共に、圧力センサ、照度センサや温度センサなどの他のセンサを設けるようにしてもよい。つまり、センサの種類や数は限定される必要はなく、ＰＣ１２側で収集（記憶）ないし、アプリケーションの実行に必要なセンサが使用されるのである。
【００３０】
このようなエンド・デバイス１８では、受光モジュール６０から与えられるセンサデータなどのデータやマイコン５０（ＣＰＵコア５０ａ）によって発生されたコマンドを、直接またはルータ１６を介してコーディネータ１４に送信する。すると、上述したように、コーディネータ１４がそのデータやコマンドをＰＣ１２に送信する。また、エンド・デバイス１８は、コーディネータ１４や上位のルータ１６を介して送信されるＰＣ１２からのデータやコマンドを受信し、データを図示しない通信手段を用いて他の機器に送信したり、コマンドに従う処理を実行したりする。場合によっては、エンド・デバイス１８は、ＰＣ１２からのコマンドに従う処理を実行し、その結果（結果データ）をＰＣ１２に通知する。
【００３１】
たとえば、図示は省略するが、ＰＣ１２やコーディネータ１４は、システム管理室のような場所に設置される。ルータ１６は、たとえば、その或る建物内の各階の任意の場所（たとえば、給湯室やエレベータホール）に設置される。ルータ１６は、各階に１つでも良いし、ルータ１６からエンド・デバイス１８までの距離が遠い場合には、ルータ１６を複数設けるようにしてもよい。エンド・デバイス１８は、図３に示すように、ゲートに設置される。ただし、図３では分かり易く示すために、ゲートを示してあるが、実際には、エンド・デバイス１８は、建物内の各部屋の出入り口、廊下、廊下と廊下との連結部（交差点，Ｔ字路など）、エレベータホール、廊下と階段と連結部のような要所に設置されたり、各部屋内の要所に設置されたりする。
【００３２】
図３に示すように、ゲートの上部には、受光モジュール６０が配置され、上述したように、受光モジュール６０はゲートの上に載置されるエンド・デバイス１８に接続される。一方、被験者の頭部（頭髪）には、送信機７０が装着される。図示は省略するが、送信機７０は、赤外線信号を送信し、これを受光モジュール６０が検出する。ここで、送信機７０から送信される赤外線信号は、たとえば、８ビットの固定のパターン（送信機ＩＤ）である。たとえば、受光モジュール６０は、送信機ＩＤを受信すると、受信した送信機ＩＤをマイコン５０（ＣＰＵコア５０ａ）に与える。ＣＰＵコア５０ａは、送信機ＩＤを受信した受光モジュール６０の受光モジュールＩＤを付加して、図示しないＲＡＭに記憶（一時記憶）し、その後、ＺｉｇＢｅｅモジュール５２を用いてＰＣ１２へ送信する。すると、受光モジュールＩＤの付加された送信機ＩＤ（センサデータ）が、ルータ１６およびコーディネータ１４を介してＰＣ１２に与えられる。
【００３３】
たとえば、センサデータ（受光モジュールＩＤの付加された送信機ＩＤ）に、タイマ５０ｂによって計時された時刻（現在時刻）を付加すると、ＰＣ１２側では、送信機ＩＤに対応する送信機７０を装着した被験者の現在位置または時系列に従った行動パターンを知ることができる。ただし、受光モジュールＩＤに対応して、当該受光モジュールＩＤを有する受光モジュール６０の設置場所を記述したテーブル（場所テーブル）および送信機ＩＤに対応して、当該送信機ＩＤが示す送信機７０を装着した被験者の名称ないし識別情報を記述したテーブル（被験者テーブル）を、図示しない、ＰＣ１２内部のハードディスクやＲＯＭに記憶したり、ＰＣ１２が接続可能なデータベースに記憶したりする必要がある。
【００３４】
したがって、エンド・デバイス１８は、ＰＣ１２にデータ等を送信する場合やＰＣ１２からのデータやコマンドを受信する場合に、起動していれば、その役割を果たすことができる。つまり、常時起動している必要はないため、スリープしながら、間欠的に駆動すればよく、センサ入力があった場合には、割り込み的に起動すればよいと考えられる。しかし、ＰＣ１２は、エンド・デバイス１８の起動しているかどうかを知ることができない。
【００３５】
このため、この実施例では、エンド・デバイス１８は、所定のコマンド（後述するＩＡＡコマンド、ＧＴＢコマンド）をＰＣ１２に送信して、起動しているかどうかをＰＣ１２側で把握（判断）できるようにしてある。これにより、エンド・デバイス１８がスリープしている間に、ＰＣ１２から当該エンド・デバイス１８にデータやコマンドが送信されてしまうのような不都合を事前に回避でき、したがって、ＰＣ１２からエンド・デバイス１８に送信されるデータやコマンドが消失されるのを防止することができる。
【００３６】
このような構成のシステム１０では、ＰＣ１２は、システム１０内のエンド・デバイス１８を、図４に示すようなアドレスマップ１００を用いて管理する。図示は省略するが、アドレスマップ１００は、ＰＣ１２の内部メモリ（ハードディスクやＲＡＭ）に記憶したり、通信可能に接続されるデータベースや外付けの記憶媒体に記憶したりしている。図４に示すように、アドレスマップ１００には、IEEE拡張アドレスに対応して、ショートアドレス、次回起動予定時刻および次回スリープ予定時刻が記述される。IEEE拡張アドレスは、IEEE802.3におけるＭＡＣアドレスと同様に、エンド・デバイス１８固有のアドレスであり、ＺｉｇＢｅｅモジュール５２に割り当てられる。このIEEE拡張アドレスは、８バイトで構成される。また、ショートアドレスは、ネットワーク２０における階層および配置位置を示す２バイトのアドレスであり、ネットワーク２０に接続されると一義的に決定される（割り当てられる）。このショートアドレスを用いて、ＰＣ１２は、データやコマンドを所望のエンド・デバイス１８に送信する。
【００３７】
次回起動予定時刻は、対応するエンド・デバイス１８がスリープしている状態から起動する（目覚める）予定時刻である。この次回起動予定時刻は、エンド・デバイス１８が発行するコマンド（以下、「ＧＴＢコマンド」と呼ぶことにする。）に記述され、これを受信したＰＣ１２が当該エンド・デバイス１８のIEEE拡張アドレスおよびショートアドレスに対応する欄に次回起動予定時刻を記憶（更新）する。次回スリープ予定時刻は、対応するエンド・デバイス１８の電源が投入されることにより起動されたり、レジューム機能によりスリープの状態から起動したりした後に、次にスリープする予定時刻である。この次回スリープ予定時刻もまた、エンド・デバイス１８が発行するコマンド（以下、「ＩＡＡコマンド」と呼ぶことにする。）に記述され、これを受信したＰＣ１２が当該エンド・デバイス１８のIEEE拡張アドレスおよびショートアドレスに対応する欄に次回スリープ予定時刻を記憶（更新）する。
【００３８】
ただし、エンド・デバイス１８が、ネットワーク２０に新規に参加したり、電源を投入したりしたときに、上述したＩＡＡコマンドを送信することにより、当該エンド・デバイス１８のIEEE拡張アドレスおよびショートアドレスがＰＣ１２に通知され、アドレスマップ１００に登録される。
【００３９】
なお、図４では、簡単のため、IEEE拡張アドレスを４つのアルファベット大文字で表わし、ショートアドレスを１つのアルファベット小文字で表わしているが、実際には、IEEE拡張アドレスは、８バイト（１６個）の英数文字で表わされ、ショートアドレスは２バイト（４個）の英数文字で表わされる。また、簡単のため、次回起動予定時刻を、２文字のアルファベットで表わしているが、実際には、時（HH）分(SS)秒（MM）ミリ秒（mmm）が９つの数値で表わされる。同様に、簡単のため、次回スリープ予定時刻を、２文字のアルファベットで表わしているが、実際には、時（HH）分(SS)秒（MM）ミリ秒（mmm）が９つの数値で表わされる。
【００４０】
ここで、ＧＴＢコマンドは、IEEE拡張アドレス、ショートアドレス、現在時刻（HHSSMMmmm）、ＧＴＢ、次回起動予定時刻（HHSSMMmmm）によって構成される。IEEE拡張アドレスおよびショートアドレスは、上述したとおりである。現在時刻は、ＧＴＢコマンドを生成した（スリープに入る）時刻であり、時（HH）分(SS)秒（MM）ミリ秒（mmm）で表わされる。ＧＴＢは、当該ＧＴＢコマンドを示す識別情報である。次回起動予定時刻は、上述したように、スリープの状態から次に起動する予定時刻であり、現在時刻と同様に、時（HH）分(SS)秒（MM）ミリ秒（mmm）で表わされる。たとえば、ＧＴＢコマンドが、「1a3300a2e3334f02 2da6 201644213 GTB 202644213」である場合には、IEEE拡張アドレスが「1a3300a2e3334f02」であり、ショートアドレスが「2da6」である、エンド・デバイス１８が、２０時１６分４４秒２１３ミリ秒にスリープし、１０分後（２０時２６分４４秒２１３ミリ秒）に復帰（起動）する予定であることを示す。
【００４１】
また、エンド・デバイス１８は、スリープの状態から起動したときに、起動したことおよび次にスリープに入る時刻（予定時刻）を示すコマンド（以下、「ＩＡＡコマンド」と呼ぶことにする。）をＰＣ１２に送信する。ただし、上述したように、エンド・デバイス１８がネットワーク２０に新規に参加したり、電源が投入されたりした場合にも、ＩＡＡコマンドがＰＣ１２に送信される。ＩＡＡコマンドは、ＧＴＢコマンドと同様であり、IEEE拡張アドレス、ショートアドレス、現在時刻（HHSSMMmmm）、ＩＡＡ、次回スリープ予定時刻（HHSSMMmmm）によって構成される。IEEE拡張アドレスおよびショートアドレスは、上述したとおりである。現在時刻は、ＩＡＡコマンドを生成した時刻（スリープから起動した時刻）であり、時（HH）分(SS)秒（MM）ミリ秒（mmm）で表わされる。ＩＡＡは、当該ＩＡＡコマンドを示す識別情報である。次回スリープ予定時刻は、上述したように、起動している状態から次にスリープする予定時刻であり、現在時刻と同様に、時（HH）分(SS)秒（MM）ミリ秒（mmm）で表わされる。たとえば、ＩＡＡコマンドが、「1a3300a2e3334f02 2da6 201634213 IAA 201644213」である場合には、IEEE拡張アドレスが「1a3300a2e3334f02」であり、ショートアドレスが「2da6」である、エンド・デバイス１８が、２０時１６分３４秒２１３ミリ秒に目覚めて（起動して）、１０秒後（２０時１６分４４秒２１３ミリ秒）にスリープする予定であることを示す。
【００４２】
ただし、上述したように、エンド・デバイス１８の電源が投入（オフからオン）されることより、マイコン５０およびＺｉｇＢｅｅモジュール５２が起動された場合にも、上述と同様のＩＡＡコマンドがＰＣ１２に送信される。これは、主として、エンド・デバイス１８がネットワーク２０に、新規に参加したことを知らせるためである。
【００４３】
また、エンド・デバイス１８が、ネットワーク２０に参加した当初では、現在時刻が正しく設定されていないため、上記の現在時刻には、「999999999」が記述される。また、この実施例では、通常、スリープの状態から起動して次にスリープするまでの時間は一定時間に設定され、また、後述するように、次回スリープ予定時刻は現在時刻の設定に従って補正されるため、ここでは、当該一定時間に相当する時間が次回スリープ予定時刻として記述される。
【００４４】
たとえば、一定時間が１分であるとすると、スリープ予定時刻には、「000100000」が記述される。その後、ＰＣ１２からの指示（時刻同期メッセージ）に従って、エンド・デバイス１８の現在時刻が設定されると、これに従って次回スリープ予定時刻が補正され、現在時刻および次回スリープ予定時刻の補正されたＩＡＡコマンドがＰＣ１２に再度送信（再送信）される。電源が投入されたエンド・デバイス１８では、最初にＩＡＡコマンドをＰＣ１２に送信してから、ＰＣ１２からの時刻同期メッセージ（ＴＳＥＴコマンド）を受信するまでの時間（調整時間）をカウントしており、ＴＳＥＴコマンドに従って現在時刻を設定したときに、上述の一定時間から調整時間を引いた時間を現在時刻に加算することにより、次回スリープ予定時刻を補正する。
【００４５】
たとえば、図５に示すように、エンド・デバイス１８のマイコン５０は、センサ入力が無い状態では、スリープしながら一定の時間間隔Ｔ１で起動し、ＰＣ１２からのデータやコマンドの有無を検出する。ＰＣ１２からのデータやコマンドが有れば、エンド・デバイス１８のＺｉｇＢｅｅモジュール５２が、それを受信して、マイコン５０が所定の処理を実行する。ただし、ＺｉｇＢｅｅモジュール５２がＰＣ１２からのデータやコマンドを受信したときに、マイコン５０のみがスリープ中であれば、ＺｉｇＢｅｅモジュール５２がマイコン５０を起動する。
【００４６】
また、起動時には、マイコン５０（ＣＰＵコア５０ａ）は、上述したようなＩＡＡコマンドを発生（生成）し、これをＰＣ１２に送信する。ただし、エンド・デバイス１８の電源が投入された当初では、マイコン５０（ＣＰＵコア５０ａ）が起動し、ＣＰＵコア５０ａの指示に従ってＺｉｇＢｅｅモジュール５２（ＣＰＵコア５２ａ）が起動した後に、ＩＡＡコマンドがＰＣ１２に送信される。ＰＣ１２では、ＩＡＡコマンドの現在時刻に「999999999」が記述されていることと、ＩＡＡコマンドに含まれるIEEE拡張アドレスがアドレスマップ１００に記述されていないこと、或いは、予定動作時刻との矛盾により、電源が投入されたり、新規に参加したりしたエンド・デバイス１８であることが分かる。したがって、ＰＣ１２はＴＳＥＴコマンドを、ＩＡＡコマンドを送信してきたエンド・デバイス１８に送信する。これによって、上述したように、エンド・デバイス１８の現在時刻が設定され、ＰＣ１２とエンド・デバイス１８との時刻同期が計られる。
【００４７】
さらに、次回スリープ予定時刻になると、マイコン５０（ＣＰＵコア５０ａ）は、上述したようなＧＴＢコマンドを生成し、これをＰＣ１２に送信して、スリープする。このとき、ＺｉｇＢｅｅモジュール５２もスリープする。たとえば、図５に示すＧＴＢコマンド（１）では、現在時刻に時間間隔Ｔ１を加算した時刻ｔ１が次回起動予定時刻として記述される。同様に、図５に示すＧＴＢコマンド（２）では、現在時刻に時間間隔Ｔ１を加算した時刻ｔ２が次回起動予定時刻として記述される。
【００４８】
ただし、スリープ中であっても、センサ入力があると、これをトリガとして、マイコン５０は起動され、マイコン５０はＺｉｇＢｅｅモジュール５２を起動し、そして、センサ入力（センサデータ）をＰＣ１２に送信する。この場合、マイコン５０（ＣＰＵコア５０ａ）は、ＩＡＡコマンドを送信した後に、センサデータを送信する。そして、センサデータの送信を完了し、次回スリープ予定時刻になると、ＧＴＢコマンドをＰＣ１２に送信して、スリープする。図５に示すように、ＧＴＢコマンド（３）では、現在時刻に時間間隔Ｔ１を加算した時刻ｔ３が次回起動予定時刻として記述される。このため、ＰＣ１２では、アドレスマップ１００において、当該エンド・デバイスの次回起動予定時刻がｔ２からｔ３に更新される。
【００４９】
なお、センサ入力によってエンド・デバイス１８がスリープから起動されたときに、ＰＣ１２にセンサデータを送信するようにしてあるが、この後、エンド・デバイス１８（マイコン５０）がスリープするまでの間に、ＰＣ１２から当該エンド・デバイス１８にデータやコマンドを送信することも可能である。
【００５０】
具体的には、エンド・デバイス１８は、図６に示す電源投入時の処理、図７および図８に示すレジューム・スリープ処理、図９に示すマイコン５０のみがスリープ中のときのセンサ入力処理、および図１０に示すマイコン５０およびＺｉｇＢｅｅモジュール５２がスリープ中のときのセンサ入力処理を実行する。一方、ＰＣ１２は、図１１および図１３に示す全体処理を実行する。
【００５１】
図６に示すように、エンド・デバイス１８は、電源が投入されると、電源投入時の処理を開始し、ステップＳ１で、接続待ちかどうかを判断する。ここでは、マイコン５０（ＣＰＵコア５０ａ）がＺｉｇＢｅｅモジュール５２の接続を待機しているのである。
【００５２】
ステップＳ１で“ＹＥＳ”であれば、つまりＺｉｇＢｅｅモジュール５２の接続を待機している場合には、そのまま同じステップＳ１に戻る。一方、ステップＳ１で“ＮＯ”であれば、つまりＺｉｇＢｅｅモジュール５２の接続があれば、ステップＳ３で、ＩＡＡコマンドをＰＣ１２に送信する。
【００５３】
続いて、ステップＳ５では、時刻同期メッセージを受信したかどうかを判断する。つまり、ＰＣ１２から送信されたＴＳＥＴコマンドを受信したかどうかを判断する。ステップＳ５で“ＮＯ”であれば、つまり時刻同期メッセージを受信していなければ、同じステップＳ５に戻って、時刻同期メッセージの受信を待機する。一方、ステップＳ５で“ＹＥＳ”であれば、つまり時刻同期メッセージを受信すれば、ステップＳ７で、時刻を設定する。ここでは、ＣＰＵコア５０ａは、タイマ５０ｂの計時する時刻を、時刻同期メッセージが示す時刻に設定する。次いで、ステップＳ９で、次回スリープ予定時刻を補正する。そして、ステップＳ１１で、ＡＣＫをＰＣ１２に送信し、ステップＳ１３で、現在時刻および次回スリープ予定時刻の補正されたＩＡＡコマンドを送信（再送信）する。
【００５４】
次のステップＳ１５では、次回スリープ予定時刻になったかどうかを判断する。つまり、ＣＰＵコア５０ａは、タイマ５０ｂが計時する時刻が、ステップＳ１３において再送信したＩＡＡコマンドに記述された次回スリープ予定時刻になったかどうかを判断する。ステップＳ１５で“ＮＯ”であれば、つまり次回スリープ予定時刻になっていなければ、そのまま同じステップＳ１５に戻って、次回スリープ予定時刻になるのを待機する。一方、ステップＳ１５で“ＹＥＳ”であれば、つまり次回スリープ予定時刻になれば、ステップＳ１７で、ＧＴＢコマンドをＰＣ１２に送信し、ステップＳ１７で、マイコン５０とＺｉｇＢｅｅモジュール５２とをスリープして、電源投入時の処理を終了する。
【００５５】
ただし、ステップＳ１９では、マイコン５０内のコンポーネントのうち、タイマ５０ｂ以外のコンポーネント（ＣＰＵコア５０ａを含む。）がスリープされる。したがって、ＣＰＵコア５０ａは、タイマ５０ｂやセンサ（受光モジュール６０）からのトリガに応じて起動し、これによって、マイコン５０も起動する。また、ステップＳ１９では、ＺｉｇＢｅｅモジュール５２内の全てのコンポーネント（ＣＰＵコア５２ａを含む。）がスリープされる。ＣＰＵコア５２ａは、マイコン５０のＣＰＵコア５０ａから起動の指示があったときに起動し、これによって、ＺｉｇＢｅｅモジュール５２も起動する。以下、マイコン５０やＺｉｇＢｅｅモジュール５２がスリープする場合およびスリープの状態から起動する場合において同じであるため、その都度の詳細な説明は省略する。ただし、マイコン５０は、ＺｉｇＢｅｅモジュール５２によって起動される場合もある。
【００５６】
図７および図８は、エンド・デバイス１８のレジューム・スリープ処理のフロー図である。このレジューム・スリープ処理は、主として、マイコン５０ａによって実行され、マイコン５０（ＣＰＵコア５０ａ）がスリープし、ＺｉｇＢｅｅモジュール５２（ＣＰＵコア５２ａ）のみが起動している場合の一部の処理についてはＣＰＵコア５２ａによって実行される。また、このレジューム・スリープ処理は、上述した電源投入時の処理が終了した後に実行される。
【００５７】
図７に示すように、レジューム・スリープ処理が開始されると、ステップＳ３１で、タイマ５０ｂによりマイコン５０（ＣＰＵコア５０ａ）を起動する。つまり、タイマ５０ｂが計時している時刻が次回起動予定時刻になると、タイマ５０ｂからのトリガにより、ＣＰＵコア５０ａが起動される。続くステップＳ３３では、マイコン５０がＺｉｇＢｅｅモジュール５２を起動する。つまり、ＣＰＵコア５０ａがＣＰＵコア５２ａに起動を指示する。
【００５８】
続いて、ステップＳ３５では、接続待ちかどうかを判断する。ここでは、マイコン５０は、ＺｉｇＢｅｅモジュール５２の接続を待機しているのである。ステップＳ３５で“ＹＥＳ”であれば、つまりＺｉｇＢｅｅモジュール５２の接続を待機している場合には、そのまま同じステップＳ３５に戻って、ＺｉｇＢｅｅモジュール５２の接続を待機する。一方、ステップＳ３５で“ＮＯ”であれば、つまりＺｉｇＢｅｅモジュール５２の接続がある場合には、ステップＳ３７で、ＩＡＡコマンドをＰＣ１２に送信し、ステップＳ３９で、マイコン５０をスリープさせる。
【００５９】
続いて，ステップＳ４１では、センサ入力があるかどうかを判断する。つまり、センサ入力により、マイコン５０（ＣＰＵコア５０ａ）に起動のトリガが与えられたかどうかを判断する。ステップＳ４１で“ＮＯ”であれば、つまりセンサ入力が無ければ、そのまま図８に示すステップＳ４７に進む。一方、ステップＳ４１で“ＹＥＳ”であれば、つまりセンサ入力があれば、後述するスリープ時のセンサ入力処理（図９参照）を実行し、ステップＳ４５で、マイコン５０をスリープさせて、ステップＳ４１に戻る。
【００６０】
図８に示すように、ステップＳ４７では、次回スリープ予定時刻であるかどうかを判断する。つまり、タイマ５０ｂが計時する時刻が次回スリープ予定時刻となり、タイマ５０ｂからのトリガにより、マイコン５０の起動が指示されたかどうかを判断する。ステップＳ４７で“ＹＥＳ”であれば、つまり次回スリープ予定時刻であれば、ステップＳ４９で、タイマ５０ｂからのトリガにより、マイコン５０（ＣＰＵコア５０ａ）を起動し、ステップＳ５１で、ＣＰＵコア５０ａはＧＴＢコマンドをＰＣ１２に送信し、ステップＳ５３で、マイコン５０とＺｉｇＢｅｅモジュール５２とをスリープさせて、レジューム・スリープ処理を終了する。
【００６１】
また、ステップＳ４７で“ＮＯ”であれば、つまり次回スリープ予定時刻でなければ、ステップＳ５５で、ＺｉｇＢｅｅモジュール５２（ＣＰＵコア５２ａ）が、ＰＣ１２からのデータやコマンドを受信したかどうかを判断する。ステップＳ５５で“ＮＯ”であれば、つまりＰＣ１２からのデータやコマンドを受信していなければ、そのまま図７に示したステップＳ４１に戻る。一方、ステップＳ５５で“ＹＥＳ”であれば、つまりＰＣ１２からのデータやコマンドを受信すれば、ステップＳ５７で、ＺｉｇＢｅｅモジュール５２（ＣＰＵコア５２ａ）がマイコン５０を起動する。その後、ステップＳ５９では、マイコン５０（ＣＰＵコア５０ａ）がＰＣ１２からのデータやコマンドに従った処理を実行し、ステップＳ６１で、マイコン５０をスリープさせて、ステップＳ４１に戻る。
【００６２】
なお、詳細な説明は省略するが、ステップＳ５９では、ＰＣ１２からの問い合わせコマンドに応じて、タイマ５０ｂが計時する現在時刻や電池５８の残量をＰＣ１２に知らせたり、ＰＣ１２からの時刻設定の指示コマンドに応じて、タイマ５０ｂが計時する時刻をリセットしたり、ＰＣ１２からのデータやコマンドなどを図示しない通信手段を用いて他の電子機器に送信したりする。
【００６３】
図９は、図７に示したステップＳ４３のスリープ時のセンサ入力処理を示すフロー図である。このセンサ入力処理は、マイコン５０のみがスリープし、ＺｉｇＢｅｅモジュール５２が起動している場合に実行される。図９に示すように、スリープ時のセンサ入力処理が開始されると、ステップＳ７１で、マイコン５０を起動する。つまり、センサ入力をトリガとして、マイコン５０が起動される。続くステップＳ７３では、マイコン５０（ＣＰＵコア５０ａ）は、ＺｉｇＢｅｅモジュール５０（ＣＰＵコア５２ａ）を指示して、センサデータをＰＣ１２に送信する。そして、ステップＳ７５では、マイコン５０（ＣＰＵコア５０ａ）は、センサデータの送信を完了したかどうかを判断する。ステップＳ７５で“ＮＯ”であれば、つまりセンサデータの送信を完了していなければ、ステップＳ７５に戻って、センサデータの送信を継続する。一方、ステップＳ７５で“ＹＥＳ”であれば、つまりセンサデータの送信を完了すれば、ステップＳ７７で、センサ入力があるかどうかを判断する。ここでは、マイコン５０（ＣＰＵ５０ａ）は、さらにセンサ入力があるかどうかを判断しているのである。ステップＳ７７で“ＹＥＳ”であれば、つまりセンサ入力が有れば、ステップＳ７３に戻って、センサデータを送信する。一方、ステップＳ７７で“ＮＯ”であれば、つまりセンサ入力が無ければ、そのままレジューム・スリープ処理にリターンする。
【００６４】
図１０は、上述のステップＳ１９またはＳ５３或いは後述するＳ９９の処理によって、マイコン５０とＺｉｇＢｅｅモジュール５２との両方がスリープした場合におけるセンサ入力処理を示すフロー図である。図１０に示すように、スリープ時のセンサ入力処理を開始すると、ステップＳ８１で、センサ入力をトリガとして、マイコン５０が起動される。続く、ステップＳ８３では、マイコン５０がＺｉｇＢｅｅモジュール５２を起動する。そして、ステップＳ８５では、ＺｉｇＢｅｅモジュール５２の接続待ちかどうかを判断する。
【００６５】
ステップＳ８５で“ＹＥＳ”であれば、つまりＺｉｇＢｅｅモジュール５２の接続待ちであれば、そのまま同じステップＳ８５に戻って、ＺｉｇＢｅｅモジュール５２の接続を待機する。一方、ステップＳ８５で“ＮＯ”であれば、つまりＺｉｇＢｅｅモジュール５２の接続待ちでなければ、次のステップＳ８７で、ＩＡＡコマンドをＰＣ１２に送信する。次に、マイコン５０（ＣＰＵコア５０ａ）は、ＺｉｇＢｅｅモジュール５２に指示して、センサデータをＰＣ１２に送信する。そして、ステップＳ９１で、ＣＰＵコア５０ａは、センサデータの送信を完了したかどうかを判断する。
【００６６】
ステップＳ９１で“ＮＯ”であれば、つまりセンサデータの送信を完了していなければ、ステップＳ８９に戻って、センサデータの送信を継続する。一方、ステップＳ９１で“ＹＥＳ”であれば、つまりセンサデータの送信を完了すれば、ステップＳ９３で、センサ入力が有るかどうかを判断する。ここで、センサ入力が有れば、ステップＳ９３で“ＹＥＳ”となり、ステップＳ８９に戻って、センサデータをＰＣ１２に送信する。しかし、センサ入力が無ければ、ステップＳ９３で“ＮＯ”となり、次のステップＳ９５で、次回スリープ予定時刻かどうかを判断する。
【００６７】
ステップＳ９５で“ＮＯ”であれば、つまり次回スリープ予定時刻でなければ、ステップＳ９３に戻って、センサ入力の有無を検知する。一方、ステップＳ９５で“ＹＥＳ”であれば、つまり次回スリープ予定時刻であれば、ステップＳ９７で、ＧＴＢコマンドを送信し、ステップＳ９９で、マイコン５０とＺｉｇＢｅｅモジュール５２とをスリープさせて、スリープ時のセンサ入力処理を終了する。
【００６８】
図１１ないし図１３は、ＰＣ１２の全体処理を示すフロー図である。図１１に示すように、ＰＣ１２は、全体処理を開始すると、ステップＳ１２１で、エンド・デバイス１８に対して送信するデータやコマンドが有るかどうかを判断する。ここでは、ＰＣ１２は、バッファ（ＰＣ１２内のＲＡＭ。図示せず。）に、エンド・デバイス１８に送信するデータやコマンドが有るかどうかを判断するのである。ステップＳ１２１で“ＮＯ”であれば、つまりエンド・デバイス１８に対して送信するデータやコマンドが無ければ、そのまま図１２に示すステップＳ１２９に進む。一方、ステップＳ１２１で“ＹＥＳ”であれば、つまりエンド・デバイス１８に送信するデータやコマンドがバッファに有れば、ステップＳ１２３で、送信先のエンド・デバイス１８がスリープ中であるかどうかを断判（判別）する。ここでは、ＰＣ１２は、アドレスマップ１００を参照して、送信先のエンド・デバイス１８のIEEE拡張アドレスに対応して記載された次回起動予定時刻になったか（または経過しているか）どうかを判断する。また、ＰＣ１２は、ＩＡＡコマンドを先に受信している場合には、アドレスマップ１００を参照して、送信先のエンド・デバイス１８（IEEE拡張アドレスおよびショートアドレス）に対応して記述された次回スリープ予定時刻を未だ経過していないかどうかを判断するのである。
【００６９】
ステップＳ１２３で“ＮＯ”であれば、つまり送信先のエンド・デバイス１８が起動中であれば、ステップＳ１２５で、当該送信先のエンド・デバイス１８にデータやコマンドを送信し、ステップＳ１２６で、当該送信先のエンド・デバイス１８からのＡＣＫを受信したかどうかを判断する。ステップＳ１２６で“ＮＯ”であれば、そのまま同じステップＳ１２６に戻って、ＡＣＫの受信を待機する。一方、ステップＳ１２６で“ＹＥＳ”であれば、つまり当該送信先のエンド・デバイス１８からのＡＣＫを受信すれば、ステップＳ１２９に進む。また、ステップＳ１２３で“ＹＥＳ”であれば、つまり送信先のエンド・デバイス１８がスリープ中であれば、ステップＳ１２７で、データやコマンドをバッファに記憶（一時記憶）して、ステップＳ１２９に進む。なお、バッファに一時記憶されたデータやコマンドは、次回送信される。
【００７０】
図１２に示すように、ステップＳ１２９では、エンド・デバイス１８からのＩＡＡコマンドを受信したかどうかを判断する。ステップＳ１２９で“ＮＯ”であれば、つまりＩＡＡコマンドを受信していなければ、図１３に示すステップＳ１４５に進む。一方、ステップＳ１２９で“ＹＥＳ”であれば、つまりＩＡＡコマンドを受信すれば、ステップＳ１３１で、新しいノードまたは電源投入かどうかを判断する。ここでは、ＰＣ１２は、ＩＡＡコマンドに含まれる現在時刻に「999999999」が記述されているかどうか、または、ＩＡＡコマンドに含まれるIEEE拡張アドレスがアドレスマップ１００に登録されているかどうか、或いは予定動作時刻との矛盾があるかどうかにより、エンド・デバイス１８が、ネットワーク２０に新規に参加したり、その電源が投入されたりしたかどうかを判断する。
【００７１】
ステップＳ１３１で“ＮＯ”であれば、つまりＩＡＡコマンドの現在時刻に「999999999」が記述されていなかったり、アドレスマップ１００に既に登録されていたりするエンド・デバイス１８であれば、新しいノードまたは電源投入でないと判断して、ステップＳ１４３で、アドレスマップ１００を更新して、図１１に示したステップＳ１２１に戻る。つまり、ステップＳ１４３では、ＰＣ１２は、アドレスマップ１００において、ＩＡＡコマンドに記述されたIEEE拡張アドレスおよびショートアドレスに対応して記述される次回スリープ予定時刻を、ＩＡＡコマンドに記述された次回スリープ予定時刻に更新する。
【００７２】
一方、ステップＳ１３１で“ＹＥＳ”であれば、つまりＩＡＡコマンドの現在時刻に「999999999」が記述されていたり、IEEE拡張アドレスがアドレスマップ１００に未だ登録されていなかったりするエンド・デバイス１８であれば、新しいノードまたは電源投入であると判断して、ステップＳ１３３で、当該エンド・デバイス１８をアドレスマップ１００に追加する。つまり、ＰＣ１２は、今回ＩＡＡコマンドを送信してきたエンド・デバイス１８のIEEE拡張アドレスおよびショートアドレスを、アドレスマップ１００に追加するとともに、その拡張アドレスおよびショートアドレスに対応してＩＡＡコマンドが示す次回スリープ予定時刻を記述する。
【００７３】
次いで、ステップＳ１３５では、時刻同期メッセージ（ＴＳＥＴコマンド）を、ステップＳ１３３でアドレスマップ１００に追加されたエンド・デバイス１８（のショートアドレス）宛てに送信する。そして、ステップＳ１３７では、そのエンド・デバイス１８からのＡＣＫを受信したかどうかを判断する。次のステップＳ１３９では、通信時間をチェックする。図示は省略するが、ＣＰＵコア５０ａは、時刻同期メッセージを送信してからＡＣＫを受信するまでの時間をカウントしており、これを通信時間としてチェックする。
【００７４】
そして、ステップＳ１４１では、通信時間が規定時間（たとえば、１００ｍｓ）以内であるかどうかを判断する。ステップＳ１４１で“ＮＯ”であれば、つまり通信時間が１００ｍｓ以内でなければ、ステップＳ１３５に戻って、時刻同期メッセージの送信を繰り返す。図示は省略するが、時刻同期メッセージの送信は、規定回数（たとえば、５回）まで実行され、規定回数を超えるとエラーとなり、当該エンド・デバイス１８はネットワーク２０への参加に失敗したものとされる。たとえば、このエンド・デバイス１８のIEEE拡張アドレスとショートアドレスとが、アドレスマップ１００から削除される。一方、ステップＳ１４１で“ＹＥＳ”であれば、つまり通信時間が規定時間内であれば、当該エンド・デバイス１８はネットワーク２０への参加に成功したものとされ、そのままステップＳ１２１に戻る。
【００７５】
図１３に示すように、ステップＳ１４５では、センサデータを受信したかどうかを判断する。ステップＳ１４５で“ＹＥＳ”であれば、つまりセンサデータを受信すれば、ステップＳ１４７で、センサデータをたとえば内部メモリやアクセス可能なデータベースに記憶して、図１１に示したステップＳ１２１に戻る。一方、ステップＳ１４５で“ＮＯ”であれば、つまりセンサデータを受信していなければ、ステップＳ１４９で、ＧＴＢコマンドを受信したかどうかを判断する。
【００７６】
ステップＳ１４９で“ＮＯ”であれば、つまりＧＴＢコマンドを受信していなければ、そのままステップＳ１２１に戻る。一方、ステップＳ１４９で“ＹＥＳ”であれば、つまりＧＴＢコマンドを受信すれば、ステップＳ１５１で、アドレスマップ１００において、当該ＧＴＢコマンドが示すエンド・デバイス１８（IEEE拡張アドレスおよびショートアドレス）に対応する次回起動予定時刻を記憶（更新）して、ステップＳ１２１に戻る。
【００７７】
この実施例によれば、エンド・デバイスからＰＣにＩＡＡコマンドやＧＴＢコマンドを送信するので、ＰＣはエンド・デバイスがスリープ中であるか、起動中であるかを判断することができ、起動中にのみデータやコマンドを送信することできる。つまり、ＰＣはエンド・デバイスのスリープ中にデータやコマンドを送信することがないので、データやコマンドが消失してしまうのを防止することができる。また、ＰＣからエンド・デバイスへの通信は、エンド・デバイスが起動中である場合にのみ実行されるので、エンド・デバイスを頻繁に起動させて、ＰＣからのデータやコマンドの有無をチェックさせる必要がない。つまり、エンド・デバイスでは、頻繁に通信する必要がないため、バッテリの消耗を最低限に抑えることができる。これにより、エンド・デバイスを比較的長時間バッテリ駆動することができる。
【００７８】
なお、この実施例では、一定時間毎にエンド・デバイスを起動するようにスリープ期間（実施例では、時間間隔Ｔ１）を決定するようにしてあるが、当該スリープ期間をＰＣからのコマンドによって可変的に設定できるようにしてもよい。たとえば、会社のような建物内では、夜間において人の出入りはほとんど無く、被験者の現在位置や行動パターンを記録する必要がないと考えられるからである。つまり、時間帯に応じて、適宜スリープ期間を設定変更することが考えられる。
【図面の簡単な説明】
【００７９】
【図１】図１はこの発明のワイヤレス・センサ・ネットワーク・システムの一例を示す図解図である。
【図２】図２は図１に示すコーディネータ、ルータおよびエンド・デバイスの電気的な構成を示すブロック図である。
【図３】図３は図１および図２に示すようなエンド・デバイスの設置状態およびエンド・デバイスに接続されたセンサの検出対象について説明するための図解図である。
【図４】図４は図１に示しＰＣで管理されるエンド・デバイスのアドレスマップを示す図解図である。
【図５】図５はエンド・デバイスからＰＣに送信されるコマンドおよびＰＣからエンド・デバイスに送信されるコマンドの時間変化の一例を示すタイミングチャートである。
【図６】図６はエンド・デバイスの接続処理を示すフロー図である。
【図７】図７はエンド・デバイスのレジューム・スリープ処理の一部を示すフロー図である。
【図８】図８はエンド・デバイスのレジューム・スリープ処理の他の一部であって、図７に後続するフロー図である。
【図９】図９はマイコンのみがスリープしている場合におけるエンド・デバイスのスリープ時のセンサ入力処理を示すフロー図である。
【図１０】図１０はマイコンおよびＺｉｇＢｅｅモジュールがスリープしている場合におけるエンド・デバイスのスリープ時のセンサ入力処理を示すフロー図である。
【図１１】図１１はＰＣの全体処理の一部を示すフロー図である。
【図１２】図１２はＰＣの全体処理の他の一部であって、図１１に後続するフロー図である。
【図１３】図１３はＰＣの全体処理のその他の一部であって、図１１および図１２に後続するフロー図である。
【符号の説明】
【００８０】
１０  …ワイヤレス・センサ・ネットワーク・システム
１２  …ＰＣ
１４  …ＺｉｇＢｅｅコーディネータ
１６  …ＺｉｇＢｅｅルータ
１８  …ＺｉｇＢｅｅエンド・デバイス
２０  …ワイヤレス・センサ・ネットワーク
３２ａ，５０ａ，５２ａ  …ＣＰＵコア
３２，５２  …ＺｉｇＢｅｅモジュール
３４，５４  …電源回路
５０  …マイコン
５０ｂ  …タイマ
５８  …電池
【図１】
2009055301.tif 000003
【図２】
2009055301.tif 000004
【図３】
2009055301.tif 000005
【図４】
2009055301.tif 000006
【図５】
2009055301.tif 000007
【図６】
2009055301.tif 000008
【図７】
2009055301.tif 000009
【図８】
2009055301.tif 000010
【図９】
2009055301.tif 000011
【図１０】
2009055301.tif 000012
【図１１】
2009055301.tif 000013
【図１２】
2009055301.tif 000014
【図１３】
2009055301.tif 000015