Howto

Armadillo-400シリーズでEnOcean Link 試供版を使用する

Armadillo-400 シリーズで、EnOcean Link 試供版のチュートリアル実行する手順を紹介します。

第1章 はじめに
第2章 動作環境の構築

第3章 EnOcean Link


第1章 はじめに

1.1. 対象となる読者

本HowToの対象となる読者は、Linux の基本的な使い方を理解している方を想定しています。また、 開発環境に Windows を利用される場合は、Windows の基本的な使い方も理解していることを前提としています。


第2章 動作環境の構築

本章では、EnOcean製受信用USBモジュールを動作させるために必要となる環境を構築する手順を説明します。

2.1. 準備

作業手順に入る前に、必要なものを準備します。

2.1.1. 必要なもの

必要な機材は以下のとおりです。

表2.1 必要な機材
機材名 数量 備考
Armadillo-400シリーズ 1台 本手順例では、Armadillo-420 を使用しました。
開発用PC 1台 本手順例では、Windows 7 を使用しました。
Armadillo-400シリーズ 開発用DVD-ROM 1枚 本HowTo作成時の最新バージョン v20140131[※1] 使用しました。
EnOcean製
受信用USBモジュール
1台 本手順例では、開発キット EDK 400J 内の USB400J を使用しました。
EnOcean製
スイッチ1[※2]
1台 本手順例では、開発キット EDK 400J 内の PTM210J を使用しました。
EnOcean製
スイッチ2[※2]
1台 本手順例では、開発キット EDK 400J 内の
PTM 430J (スイッチモジュールの電子回路基板) +
ECO 200 (スイッチモジュールの発電素子) を使用しました。
EnOcean製
温度センサ
1台 本手順例では、開発キット EDK 400J 内の 温度センサを使用しました。

※1 アットマークテクノ社ホームページからDVDイメージをダウンロードできます。Armadillo-420であれば、Armadillo-420のドキュメント・ダウンロードページの開発セット添付DVDイメージ(ISOファイル)の項目にあるArmadillo-400シリーズ 開発用DVD-ROMです。なお、必要なデータを個別にダウンロードすることもできます。
※2 スイッチ1と2は手順の説明の便宜上つけたものです。

2.1.2. 開発環境 ATDE3 を起動

本手順では、開発環境にATDE3を使用します。『ATDEインストールガイド』の 第2章「2. Windows 上にATDE を構築する」の通りです。

  • 開発PCにVMware(Workstation、Playerなど)がインストールされていない場合は、インストールする。
  • 開発PCに atde3-20xxxxxx.zip (本手順では、DVD/atde/vmware/atde3-20120709.zip) を展開してコピーします。
  • VMware Player を起動します。
  • [仮想マシンを開く] をクリックして、展開したatde3-20xxxxxx/atde3.vmx (本手順では、atde3-20120709/atde3.vmx) を指定します。
  • [再生] をクリックします。

『ATDEインストールガイド』は Version 3.0.2 2011/10/21 p.8~p.13 を参照してください。

2.1.3. ソースコードを展開

開発環境に Linux カーネルソースコードと Atmark Dist ソースコードを展開します。『Armadillo-400 シリーズソフトウェアマニュアル』の 第7章「ビルド」の手順を参考にしてください。

2.1.3.1. Atmark Dist ソースコードの展開

DVD-ROMから Atmark Dist のソースコードを ATDE3 に展開してコピーします。そして、展開したファイルをバージョンに依存しない atmark-dist という名前でシンボリックリンクを作成します。下図は、実際の実行例です。

[ATDE ~]$ cd ~
[ATDE ~]$ tar -zxf /media/A400_20140131/source/dist/atmark-dist-20131122.tar.gz
[ATDE ~]$ ln -s atmark-dist-20131122 atmark-dist
[ATDE ~]$ ls -l
drwxr-xr-x  2 atmark atmark 4096 2014-02-10 23:58 Desktop
lrwxrwxrwx  1 atmark atmark   20 2014-02-11 01:37 atmark-dist -> atmark-dist-20131122
drwxr-xr-x 14 atmark atmark 4096 2013-11-12 15:18 atmark-dist-20131122

図2.1 Atmark Dist ソースコードの展開

2.1.3.2. Linux カーネルソースコードの展開

DVD-ROM から Linux カーネル のソースコードを ATDE3 に展開してコピーします。atmark-distディレクトリ内に、展開したフォルダ名をバージョンに依存しない linux-2.6.x という名前でシンボリックリンクを作成します。下図は、実際の実行例です。

[ATDE ~]$ cd ~
[ATDE ~]$ tar -zxf /media/A400_20140131/source/kernel/linux-2.6.26-at18.tar.gz
[ATDE ~]$ ls
Desktop  atmark-dist  atmark-dist-20131122  linux-2.6.26-at
[ATDE ~]$ cd atmark-dist
[ATDE ~/atmark-dist]$ ln -s ../linux-2.6.26-at linux-2.6.x
[ATDE ~/atmark-dist]$ ls -l linux-*
lrwxrwxrwx 1 atmark atmark 18 2014-02-11 02:11 linux-2.6.x -> ../linux-2.6.26-at

図2.2 Linux カーネルソースコードの展開

2.1.3.3. デフォルトコンフィギュレーションの適用

デフォルトコンフィギュレーションの設定手順は以下の通りです。

1. デフォルトの設定でコンフィギュレーションを行います。コンフィギュレーションを開始するには、下図のように make config を実行します。

[ATDE ~/atmark-dist]$ make config

図2.3 Atmark Dist デフォルトコンフィギュレーションの開始

2. 次に、ベンダー名を尋ねられます。 AtmarkTechno を指定します。

* Vendor/Product Selection
*
*
* Select the Vendor you wish to target
*
Vendor (3com, ADI, Akizuki, Apple, Arcturus, Arnewsh, AtmarkTechno, Atmel, Avnet, Cirrus,
    …途中省略…
TI, TeleIP, Triscend, Via, Weiss, Xilinx, senTec) [SnapGear] (NEW) AtmarkTechno
  defined CONFIG_DEFAULTS_ATMARKTECHNO

図2.4 Atmark Dist デフォルトコンフィギュレーション1 : ベンダー名の指定

3. 次に、プロダクト名を尋ねられます。Armadillo-420 を指定します。

*
* Select the Product you wish to target
*
AtmarkTechno Products (Armadillo-210.Base, Armadillo-210.Recover, Armadillo-220.
Base, Armadillo-220.Recover, Armadillo-230.Base, Armadillo-230.Recover, Armadill
o-240.Base, Armadillo-240.Recover, Armadillo-300, Armadillo-420, Armadillo-420.W
LAN-AWL12, Armadillo-420.WLAN-AWL13, Armadillo-440, Armadillo-460, Armadillo-500
, Armadillo-500-FX.base, Armadillo-500-FX.dev, Armadillo-810, Armadillo-840, Arm
adillo-9, Armadillo-9.PCMCIA, SUZAKU-V.SZ310, SUZAKU-V.SZ310-SID, SUZAKU-V.SZ310
-SIL, SUZAKU-V.SZ310-SIL-GPIO, SUZAKU-V.SZ410, SUZAKU-V.SZ410-SID, SUZAKU-V.SZ41
0-SIL, SUZAKU-V.SZ410-SIL-GPIO, SUZAKU-V.SZ410-SIV) [Armadillo-210.Base] (NEW) Armadillo-420
  defined CONFIG_DEFAULTS_ATMARKTECHNO_ARMADILLO_420

図2.5 Atmark Dist デフォルトコンフィギュレーション2 : プロダクト名の指定

4. 続いて、ビルド環境を尋ねられます。default を指定します。

*
* Kernel/Library/Defaults Selection
*
*
* Kernel is linux-2.6.x
*
Cross-dev (default, arm-vfp, arm, armel, armhf, armnommu, common, h8300, host, i
386, i960, m68knommu, microblaze, mips, powerpc, sh) [default] (NEW) default
  defined CONFIG_DEFAULTS_CROSSDEV_DEFAULT

図2.6 Atmark Dist デフォルトコンフィギュレーション3 : ビルド環境の指定

5. ビルドする Libc を尋ねられます。None を指定します。これは『Armadillo-400 シリーズ ソフトウェアマニュアル』第7.1.2章「デフォルトコンフィギュレーションの適用」Armadillo-400 シリーズ では None を選択するよう記載があったための設定です。

Libc Version (None, glibc, uC-libc, uClibc) [None] (NEW) None
  defined CONFIG_DEFAULTS_LIBC_NONE

図2.7 Atmark Dist デフォルトコンフィギュレーション4 : ビルドする libc の指定

6. 次に、全ての設定をデフォルトの設定にするかどうか尋ねられます。ここでは肯定を示す y を指定します。

*
* Kernel/Library/Defaults Selection
*
*
* Kernel is linux-2.6.x
*
Cross-dev (default, arm-vfp, arm, armel, armhf, armnommu, common, h8300, host, i
386, i960, m68knommu, microblaze, mips, powerpc, sh) [default] (NEW) default
  defined CONFIG_DEFAULTS_CROSSDEV_DEFAULT
Libc Version (None, glibc, uC-libc, uClibc) [None] (NEW) None
  defined CONFIG_DEFAULTS_LIBC_NONE
Default all settings (lose changes) (CONFIG_DEFAULTS_OVERRIDE) [N/y/?] (NEW) y

図2.8 Atmark Dist デフォルトコンフィギュレーション5 : 全てをデフォルトに指定

7. 最後に、残りの3項目に否定を示す n を指定します。

Customize Kernel Settings (CONFIG_DEFAULTS_KERNEL) [N/y/?] n
Customize Vendor/User Settings (CONFIG_DEFAULTS_VENDOR) [N/y/?] n
Update Default Vendor Settings (CONFIG_DEFAULTS_VENDOR_UPDATE) [N/y/?] n

図2.9 Atmark Dist デフォルトコンフィギュレーション6 : 最後の3項目の指定

8. ここでコンフィギュレーションが行われます。終了するまで待ちます。

2.2. カーネルイメージの準備

本章では カーネルイメージを準備します。デフォルトのカーネルイメージから1点変更が必要です。それは、EnOcean受信用USBモジュールが使用するドライバモジュールがデフォルトの設定では無効になっているため、有効にする必要があります。

2.2.1. menuconfig : USB FTDI Single Port Serial Driver の有効化

1. atmark-distディレクトリで下図のように make menuconfig を実行します。

[ATDE ~]$ cd ~
[ATDE ~]$ cd atmark-dist
[ATDE ~/atmark-dist]$ make menuconfig

図2.10 カーネルイメージのコンフィギュレーションの開始

2. まずは、Linux カーネルコンフィギュレーションを開始させるために、Kernel/Library/Defaults SelectionSelect を選択してから Enter キーを押します。

menuconfig01

図2.11 Atmark Dist コンフィギュレーション1

3. 次に、Customize Kernel Settings を選択して SPACE キー を押して * を付けます。その後に、Exit を選択して Enter キーを押します。

menuconfig02

図2.12 Atmark Dist コンフィギュレーション2

4. さらに、次の画面でも Exit を選択して Enter キーを押すと、次の画面が表示されます。 Yes を選択して Enter キーを押します。

menuconfig03

図2.13 Atmark Dist コンフィギュレーション3

5. いったん端末画面に戻った後、下のような設定画面が表示されます。
ここからが Linux カーネルのコンフィグレーションとなります。まず、Device Drivers  --->Select を選択して Enter キーを押します。

menuconfig11

図2.14 Linux カーネルコンフィギュレーション1

6. 次に、[*] USB support ---> (* が付いていること。付いていなければ Space キーで付けてください。) と Select を選択して Enter キーを押します。

menuconfig12

図2.15 Linux カーネルコンフィギュレーション2

7. さらに、&lt*>   USB Serial Converter support  ---> (* が付いていること。付いていなければ Space キーで付けてください。) と Select を選択して Enter キーを押します。

menuconfig13

図2.16 Linux カーネルコンフィギュレーション3

8. さらに、<*>   USB FTDI Single Port Serial Driver (* が付いていること。付いていなければ Space キーで付けてください。) と Exit を選択して Enter キーを押します。
ここで有効にしたドライバモジュールが EnOcean製受信用USBモジュールで使用されます。

menuconfig14

図2.17 Linux カーネルコンフィギュレーション4

9. その後、Exitを 選択して Enter キーを押すのを 3 回繰り返すと、下図のように新しいカーネルコンフィギュレーションを保存するかを尋ねられます。Yes を選択して Enter キーを押します。

menuconfig15

図2.18 Linux カーネルコンフィギュレーション5

10. ここで Linux カーネルのコンフィギュレーションが行われます。終了するまで待ちます。

2.2.2. ビルド

Atmark Dist 一式をビルドします。一式をビルドするには atmark-dist ディレクトリ内で下図のように、make を実行します。このビルドで Linux カーネルソースコードも一緒にビルドされます。ビルドが終了すると、下図のように (atmark-dist/images) にカーネルイメージと romfs イメージが生成されます。ただし、ここで作成された romfs イメージは使用しません。第2.2.3章で生成される romfs イメージを使用します。

[ATDE ~/atmark-dist]$ make
[ATDE ~/atmark-dist]$ ls images/
linux.bin  linux.bin.gz  romfs.img  romfs.img.gz

図2.19 Atmark Dist 一式のビルド

2.2.3. 標準C++ライブラリを romfs に追加

EnOcean Link は C++ で作成されているので、romfs に標準C++ライブラリを追加します。

[ATDE ~]$ cd ~
[ATDE ~]$ cd /usr/arm-linux-gnueabi/
[ATDE /usr/arm-linux-gnueabi]$ cp -av `find . -name "libstdc++*"` $HOME/atmark-dist/romfs/lib/
`./lib/libstdc++.so.6' -> `/home/atmark/atmark-dist/romfs/lib/libstdc++.so.6'
`./lib/libstdc++.so.6.0.10' -> `/home/atmark/atmark-dist/romfs/lib/libstdc++.so.6.0.10'

図2.20 標準C++ライブラリを romfs に追加

2.2.4. romfs イメージを作成

romfs を変更したためここで再度 romfs イメージを作成します。

[ATDE ~]$ cd ~
[ATDE ~]$ cd atmark-dist
[ATDE ~/atmark-dist]$ make image

図2.21 romfs イメージを作成

2.2.5. ロード場所に設置

今回は、カーネルイメージとromfsイメージは ATDE3 の tftp サーバーから Armadillo に渡します。/var/lib/tftpboot/linux.bin.gzromfs.img.gz を置きます。『Armadillo-400 シリーズ ソフトウェアマニュアル』第8.1章 「TFTP サーバーに配置する」を参考にしてください。

[ATDE ~]$ sudo cp -v images/linux.bin.gz /var/lib/tftpboot/
[sudo] password for atmark:
`images/linux.bin.gz' -> `/var/lib/tftpboot/linux.bin.gz'
[ATDE ~]$ sudo cp -v images/romfs.img.gz /var/lib/tftpboot/
[sudo] password for atmark:
`images/romfs.img.gz' -> `/var/lib/tftpboot/romfs.img.gz'

図2.22 カーネルイメージとromfsイメージをロード場所に設置

これで、カーネルイメージとromfsイメージの準備は終了です。

2.3. ブートローダの起動デバイスの設定

Armadillo を保守モードで起動した後、ブートローダー Hermit-At にカーネルイメージとルートファイルシステムに対して、それぞれにロードする場所を指定します。
下図はカーネルイメージをロードする場所を指定します。TFTP ブートを指定して、IP アドレスは サーバー (ATDE3) が 192.168.10.103 で、クライアント (Armadillo) が 192.168.10.172 の場合の実行例です。

hermit> clearenv
hermit> setbootdevice tftp 192.168.10.172 192.168.10.103 --kernel=linux.bin.gz --userland=romfs.img.gz

図2.23 ブートデバイスの指定

2.4. Atmark Dist の起動

以下のことを確認してから電源を投入します。

1. 次を確認してから、電源を投入します。

  • JP2がオープンになっていること。
  • ACアダプタが接続されていること。
  • ATDE3とネットワーク接続できること。
  • シリアルが作業用PCと接続できていること。

2. 下のようにログイン画面が表示されたら、ユーザー名とパスワードにそれぞれroot を入力します。

atmark-dist v1.32.2 (AtmarkTechno/Armadillo-420)
Linux 2.6.26-at18 [armv5tejl arch]

armadillo420-0 login: root
Password:
[armadillo /]#

図2.24 Atmark Dist に ログイン

これで、Atmark Dist の準備は終了しました。

2.5. EnOcean受信用USBモジュールの動作確認

ここでは最もシンプルな構成で、EnOcean受信用USBモジュールが動作することを確認します。

2.5.1. EnOcean受信用USBモジュールをArmadilloに接続

EnOcean受信用USBモジュールをArmadilloに接続し、端末に以下の図のFTDI USB Serial Device converter now attached to ttyUSB0表示が出力されていれば認識されています。

[(d)armadillo ~]$ usb 2-1: new full speed USB device using fsl-ehci and address 3
usb 2-1: configuration #1 chosen from 1 choice
ftdi_sio 2-1:1.0: FTDI USB Serial Device converter detected
ftdi_sio: Detected FT232RL
usb 2-1: FTDI USB Serial Device converter now attached to ttyUSB0

図2.25 EnOcean受信用USBモジュールをArmadilloに接続

2.5.2 デバイスファイル名の確認

EnOcean受信用USBモジュールのデバイスファイル名を確認します。下の例では、/dev/ttyUSB0 がデバイスファイルと なります。最近に作成されたことと、受信用USBモジュールを接続していない状態では 表示されないことから、このデバイスファイルがEnOcean受信用USBモジュールのものであると判断できます。

[(d)armadillo ~]$ ls -ltr /dev/tty*
crw-rw----    1 root     root     207,  20 Jan  1  1970 /dev/ttymxc4
crw-rw----    1 root     root     207,  18 Jan  1  1970 /dev/ttymxc2
crw-rw----    1 root     root       4,  18 Jan  1  1970 /dev/tty18
                    ・・・ 途中省略 ・・・
crw-rw----    1 root     root       3, 101 Jan  1  1970 /dev/ttyv5
crw-rw----    1 root     root       3, 100 Jan  1  1970 /dev/ttyv4
crw-rw----    1 root     root     188,   0 Feb 12 20:25 /dev/ttyUSB0
crw-------    1 root     root     207,  17 Feb 12 20:25 /dev/ttymxc1

図2.26 デバイスファイル名の確認

2.5.3 UARTの設定

UARTの設定を行うため、デバイスファイル /dev/ttyUSB0 に対し stty コマンドで制御を変更します。

[(d)armadillo ~]$ stty -F /dev/ttyUSB0 57600
[(d)armadillo ~]$ stty -F /dev/ttyUSB0 -icanon
[(d)armadillo ~]$ stty -F /dev/ttyUSB0 min 1

図2.27 UARTの設定

2.5.4 受信データの出力

EnOcean受信用USBモジュールが受信したフレームをhexdump -vコマンドを使って端末に出力します。

[(d)armadillo ~]$ hexdump -v /dev/ttyUSB0
0000000 0055 070a eb01 e0a5 6681 000f b803 00ba
0000010 ff01 ffff 30ff 1500 0055 0707 7a01 70f6
0000020 2300 bb95 0130 ffff ffff 0038 55c6 0700

図2.28 受信データの出力

EnOcean製スイッチを押すたびに文字が追加出力されることから、EnOcean受信用USBモジュールは正常に動作していると判断できます。

これで、EnOcean受信用USBモジュールの動作確認を終了します。


第3章 EnOcean Link : Armadillo-400シリーズ EnOcean を使う

EnOcean Link 試供版に含まれているチュートリアルを実行します。
本手順書は、各チュートリアルを Armadillo で実行するまでの手順と、各チュートリアルのごく簡単な説明を記載します。
各チュートリアルの具体的な処理と API については ソースコードや EnOcean Link に含まれているヘルプの EoLink.chm を参照してください。
また、EnOcean Alliance が規格する ESPEEP については 各ドキュメントを参照ください。

3.1. EnOcean Linkライブラリのクロスビルド

まずは、ソースコードの取得とライブラリをクロスビルドします。EnOcean Link を ATDE3 でクロスビルドします。手順は次の通りです。

1. ソースコードのダウンロード

EnOcean Link 試供版 をダウンロードします。
本手順では、ver. 1.3.0.0 (ファイル名 EnOcean_Link_1_3_0_0_trial.zip) をダウンロードしました。
ダウンロードには EnOcean にユーザー登録が必要ですが、いずれも無料でできました。

2. ソースコードの展開

本手順でダウンロードしたファイルは ATDE3 の $HOME/EnOcean_Link_1_3_0_0_trial.zip に置き、unzip します。

図3.1 EnOcean Link ソースコードの展開

3. ライブラリ EnLink の修正

次に、本手順で使用するバージョン (ver.1.3.0.0) では、チュートリアル実行時に不具合と思われる箇所がありましたので、その修正とコンパイル時の警告を修正します。
なお、本修正はテスト的で本HowToで実行するチュートリアルが動作するための修正です。他の用途で使用される場合は十分に検証を行ってください。

図3.2 EnLink 修正するファイルの場所

修正1: EnOcean_Link/EOLink/Gateway/eoGateway.cpp の 180行目 に下のコードを追加します。

eoReturn eoGateway::normalHandler(eoTelegram &recvTelegram)
{
    eoReturn ret = EO_OK;

    if (filter != NULL && !filter->Filter(recvTelegram))
    {
        flags &= (~RECV_TELEGRAM);
    }
    else
    {
        if (eoTeachInModule::isTeachIN(recvTelegram))
        {
            if(TeachInModule->isTeachedIN(recvTelegram))
                flags |= RECV_SECTEACHIN;
            else
                flags |= RECV_TEACHIN;
        }
        ret = recvTelegram.copyTo(message);    ← 180行 : この行を追加。
        if (ret == EO_OK)
            flags |= RECV_MESSAGE;
    }
    return ret;
}

図3.3 EnLink の修正1

修正2: コンパイル警告を削除するために、修正1と同じファイルの 281行目に return 文を追加します。

eoReturn eoGateway::Send(const eoMessage &msg)
{
    if (advancedMode == true)
    {
        eoConverter::packetToAdvancedRadio(msg, packet);
        return Send(packet);
    }

    if ((msg.GetDataLength() <= 14 && msg.destinationID == BROADCAST_ID) ||
        (msg.GetDataLength() <= 9  && msg.destinationID != BROADCAST_ID))
    {
        if (eoConverter::radioToPacket(msg, packet) != EO_OK)
            return EO_ERROR;

        return Send(packet);
    }
    return EO_ERROR;    ← 281行 : この行を追加。
}

図3.4 EnLink の修正2

4. Makefike の g++ を クロス対応に変更

Makefikeg++ を クロス用に置き換えます。下図では、g++ という文字列が記述されているファイル名を tmp.txt にリストで書き出し、そのリストのg++$(CROSS_COMPILE)$(CXX) に置き換えています。

図3.5 Makefike の g++ を クロス対応に変更

5. ライブラリ EnLink のビルド

次の手順でビルドします。libEOLink.a が生成されるとライブラリのビルドは終了です。

図3.6 ライブラリ EnLink のビルド

ライブラリが生成されましたので、そのライブラリを使用するプログラムのクロスビルドを実行をします。
これらのプログラムは、すべて EnOcean Link 試供版 に含まれているプログラムです。

このプログラムは受信用USBモジュールが受信したすべてのデータを端末に出力します。本手順では準備したスイッチと温度センサの全てのデバイスからの情報が端末に出力されることを確認します。

1. ソースコードの場所

プログラムのソースコードは EnOcean_Link/Tutorial/HelloWorld.cpp です。

図3.7 チュートリアル HelloWorld ソースコードの場所

2. ソースコードの変更

まずはじめに、ソースコード内の デファイン SER_PORT/dev/USB300 が指定されているので、実際に使用するデバイスファイル名に変更します。

本手順では、下の例のように、/dev/ttyUSB0 を指定します。

図3.8 チュートリアル HelloWorld ソースコードの変更

3. クロスビルド

make clean && make コマンドを実行して、Tutorial が生成されるとビルドは成功です。

図3.9 チュートリアル HelloWorld クロスビルド

4. Armadillo へデータを移動

コンパイルした~/EnOcean_Link一式をArmadilloに渡します。まず、ビルドしたEnOcean_LinkをUSBメモリにコピーしてから第2章で起動したArmadilloに挿入します。次に下図のようにmountコマンドを使ってマウントします。下図はUSBメモリが /dev/sda1 で認識され、ファイルフォーマットが FAT32 の場合の例です。

図3.10 チュートリアル HelloWorld Armadilloへデータを移動

5. 実行の前に : FHEM の停止

プログラムを実行する前に、FHEM が起動していれば停止させてください。
下は FHEM が起動しているか確認する手順例です。FHEM がプロセスID 1298 で動作していることが確認できます。

図3.11 チュートリアル HelloWorld FHEM 起動確認

FHEM のプロセスIDを指定して kill -9 コマンドを実行し、FHEM を停止します。

図3.12 チュートリアル HelloWorld FHEM の停止

6. プログラムの実行

それでは、プログラムを実行します。下の例のように Tutorial を実行します。プログラムは Ctrl+c を押せば終了できます。

なお、本手順で使用している受信用USBモジュールは USB400J にもかかわらずプログラムの出力に USB300 と出力されますが、動作には関係ないためそのままとしました。以降のすべての Tutorial プログラムでも同様です。

図3.13 チュートリアル HelloWorld 実行

プログラムを開始したら、用意したスイッチ2台をそれぞれカチカチ押します。押すたびにプログラムから情報が出力されることを確認します。温度センサは基板上のボタンを押します。こちらも押すたびに情報が出力されていることを確認します。

下は、実際に情報が出力された時の例です。 SrcID0028E8D404000CC3 がスイッチで、04000C6B が温度センサの情報です。

図3.14 チュートリアル HelloWorld 実際の例

Ctrl+c でプログラムを終了します。

これで、プログラム HelloWorld を終了します。

このプログラムは Enlink ライブラリの API を使用して、自動的にフィルター機能で有効にするデバイスを学習 (学習モード) し、学習されたデバイスのみ受信データとして操作 (フィルターモード) できること示しています。また、そのフィルターの設定を任意のファイル名に出力できることも示しています。

1. ソースコードの場所

プログラムのソースコードは EnOcean_Link/Tutorial/Tutorial1.cpp です。

図3.15 チュートリアル Tutorial1 ソースコードの場所

2. ソースコードの変更

まずはじめに、ソースコード内の デファイン SER_PORT に 使用するデバイスファイル名を指定します。

本手順では、/dev/ttyUSB0 を指定します。

図3.16 チュートリアル Tutorial1 ソースコードの変更 デバイスファイル

次に、必要に応じて RSSIフィルターの有効範囲を大きくします。本手順では、USB400J の dBm が プラスの値となっていたため 上限 maxdBm60 (変更前は -0) を指定します。下は本手順で設定した例です。

図3.17 チュートリアル Tutorial1 ソースコードの変更 RSSIの変更

3. クロスビルド

make clean && make コマンドを実行して、Tutorial が生成されるとビルドは成功です。

図3.18 チュートリアル Tutorial1 クロスビルド

4. Armadillo へデータを移動

コンパイルした~/EnOcean_Link一式をArmadilloに渡します。まず、ビルドしたEnOcean_LinkをUSBメモリにコピーしてから第2章で起動したArmadilloに挿入します。次に下図のようにmountコマンドを使ってマウントします。下図はUSBメモリが /dev/sda1 で認識され、ファイルフォーマットが FAT32 の場合の例です。

図3.19 チュートリアル Tutorial1 Armadilloへデータを移動

5. 実行の前に : FHEM の停止

プログラムを実行する前に、FHEM が起動していれば停止させてください。
下は FHEM が起動しているか確認する手順例です。FHEM がプロセスID 1298 で動作していることが確認できます。

図3.20 チュートリアル Tutorial1 FHEM 起動確認

FHEM のプロセスIDを指定して kill -9 コマンドを実行し、FHEM を停止します。

図3.21 チュートリアル Tutorial1 FHEM の停止

6. プログラムの実行

プログラムを実行します。下の例のように Tutorial を実行します。プログラムは Ctrl+c を押せば終了できます。

図3.22 チュートリアル Tutorial1 実行

プログラムを開始してから、下の表示が出るまでを学習モードといいます。この学習モードの間に受信用USBモジュールが受信した電波の送り元のデバイスが、学習モード終了後も有効となります。本手順での学習モードの時間は10秒です。ソースコードの LEARN_TIME_S の設定値で長くすることができます。

図3.23 チュートリアル Tutorial1 学習モードの終了

ここでは学習モード中にスイッチ1と温度センサを学習させます。それぞれのボタンを押します。下図が実際にボタンが押された例です。

図3.24 チュートリアル Tutorial1 実行

学習モードが終了するとフィルターモードに入ります。学習モード中に使用した温度センサやスイッチ1を押すと情報が出力されますが、使わなかった残りのスイッチ2を押しても何も端末に出力されません。これがフィルター機能です。

下が学習モード中にスイッチ1と温度センサのボタンを押した例です。

図3.25 チュートリアル フィルターモード

Ctrl+c でプログラムを終了します。

また、学習モードが終了すると、下の例のように learned.txt というファイルが生成されます。これはフィルターの設定ファイルです。ファイル名はソースコードの デファイン SAVE_CONFIG に指定されている文字列で決まります。

下が学習モード中にスイッチ1と温度センサのボタンを押した例です。

図3.26 チュートリアル フィルターの設定ファイル

下の例が learned.txt の内容です。許可するデバイスと RSSI 値が記載されていることがわかります。

図3.27 チュートリアル Tutorial1 フィルターの設定ファイルの内容

これで Tutorial1 を終了します。

このプログラムは、Enlink ライブラリの API を使って、Tutorial1 で実行した学習モードの代わりに、起動した後に用意された設定ファイルをロードすることができきることを示しています。本手順では、Tutorial1 で作成された フィルターの設定ファイル learned.txt をそのまま使い、本プログラムの設定ファイルとして使用します。また、温度センサーのデータを適切なフォーマットで解析した後のデータを取り出すことができることも示されています。

1. ソースコードの場所

プログラムのソースコードは EnOcean_Link/Tutorial/Tutorial2.cpp です。

図3.28 チュートリアル Tutorial2 ソースコードの場所

2. ソースコードの変更

まずはじめに、ソースコード内の デファイン SER_PORT に 使用するデバイスファイル名を指定します。

本手順では、/dev/ttyUSB0 を指定します。

図3.29 チュートリアル Tutorial2 ソースコードの変更 デバイスファイル

3. クロスビルド

make clean && make コマンドでビルドして、Tutorial を生成します。

図3.30 チュートリアル Tutorial2 クロスビルド

4. Armadillo へデータを移動

コンパイルした~/EnOcean_Link一式をArmadilloに渡します。まず、ビルドしたEnOcean_LinkをUSBメモリにコピーしてから第2章で起動したArmadilloに挿入します。次に下図のようにmountコマンドを使ってマウントします。下図はUSBメモリが /dev/sda1 で認識され、ファイルフォーマットが FAT32 の場合の例です。

図3.31 チュートリアル Tutorial2 Armadilloへデータを移動

5. 実行の前に : FHEM の停止

プログラムを実行する前に、FHEM が起動していれば停止させてください。
下は FHEM が起動しているか確認する手順例です。FHEM がプロセスID 1298 で動作していることが確認できます。

図3.32 チュートリアル Tutorial2 FHEM 起動確認

FHEM のプロセスIDを指定して kill -9 コマンドを実行し、FHEM を停止します。

図3.33 チュートリアル Tutorial2 FHEM の停止

6. フィルターの設定ファイルの配置

Tutorial1 の実行で生成された フィルターの設定ファイル learned.txt を先ほど生成された Tutorial と同じディレクトリに置きます。ファイル名は、ソースコードのデファイン LOAD_CONFIG に指定されている名前と一致させてください。下は、本手順での実行例です。

図3.34 チュートリアル Tutorial2 フィルターの設定ファイルの配置

7. プログラムの実行

プログラムを実行します。下の例のように Tutorial を実行します。プログラムは Ctrl+c を押せば終了できます。

図3.35 チュートリアル Tutorial2 実行

スイッチ1を押すとデバイス ID が表示されることがわかります

図3.36 チュートリアル Tutorial2 実行 スイッチ1

また、そのまま3分ほどそのまま待っていると温度センサの情報も表示されることが確認できます。

図3.37 チュートリアル Tutorial2 温度センサ

さらに、フィルタに登録されていないスイッチ2を押しても何も出力されないことも確認できます。

Ctrl+c でプログラムを終了します。

以上で Tutorial2 を終了します。

このプログラムでは Enlink ライブラリ を使って受信したEEPから別のEEP (EEP A5-02-05 から A5-02-20) に変換できることを示しています。

1. ソースコードの場所

プログラムのソースコードは EnOcean_Link/Tutorial/Tutorial3.cpp です。

図3.38 チュートリアル Tutorial3 ソースコードの場所

2. ソースコードの変更

まずはじめに、ソースコード内の デファイン SER_PORT に 使用するデバイスファイル名を指定します。

本手順では、/dev/ttyUSB0 を指定します。

図3.39 チュートリアル Tutorial3 ソースコードの変更 デバイスファイル

別の EEP のデータを取得して表示するために、58行目に以下の3行のデバッグログを追加します。下の例では、追加部分をわかりやすくするためにインデントは無視して、行頭に合わせて追加しました。

図3.40 チュートリアル Tutorial3 ソースコードの変更 デバッグログの追加

3. クロスビルド

make clean && make コマンドでビルドして、Tutorial を生成します。

図3.41 チュートリアル Tutorial3 クロスビルド

4. Armadillo へデータを移動

コンパイルした~/EnOcean_Link一式をArmadilloに渡します。まず、ビルドしたEnOcean_LinkをUSBメモリにコピーしてから第2章で起動したArmadilloに挿入します。次に下図のようにmountコマンドを使ってマウントします。下図はUSBメモリが /dev/sda1 で認識され、ファイルフォーマットが FAT32 の場合の例です。

図3.42 チュートリアル Tutorial3 Armadilloへデータを移動

5. 実行の前に : FHEM の停止

プログラムを実行する前に、FHEM が起動していれば停止させてください。
下は FHEM が起動しているか確認する手順例です。FHEM がプロセスID 1298 で動作していることが確認できます。

図3.43 チュートリアル Tutorial3 FHEM 起動確認

FHEM のプロセスIDを指定して kill -9 コマンドを実行し、FHEM を停止します。

図3.44 チュートリアル Tutorial3 FHEM の停止

6. フィルターの設定ファイルの配置

Tutorial2 で使用したフィルターの設定ファイルを使用します。設定ファイル名は、ソースコードのデファイン LOAD_CONFIG に指定しているファイルと一致させてください。下は、本手順での例です。

図3.45 チュートリアル Tutorial3 フィルターの設定ファイルの配置

7. プログラムの実行

プログラムを実行します。下の例のように Tutorial を実行します。プログラムは Ctrl+c を押せば終了できます。

図3.46 チュートリアル Tutorial3 実行

温度センサのデータを受信するまで3分ほど待ちます。EEP A5-02-05 と A5-02-20 はデータフォーマットが異なっており (EEP を参照してください) 温度範囲も違います。A5-02-05 は 8ビットで摂氏0度から40度の範囲を格納し、A5-02-20は 10 ビットで摂氏-10度から41.2度を格納します。下は本手順で温度センサを受信した後の例です。受信データとEEPの変換後のデータがほぼ同じになっていることがわかります。このことから、異なるフォーマット間の変換も EnLink ライブラリを使用すれば簡単に行えることがわかります。

図3.47 チュートリアル Tutorial3 実行 温度センサ

スイッチ1とスイッチ2を押した結果は Tutorial2 と同じで、1は認識されますが、2は認識されません。

Ctrl+c でプログラムを終了します。

これで、プログラム Tutorial3 を終了します。

このプログラムは学習モードでないとき、EnLink ライブラリの TeachInModule を使ってどのように Teach Telegrams (EEPが特定できるデータ) を操作するかを示しています。また実装により、2回目の Teach Telegrams が送信されると学習されたデバイスを消去することができることを示しています。

1. ソースコードの場所

プログラムのソースコードは EnOcean_Link/Tutorial/Tutorial4.cpp です。

図3.48 チュートリアル Tutorial4 ソースコードの場所

2. ソースコードの変更

まずはじめに、ソースコード内の デファイン SER_PORT に 使用するデバイスファイル名を指定します。

本手順では、/dev/ttyUSB0 を指定します。

図3.49 チュートリアル Tutorial4 ソースコードの変更 デバイスファイル

次に、Teach Telegrams プログラムの受信1回目と2回目の処理に入ったところそれぞれにデバッグログを入れます。追加したログは2箇所です。下は、実際の追加例です。while 文が 31行目となります。

図3.50 チュートリアル Tutorial4 ソースコードの変更 デバッグログの追加

3. クロスビルド

make clean && make コマンドでビルドして、Tutorial を生成します。

図3.51 チュートリアル Tutorial4 クロスビルド

4. Armadillo へデータを移動

コンパイルした~/EnOcean_Link一式をArmadilloに渡します。まず、ビルドしたEnOcean_LinkをUSBメモリにコピーしてから第2章で起動したArmadilloに挿入します。次に下図のようにmountコマンドを使ってマウントします。下図はUSBメモリが /dev/sda1 で認識され、ファイルフォーマットが FAT32 の場合の例です。

図3.52 チュートリアル Tutorial4 Armadilloへデータを移動

5. 実行の前に : FHEM の停止

プログラムを実行する前に、FHEM が起動していれば停止させてください。
下は FHEM が起動しているか確認する手順例です。FHEM がプロセスID 1298 で動作していることが確認できます。

図3.53 チュートリアル Tutorial4 FHEM 起動確認

FHEM のプロセスIDを指定して kill -9 コマンドを実行し、FHEM を停止します。

図3.54 チュートリアル Tutorial4 FHEM の停止

6. プログラムの実行

プログラムを実行します。下の例のように Tutorial を実行します。プログラムは Ctrl+c を押せば終了できます。

図3.55 チュートリアル Tutorial4 実行

次に、温度センサのボタンを押します。RECV_TEACHIN が出力されます。

図3.56 チュートリアル Tutorial4 実行: Teach Telegrams 1 回目

つづけてもう一回、温度センサのボタンを押すと、RECV_SECTEACHIN が出力されます。

図3.57 チュートリアル Tutorial4 実行: Teach Telegrams 2 回目

その後、スイッチを押すたびに上記のログが交互に出力されることがわかります。
具体的な処理については、ソースコードを参照してください。

Ctrl+c でプログラムを終了します。

これで、プログラム Tutorial4 を終了します。

このプログラムは、Enlink ライブラリを使ってシリアルコマンドをどのように使用するかの例を示しています。

1. ソースコードの場所

プログラムのソースコードは EnOcean_Link/Tutorial/Tutorial5.cpp です。

図3.58 チュートリアル Tutorial5 ソースコードの場所

2. ソースコードの変更

まずはじめに、ソースコード内の デファイン SER_PORT に 使用するデバイスファイル名を指定します。

本手順では、/dev/ttyUSB0 を指定します。

図3.59 チュートリアル Tutorial5 ソースコードの変更 デバイスファイル

3. クロスビルド

make clean && make コマンドでビルドして、Tutorial を生成します。

図3.60 チュートリアル Tutorial5 クロスビルド

4. Armadillo へデータを移動

コンパイルした~/EnOcean_Link一式をArmadilloに渡します。まず、ビルドしたEnOcean_LinkをUSBメモリにコピーしてから第2章で起動したArmadilloに挿入します。次に下図のようにmountコマンドを使ってマウントします。下図はUSBメモリが /dev/sda1 で認識され、ファイルフォーマットが FAT32 の場合の例です。

図3.61 チュートリアル Tutorial5 Armadilloへデータを移動

5. 実行の前に : FHEM の停止

プログラムを実行する前に、FHEM が起動していれば停止させてください。
下は FHEM が起動しているか確認する手順例です。FHEM がプロセスID 1298 で動作していることが確認できます。

図3.62 チュートリアル Tutorial5 FHEM 起動確認

FHEM のプロセスIDを指定して kill -9 コマンドを実行し、FHEM を停止します。

図3.63 チュートリアル Tutorial5 FHEM の停止

6. プログラムの実行

プログラムを実行します。下の例のように Tutorial を実行します。プログラムは Ctrl+c を押せば終了できます。

図3.64 チュートリアル Tutorial5 実行

具体的な処理については、ソースコードを参照してください。

これで、プログラム Tutorial5 を終了します。

表3.1 参照
参照 備考
EnOcean製品のご紹介 EnOcean の情報と購入先
EnOcean Link EnOcean Link 試供版 (ソースコード)
EnOcean Serial Protocol (ESP3) EnOcean シリアル プロトコル (PDF, 英語)
Equipment Profiles (EEP 2.6) EnOcean 無線規格 (PDF, 英語)