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-20
xxxxxx
.zip (本手順では、DVD/atde/vmware/atde3-20120709.zip) を展開してコピーします。 - VMware Player を起動します。
- [仮想マシンを開く] をクリックして、展開したatde3-20
xxxxxx
/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 Selection
と Select
を選択してから Enter キーを押します。
図2.11 Atmark Dist コンフィギュレーション1
3. 次に、Customize Kernel Settings
を選択して SPACE キー を押して *
を付けます。その後に、Exit
を選択して Enter キーを押します。
図2.12 Atmark Dist コンフィギュレーション2
4. さらに、次の画面でも Exit
を選択して Enter キーを押すと、次の画面が表示されます。 Yes
を選択して Enter キーを押します。
図2.13 Atmark Dist コンフィギュレーション3
5. いったん端末画面に戻った後、下のような設定画面が表示されます。
ここからが Linux カーネルのコンフィグレーションとなります。まず、Device Drivers --->
と Select
を選択して Enter キーを押します。
図2.14 Linux カーネルコンフィギュレーション1
6. 次に、[*] USB support --->
(*
が付いていること。付いていなければ Space キーで付けてください。) と Select
を選択して Enter キーを押します。
図2.15 Linux カーネルコンフィギュレーション2
7. さらに、<*> USB Serial Converter support --->
(*
が付いていること。付いていなければ Space キーで付けてください。) と Select
を選択して Enter キーを押します。
図2.16 Linux カーネルコンフィギュレーション3
8. さらに、<*> USB FTDI Single Port Serial Driver
(*
が付いていること。付いていなければ Space キーで付けてください。) と Exit
を選択して Enter キーを押します。
ここで有効にしたドライバモジュールが EnOcean製受信用USBモジュールで使用されます。
図2.17 Linux カーネルコンフィギュレーション4
9. その後、Exit
を 選択して Enter キーを押すのを 3 回繰り返すと、下図のように新しいカーネルコンフィギュレーションを保存するかを尋ねられます。Yes
を選択して Enter キーを押します。
図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.gz
と romfs.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 が規格する ESP や EEP については 各ドキュメントを参照ください。
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 します。
[ATDE ~]$
cd ~
[ATDE ~]$
mkdir EnOcean_Link
[ATDE ~]$
cd ~/EnOcean_Link
[ATDE ~/EnOcean_Link]$
unzip ../EnOcean_Link_1_3_0_0_trial.zip
図3.1 EnOcean Link ソースコードの展開
3. ライブラリ EnLink の修正
次に、本手順で使用するバージョン (ver.1.3.0.0) では、チュートリアル実行時に不具合と思われる箇所がありましたので、その修正とコンパイル時の警告を修正します。
なお、本修正はテスト的で本HowToで実行するチュートリアルが動作するための修正です。他の用途で使用される場合は十分に検証を行ってください。
[ATDE ~]$
cd ~/EnOcean_Link
[ATDE ~/EnOcean_Link]$
cd EOLink/Gateway/
[ATDE ~/EnOcean_Link/EOLink/Gateway]$
vi eoGateway.cpp
図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++ を クロス対応に変更
Makefike
の g++
を クロス用に置き換えます。下図では、g++
という文字列が記述されているファイル名を tmp.txt
にリストで書き出し、そのリストのg++
を$(CROSS_COMPILE)$(CXX)
に置き換えています。
[ATDE ~]$
cd ~/EnOcean_Link/
[ATDE ~/EnOcean_Link]$
LIST=tmp.txt
[ATDE ~/EnOcean_Link]$
grep -R "g++ " . | sed -e 's/^\(\.\/.*\)\(:.*g++.*$\)/\1/g' > "$LIST"
[ATDE ~/EnOcean_Link]$
while read LINE; do mv -iv "$LINE" "$LINE".bak ; sed -e 's/g++/$(CROSS_COMPILE)$(CXX)/g' "$LINE".bak > "$LINE" ; done < "$LIST"
図3.5 Makefike の g++ を クロス対応に変更
5. ライブラリ EnLink のビルド
次の手順でビルドします。libEOLink.a が生成されるとライブラリのビルドは終了です。
[ATDE ~/EnOcean_Link]$
export CROSS_COMPILE=arm-linux-gnueabi-
[ATDE ~/EnOcean_Link]$
export LANG=C
[ATDE ~/EnOcean_Link]$
[ATDE ~/EnOcean_Link]$
cd EOLink/ReleaseLib/
[ATDE ~/EnOcean_Link/EOLink/ReleaseLib]$
make clean && make
[ATDE ~/EnOcean_Link/EOLink/ReleaseLib]$
ls libEOLink.a
libEOLink.a
図3.6 ライブラリ EnLink のビルド
3.2. チュートリアルのクロスビルドと実行
ライブラリが生成されましたので、そのライブラリを使用するプログラムのクロスビルドを実行をします。
これらのプログラムは、すべて EnOcean Link 試供版 に含まれているプログラムです。
3.2.1. HelloWorld
このプログラムは受信用USBモジュールが受信したすべてのデータを端末に出力します。本手順では準備したスイッチと温度センサの全てのデバイスからの情報が端末に出力されることを確認します。
1. ソースコードの場所
プログラムのソースコードは EnOcean_Link/Tutorial/HelloWorld.cpp
です。
[ATDE ~]$
cd ~/EnOcean_Link/
[ATDE ~/EnOcean_Link]$
cd Tutorial/
[ATDE ~/EnOcean_Link/Tutorial]$
ls HelloWorld.cpp
HelloWorld.cpp
図3.7 チュートリアル HelloWorld ソースコードの場所
2. ソースコードの変更
まずはじめに、ソースコード内の デファイン SER_PORT
に /dev/USB300
が指定されているので、実際に使用するデバイスファイル名に変更します。
本手順では、下の例のように、/dev/ttyUSB0
を指定します。
#define SER_PORT "/dev/ttyUSB0"//! the Serial Port Device
図3.8 チュートリアル HelloWorld ソースコードの変更
3. クロスビルド
make clean && make
コマンドを実行して、Tutorial
が生成されるとビルドは成功です。
[ATDE ~]$
export CROSS_COMPILE=arm-linux-gnueabi-
[ATDE ~]$
export LANG=C
[ATDE ~]$
cd ~/EnOcean_Link/Tutorial/
[ATDE ~/EnOcean_Link/Tutorial]$
cd HelloWorld/
[ATDE ~/EnOcean_Link/Tutorial/HelloWorld]$
make clean && make
[ATDE ~/EnOcean_Link/Tutorial/HelloWorld]$
ls Tutorial*
Tutorial
図3.9 チュートリアル HelloWorld クロスビルド
4. Armadillo へデータを移動
コンパイルした~/EnOcean_Link
一式をArmadilloに渡します。まず、ビルドしたEnOcean_Link
をUSBメモリにコピーしてから第2章で起動したArmadilloに挿入します。次に下図のようにmount
コマンドを使ってマウントします。下図はUSBメモリが /dev/sda1
で認識され、ファイルフォーマットが FAT32 の場合の例です。
[(d)armadillo ~]#
mount -t vfat /dev/sda1 /mnt/
図3.10 チュートリアル HelloWorld Armadilloへデータを移動
5. 実行の前に : FHEM の停止
プログラムを実行する前に、FHEM が起動していれば停止させてください。
下は FHEM が起動しているか確認する手順例です。FHEM がプロセスID 1298 で動作していることが確認できます。
[(d)armadillo ~]#
ps -aef | grep fhem
1298 root 7832 R perl fhem.pl fhem.cfg 1300 root 576 S grep fhem
図3.11 チュートリアル HelloWorld FHEM 起動確認
FHEM のプロセスIDを指定して kill -9
コマンドを実行し、FHEM を停止します。
[(d)armadillo ~]#
kill -9 1298
図3.12 チュートリアル HelloWorld FHEM の停止
6. プログラムの実行
それでは、プログラムを実行します。下の例のように Tutorial
を実行します。プログラムは Ctrl+c を押せば終了できます。
なお、本手順で使用している受信用USBモジュールは USB400J にもかかわらずプログラムの出力に USB300 と出力されますが、動作には関係ないためそのままとしました。以降のすべての Tutorial プログラムでも同様です。
[(d)armadillo ~]#
cd /mnt/EnOcean_Link/Tutorial/HelloWorld/
[(d)armadillo /mnt/EnOcean_Link/Tutorial/HelloWorld]#
./Tutorial
Opening Connection to USB300 Hello to the world of eoLink DolphinV4_GWC 1.1.3.0, ID:0x040005F1 on /dev/ttyUSB0
図3.13 チュートリアル HelloWorld 実行
プログラムを開始したら、用意したスイッチ2台をそれぞれカチカチ押します。押すたびにプログラムから情報が出力されることを確認します。温度センサは基板上のボタンを押します。こちらも押すたびに情報が出力されていることを確認します。
下は、実際に情報が出力された時の例です。 SrcID
が 0028E8D4
と 04000CC3
がスイッチで、04000C6B
が温度センサの情報です。
[(d)armadillo ~]#
cd /mnt/EnOcean_Link/Tutorial/HelloWorld/
[(d)armadillo /mnt/EnOcean_Link/Tutorial/HelloWorld]#
./Tutorial
Opening Connection to USB300 Hello to the world of eoLink DolphinV4_GWC 1.1.3.0, ID:0x040005F1 on /dev/ttyUSB0 RORG: F6 Data: 84 SrcID: 0028E8D4 Status: 00 DstID: FFFFFFFF dBm: 52 SubtelCount: 4 ← スイッチ PTM210J RORG: F6 Data: 00 SrcID: 0028E8D4 Status: 00 DstID: FFFFFFFF dBm: 50 SubtelCount: 4 ← スイッチ PTM210J RORG: F6 Data: 00 SrcID: 04000CC3 Status: 00 DstID: FFFFFFFF dBm: 49 SubtelCount: 4 ← スイッチ PTM430J+ECO200 RORG: A5 Data: 08 28 0B 80 SrcID: 04000C6B Status: 00 DstID: FFFFFFFF dBm: 45 SubtelCount: 79 ← 温度センサ
図3.14 チュートリアル HelloWorld 実際の例
Ctrl+c
でプログラムを終了します。
これで、プログラム HelloWorld を終了します。
3.2.2. チュートリアル1
このプログラムは Enlink ライブラリの API を使用して、自動的にフィルター機能で有効にするデバイスを学習 (学習モード) し、学習されたデバイスのみ受信データとして操作 (フィルターモード) できること示しています。また、そのフィルターの設定を任意のファイル名に出力できることも示しています。
1. ソースコードの場所
プログラムのソースコードは EnOcean_Link/Tutorial/Tutorial1.cpp
です。
[ATDE ~]$
cd ~/ EnOcean_Link/
[ATDE ~/EnOcean_Link]$
cd Tutorial/
[ATDE ~/EnOcean_Link/Tutorial]$
ls Tutorial1.cpp
Tutorial1.cpp
図3.15 チュートリアル Tutorial1 ソースコードの場所
2. ソースコードの変更
まずはじめに、ソースコード内の デファイン SER_PORT
に 使用するデバイスファイル名を指定します。
本手順では、/dev/ttyUSB0
を指定します。
#define SER_PORT "/dev/ttyUSB0"//! the Serial Port Device
図3.16 チュートリアル Tutorial1 ソースコードの変更 デバイスファイル
次に、必要に応じて RSSIフィルターの有効範囲を大きくします。本手順では、USB400J の dBm が プラスの値となっていたため 上限 maxdBm
に 60
(変更前は -0
) を指定します。下は本手順で設定した例です。
learnFilter->maxdBm= 60; ← 上限 learnFilter->mindBm=-60; ← 下限
図3.17 チュートリアル Tutorial1 ソースコードの変更 RSSIの変更
3. クロスビルド
make clean && make
コマンドを実行して、Tutorial
が生成されるとビルドは成功です。
[ATDE ~]$
export CROSS_COMPILE=arm-linux-gnueabi-
[ATDE ~]$
export LANG=C
[ATDE ~]$
cd ~/EnOcean_Link/Tutorial/
[ATDE ~/EnOcean_Link/Tutorial]$
cd Tutorial1/
[ATDE ~/EnOcean_Link/Tutorial/Tutorial1]$
make clean && make
[ATDE ~/EnOcean_Link/Tutorial/Tutorial1]$
ls Tutorial*
Tutorial
図3.18 チュートリアル Tutorial1 クロスビルド
4. Armadillo へデータを移動
コンパイルした~/EnOcean_Link
一式をArmadilloに渡します。まず、ビルドしたEnOcean_Link
をUSBメモリにコピーしてから第2章で起動したArmadilloに挿入します。次に下図のようにmount
コマンドを使ってマウントします。下図はUSBメモリが /dev/sda1
で認識され、ファイルフォーマットが FAT32 の場合の例です。
[(d)armadillo ~]#
mount -t vfat /dev/sda1 /mnt/
図3.19 チュートリアル Tutorial1 Armadilloへデータを移動
5. 実行の前に : FHEM の停止
プログラムを実行する前に、FHEM が起動していれば停止させてください。
下は FHEM が起動しているか確認する手順例です。FHEM がプロセスID 1298 で動作していることが確認できます。
[(d)armadillo ~]#
ps -aef | grep fhem
1298 root 7832 R perl fhem.pl fhem.cfg 1300 root 576 S grep fhem
図3.20 チュートリアル Tutorial1 FHEM 起動確認
FHEM のプロセスIDを指定して kill -9
コマンドを実行し、FHEM を停止します。
[(d)armadillo ~]#
kill -9 1298
図3.21 チュートリアル Tutorial1 FHEM の停止
6. プログラムの実行
プログラムを実行します。下の例のように Tutorial
を実行します。プログラムは Ctrl+c
を押せば終了できます。
[(d)armadillo ~]#
cd /mnt/EnOcean_Link/Tutorial/Tutorial1/
[(d)armadillo /mnt/EnOcean_Link/Tutorial/Tutorial1]#
./Tutorial
Opening Connection to USB300 EnOcean-Link Gateway LearnMode
図3.22 チュートリアル Tutorial1 実行
プログラムを開始してから、下の表示が出るまでを学習モードといいます。この学習モードの間に受信用USBモジュールが受信した電波の送り元のデバイスが、学習モード終了後も有効となります。本手順での学習モードの時間は10秒です。ソースコードの LEARN_TIME_S
の設定値で長くすることができます。
Storing the Config EnOcean-Link Gateway FilterdMode
図3.23 チュートリアル Tutorial1 学習モードの終了
ここでは学習モード中にスイッチ1と温度センサを学習させます。それぞれのボタンを押します。下図が実際にボタンが押された例です。
[(d)armadillo /mnt/EnOcean_Link/Tutorial/Tutorial1]#
./Tutorial
[root@armadillo420-0 (ttymxc1) /mnt/EnOcean_Link/Tutorial/Tutorial1]# ./Tutorial Opening Connection to USB300 EnOcean-Link Gateway LearnMode RORG: A5 Data: 08 28 0B 80 SrcID: 04000C6B Status: 00 DstID: FFFFFFFF dBm: 46 SubtelCount: 0 ← 温度センサ Device 04000C6B Learned-In EEP: A5-02-05 Temperature 0.00 ... 40.00 Deg C RORG: F6 Data: 84 SrcID: 0028E8D4 Status: 00 DstID: FFFFFFFF dBm: 50 SubtelCount: 11 ← スイッチ1 Device 0028E8D4 Learned-In EEP: F6-02-01 Rocker Button A 0.00 ... 3.00 N/A Rocker Button B 0.00 ... 3.00 N/A Energybow direction 0.00 ... 1.00 N/A Multiple Buttons pressed? 0.00 ... 1.00 N/A Storing the Config EnOcean-Link Gateway FilterdMode
図3.24 チュートリアル Tutorial1 実行
学習モードが終了するとフィルターモードに入ります。学習モード中に使用した温度センサやスイッチ1を押すと情報が出力されますが、使わなかった残りのスイッチ2を押しても何も端末に出力されません。これがフィルター機能です。
下が学習モード中にスイッチ1と温度センサのボタンを押した例です。
Storing the Config EnOcean-Link Gateway FilterdMode RORG: A5 Data: 08 28 0B 80 SrcID: 04000C6B Status: 00 DstID: FFFFFFFF dBm: 53 SubtelCount: 0 ← 温度センサ RORG: F6 Data: 84 SrcID: 0028E8D4 Status: 00 DstID: FFFFFFFF dBm: 68 SubtelCount: 11 ← スイッチ1 Device 0028E8D4 Energybow direction 0 Multiple Buttons pressed? 0 RORG: F6 Data: 00 SrcID: 0028E8D4 Status: 00 DstID: FFFFFFFF dBm: 49 SubtelCount: 11 Device 0028E8D4 Rocker Button A 2 Rocker Button B 2 Energybow direction 0 Multiple Buttons pressed? 0
図3.25 チュートリアル フィルターモード
Ctrl+c
でプログラムを終了します。
また、学習モードが終了すると、下の例のように learned.txt というファイルが生成されます。これはフィルターの設定ファイルです。ファイル名はソースコードの デファイン SAVE_CONFIG
に指定されている文字列で決まります。
下が学習モード中にスイッチ1と温度センサのボタンを押した例です。
[(d)armadillo /mnt/EnOcean_Link/Tutorial/Tutorial1]#
ls learned.txt
learned.txt
図3.26 チュートリアル フィルターの設定ファイル
下の例が learned.txt の内容です。許可するデバイスと RSSI 値が記載されていることがわかります。
pberrypi ~/EnOcean_Link/Tutorial/Tutorial1 $ cat learned.tx _EOLINK_SAVE HEADER { name:_HUMAN_ARCHIVE major:0x0 minor:0x4 } Gateway { myDeviceManager { Counter:0x2 Device_0000 { profile { rorg:0xf6 func:0x2 type:0x1 manufacturer:0x7ff } dBm:0x0 ID:0x28e8d4 } Device_0001 { profile { rorg:0xa5 func:0x2 type:0x5 manufacturer:0xb } dBm:0x0 ID:0x4000c6b } } myFilter { type:0x1 Counter:0x2 ID_0000:0x28e8d4 ID_0001:0x4000c6b } myLearnFilter { type:0x2 maxdBm:0x3c mindBm:0xffffffc4 } LearnMode:FALSE }
図3.27 チュートリアル Tutorial1 フィルターの設定ファイルの内容
これで Tutorial1 を終了します。
3.2.3. チュートリアル2
このプログラムは、Enlink ライブラリの API を使って、Tutorial1 で実行した学習モードの代わりに、起動した後に用意された設定ファイルをロードすることができきることを示しています。本手順では、Tutorial1 で作成された フィルターの設定ファイル learned.txt をそのまま使い、本プログラムの設定ファイルとして使用します。また、温度センサーのデータを適切なフォーマットで解析した後のデータを取り出すことができることも示されています。
1. ソースコードの場所
プログラムのソースコードは EnOcean_Link/Tutorial/Tutorial2.cpp
です。
[ATDE ~]$
cd ~/EnOcean_Link/
[ATDE ~/EnOcean_Link]$
cd Tutorial/
[ATDE ~/EnOcean_Link/Tutorial]$
ls Tutorial2.cpp
Tutorial2.cpp
図3.28 チュートリアル Tutorial2 ソースコードの場所
2. ソースコードの変更
まずはじめに、ソースコード内の デファイン SER_PORT
に 使用するデバイスファイル名を指定します。
本手順では、/dev/ttyUSB0
を指定します。
#define SER_PORT "/dev/ttyUSB0"//! the Serial Port Device
図3.29 チュートリアル Tutorial2 ソースコードの変更 デバイスファイル
3. クロスビルド
make clean && make
コマンドでビルドして、Tutorial
を生成します。
[ATDE ~]$
export CROSS_COMPILE=arm-linux-gnueabi-
[ATDE ~]$
export LANG=C
[ATDE ~]$
cd ~/EnOcean_Link/Tutorial/
[ATDE ~/EnOcean_Link/Tutorial]$
cd Tutorial2/
[ATDE ~/EnOcean_Link/Tutorial/Tutorial2]$
make clean && make
[ATDE ~/EnOcean_Link/Tutorial/Tutorial2]$
ls Tutorial*
Tutorial
図3.30 チュートリアル Tutorial2 クロスビルド
4. Armadillo へデータを移動
コンパイルした~/EnOcean_Link
一式をArmadilloに渡します。まず、ビルドしたEnOcean_Link
をUSBメモリにコピーしてから第2章で起動したArmadilloに挿入します。次に下図のようにmount
コマンドを使ってマウントします。下図はUSBメモリが /dev/sda1
で認識され、ファイルフォーマットが FAT32 の場合の例です。
[(d)armadillo ~]#
mount -t vfat /dev/sda1 /mnt/
図3.31 チュートリアル Tutorial2 Armadilloへデータを移動
5. 実行の前に : FHEM の停止
プログラムを実行する前に、FHEM が起動していれば停止させてください。
下は FHEM が起動しているか確認する手順例です。FHEM がプロセスID 1298 で動作していることが確認できます。
[(d)armadillo ~]#
ps -aef | grep fhem
1298 root 7832 R perl fhem.pl fhem.cfg 1300 root 576 S grep fhem
図3.32 チュートリアル Tutorial2 FHEM 起動確認
FHEM のプロセスIDを指定して kill -9
コマンドを実行し、FHEM を停止します。
[(d)armadillo ~]#
kill -9 1298
図3.33 チュートリアル Tutorial2 FHEM の停止
6. フィルターの設定ファイルの配置
Tutorial1 の実行で生成された フィルターの設定ファイル learned.txt
を先ほど生成された Tutorial
と同じディレクトリに置きます。ファイル名は、ソースコードのデファイン LOAD_CONFIG
に指定されている名前と一致させてください。下は、本手順での実行例です。
[(d)armadillo ~]#
cd /mnt/EnOcean_Link/Tutorial/Tutorial2/
[(d)armadillo /mnt/EnOcean_Link/Tutorial/Tutorial2]#
cp -a ../Tutorial1/learned.txt .
図3.34 チュートリアル Tutorial2 フィルターの設定ファイルの配置
7. プログラムの実行
プログラムを実行します。下の例のように Tutorial
を実行します。プログラムは Ctrl+c
を押せば終了できます。
[(d)armadillo ~]#
cd /mnt/EnOcean_Link/Tutorial/Tutorial2/
[(d)armadillo /mnt/EnOcean_Link/Tutorial/Tutorial2]#
./Tutorial
Opening Connection to USB300 Prepare to Load Config Gateway is running
図3.35 チュートリアル Tutorial2 実行
スイッチ1を押すとデバイス ID が表示されることがわかります
Opening Connection to USB300 Prepare to Load Config Gateway is running Device 0028E8D4 ← スイッチ1のID Device 0028E8D4
図3.36 チュートリアル Tutorial2 実行 スイッチ1
また、そのまま3分ほどそのまま待っていると温度センサの情報も表示されることが確認できます。
Opening Connection to USB300 Prepare to Load Config Gateway is running Device 0028E8D4 Device 0028E8D4 Device 04000C6B ← 温度センサのID 23.06 ← 温度センサから取得した温度(摂氏)
図3.37 チュートリアル Tutorial2 温度センサ
さらに、フィルタに登録されていないスイッチ2を押しても何も出力されないことも確認できます。
Ctrl+c
でプログラムを終了します。
以上で Tutorial2 を終了します。
3.2.4. チュートリアル3
このプログラムでは Enlink ライブラリ を使って受信したEEPから別のEEP (EEP A5-02-05 から A5-02-20) に変換できることを示しています。
1. ソースコードの場所
プログラムのソースコードは EnOcean_Link/Tutorial/Tutorial3.cpp
です。
[ATDE ~]$
cd ~/EnOcean_Link/
[ATDE ~/EnOcean_Link]$
cd Tutorial/
[ATDE ~/EnOcean_Link/Tutorial]$
ls Tutorial3.cpp
Tutorial3.cpp
図3.38 チュートリアル Tutorial3 ソースコードの場所
2. ソースコードの変更
まずはじめに、ソースコード内の デファイン SER_PORT
に 使用するデバイスファイル名を指定します。
本手順では、/dev/ttyUSB0
を指定します。
#define SER_PORT "/dev/ttyUSB0"//! the Serial Port Device
図3.39 チュートリアル Tutorial3 ソースコードの変更 デバイスファイル
別の EEP のデータを取得して表示するために、58行目に以下の3行のデバッグログを追加します。下の例では、追加部分をわかりやすくするためにインデントは無視して、行頭に合わせて追加しました。
if (profile->GetValue( S_TEMP, f) ==EO_OK) { printf(" %.2f \n", f); if(sendProfile==NULL) continue; //Use the eoProfile to set the temperature value if(sendProfile->SetValue(S_TEMP,f)==EO_OK) { if (sendProfile->GetValue( S_TEMP, f) ==EO_OK) { ← 58行目 : 追加 printf("converted: %.2f \n", f); 追加 } 追加 //and send a Temperature Telegram if(sendProfile->Create(myMessage)==EO_OK) myGateway.Send(myMessage); } }
図3.40 チュートリアル Tutorial3 ソースコードの変更 デバッグログの追加
3. クロスビルド
make clean && make
コマンドでビルドして、Tutorial
を生成します。
[ATDE ~]$
export CROSS_COMPILE=arm-linux-gnueabi-
[ATDE ~]$
export LANG=C
[ATDE ~]$
cd ~/EnOcean_Link/Tutorial/
[ATDE ~/EnOcean_Link/Tutorial]$
cd Tutorial3/
[ATDE ~/EnOcean_Link/Tutorial/Tutorial3]$
make clean && make
[ATDE ~/EnOcean_Link/Tutorial/Tutorial3]$
ls Tutorial*
Tutorial
図3.41 チュートリアル Tutorial3 クロスビルド
4. Armadillo へデータを移動
コンパイルした~/EnOcean_Link
一式をArmadilloに渡します。まず、ビルドしたEnOcean_Link
をUSBメモリにコピーしてから第2章で起動したArmadilloに挿入します。次に下図のようにmount
コマンドを使ってマウントします。下図はUSBメモリが /dev/sda1
で認識され、ファイルフォーマットが FAT32 の場合の例です。
[(d)armadillo ~]#
mount -t vfat /dev/sda1 /mnt/
図3.42 チュートリアル Tutorial3 Armadilloへデータを移動
5. 実行の前に : FHEM の停止
プログラムを実行する前に、FHEM が起動していれば停止させてください。
下は FHEM が起動しているか確認する手順例です。FHEM がプロセスID 1298 で動作していることが確認できます。
[(d)armadillo ~]#
ps -aef | grep fhem
1298 root 7832 R perl fhem.pl fhem.cfg 1300 root 576 S grep fhem
図3.43 チュートリアル Tutorial3 FHEM 起動確認
FHEM のプロセスIDを指定して kill -9
コマンドを実行し、FHEM を停止します。
[(d)armadillo ~]#
kill -9 1298
図3.44 チュートリアル Tutorial3 FHEM の停止
6. フィルターの設定ファイルの配置
Tutorial2 で使用したフィルターの設定ファイルを使用します。設定ファイル名は、ソースコードのデファイン LOAD_CONFIG
に指定しているファイルと一致させてください。下は、本手順での例です。
[(d)armadillo ~]#
cd /mnt/EnOcean_Link/Tutorial/Tutorial3/
[(d)armadillo /mnt/EnOcean_Link/Tutorial/Tutorial3]#
cp -a ../Tutorial2/learned.txt Tutorial2.txt
図3.45 チュートリアル Tutorial3 フィルターの設定ファイルの配置
7. プログラムの実行
プログラムを実行します。下の例のように Tutorial
を実行します。プログラムは Ctrl+c
を押せば終了できます。
[(d)armadillo ~]#
cd /mnt/EnOcean_Link/Tutorial/Tutorial3/
[(d)armadillo /mnt/EnOcean_Link/Tutorial/Tutorial3]#
./Tutorial
Opening Connection to USB300 Loaded Config
図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 ライブラリを使用すれば簡単に行えることがわかります。
[(d)armadillo /mnt/EnOcean_Link/Tutorial/Tutorial3]#
./Tutorial
Opening Connection to USB300 Loaded Config Device 04000C6B 22.90 ← 受信したデータ (EEP A5-02-05) converted: 22.93 ← 変換後の EEP A5-02-20 のデータを取得して表示
図3.47 チュートリアル Tutorial3 実行 温度センサ
スイッチ1とスイッチ2を押した結果は Tutorial2 と同じで、1は認識されますが、2は認識されません。
Ctrl+c
でプログラムを終了します。
これで、プログラム Tutorial3 を終了します。
3.2.5. チュートリアル4
このプログラムは学習モードでないとき、EnLink ライブラリの TeachInModule を使ってどのように Teach Telegrams (EEPが特定できるデータ) を操作するかを示しています。また実装により、2回目の Teach Telegrams が送信されると学習されたデバイスを消去することができることを示しています。
1. ソースコードの場所
プログラムのソースコードは EnOcean_Link/Tutorial/Tutorial4.cpp
です。
[ATDE ~]$
cd ~/EnOcean_Link/
[ATDE ~/EnOcean_Link]$
cd Tutorial/
[ATDE ~/EnOcean_Link/Tutorial]$
ls Tutorial4.cpp
Tutorial4.cpp
図3.48 チュートリアル Tutorial4 ソースコードの場所
2. ソースコードの変更
まずはじめに、ソースコード内の デファイン SER_PORT
に 使用するデバイスファイル名を指定します。
本手順では、/dev/ttyUSB0
を指定します。
#define SER_PORT "/dev/ttyUSB0"//! the Serial Port Device
図3.49 チュートリアル Tutorial4 ソースコードの変更 デバイスファイル
次に、Teach Telegrams プログラムの受信1回目と2回目の処理に入ったところそれぞれにデバッグログを入れます。追加したログは2箇所です。下は、実際の追加例です。while 文が 31行目となります。
while (1) ← 31行目 { recv = myGateway.Receive(); //Got a Profile if (recv & RECV_SECTEACHIN) { printf("RECV_SECTEACHIN\n"); ← 追加 myGateway.TeachInModule->TeachOut(myGateway.message.sourceID); } else if (recv & RECV_TEACHIN) { printf("RECV_TEACHIN\n"); ← 追加 myGateway.TeachInModule->TeachIN(myGateway.message); } }
図3.50 チュートリアル Tutorial4 ソースコードの変更 デバッグログの追加
3. クロスビルド
make clean && make
コマンドでビルドして、Tutorial
を生成します。
[ATDE ~]$
export CROSS_COMPILE=arm-linux-gnueabi-
[ATDE ~]$
export LANG=C
[ATDE ~]$
cd ~/EnOcean_Link/Tutorial/
[ATDE ~/EnOcean_Link/Tutorial]$
cd Tutorial4/
[ATDE ~/EnOcean_Link/Tutorial/Tutorial4]$
make clean && make
[ATDE ~/EnOcean_Link/Tutorial/Tutorial4]$
ls Tutorial*
Tutorial
図3.51 チュートリアル Tutorial4 クロスビルド
4. Armadillo へデータを移動
コンパイルした~/EnOcean_Link
一式をArmadilloに渡します。まず、ビルドしたEnOcean_Link
をUSBメモリにコピーしてから第2章で起動したArmadilloに挿入します。次に下図のようにmount
コマンドを使ってマウントします。下図はUSBメモリが /dev/sda1
で認識され、ファイルフォーマットが FAT32 の場合の例です。
[(d)armadillo ~]#
mount -t vfat /dev/sda1 /mnt/
図3.52 チュートリアル Tutorial4 Armadilloへデータを移動
5. 実行の前に : FHEM の停止
プログラムを実行する前に、FHEM が起動していれば停止させてください。
下は FHEM が起動しているか確認する手順例です。FHEM がプロセスID 1298 で動作していることが確認できます。
[(d)armadillo ~]#
ps -aef | grep fhem
1298 root 7832 R perl fhem.pl fhem.cfg 1300 root 576 S grep fhem
図3.53 チュートリアル Tutorial4 FHEM 起動確認
FHEM のプロセスIDを指定して kill -9
コマンドを実行し、FHEM を停止します。
[(d)armadillo ~]#
kill -9 1298
図3.54 チュートリアル Tutorial4 FHEM の停止
6. プログラムの実行
プログラムを実行します。下の例のように Tutorial
を実行します。プログラムは Ctrl+c
を押せば終了できます。
[(d)armadillo ~]#
cd /mnt/EnOcean_Link/Tutorial/Tutorial4/
[(d)armadillo /mnt/EnOcean_Link/Tutorial/Tutorial4]#
./Tutorial
Opening Connection to USB300
図3.55 チュートリアル Tutorial4 実行
次に、温度センサのボタンを押します。RECV_TEACHIN
が出力されます。
[(d)armadillo ~]#
cd /mnt/EnOcean_Link/Tutorial/Tutorial4/
[(d)armadillo /mnt/EnOcean_Link/Tutorial/Tutorial4]#
./Tutorial
Opening Connection to USB300 RECV_TEACHIN ← 出力
図3.56 チュートリアル Tutorial4 実行: Teach Telegrams 1 回目
つづけてもう一回、温度センサのボタンを押すと、RECV_SECTEACHIN
が出力されます。
[(d)armadillo /mnt/EnOcean_Link/Tutorial/Tutorial4]#
./Tutorial
Opening Connection to USB300 RECV_TEACHIN RECV_SECTEACHIN ← 出力
図3.57 チュートリアル Tutorial4 実行: Teach Telegrams 2 回目
その後、スイッチを押すたびに上記のログが交互に出力されることがわかります。
具体的な処理については、ソースコードを参照してください。
Ctrl+c
でプログラムを終了します。
これで、プログラム Tutorial4 を終了します。
3.2.6. チュートリアル5
このプログラムは、Enlink ライブラリを使ってシリアルコマンドをどのように使用するかの例を示しています。
1. ソースコードの場所
プログラムのソースコードは EnOcean_Link/Tutorial/Tutorial5.cpp
です。
[ATDE ~]$
cd ~/EnOcean_Link/
[ATDE ~/EnOcean_Link]$
cd Tutorial/
[ATDE ~/EnOcean_Link/Tutorial]$
ls Tutorial5.cpp
Tutorial5.cpp
図3.58 チュートリアル Tutorial5 ソースコードの場所
2. ソースコードの変更
まずはじめに、ソースコード内の デファイン SER_PORT
に 使用するデバイスファイル名を指定します。
本手順では、/dev/ttyUSB0
を指定します。
#define SER_PORT "/dev/ttyUSB0"//! the Serial Port Device
図3.59 チュートリアル Tutorial5 ソースコードの変更 デバイスファイル
3. クロスビルド
make clean && make
コマンドでビルドして、Tutorial
を生成します。
[ATDE ~]$
export CROSS_COMPILE=arm-linux-gnueabi-
[ATDE ~]$
export LANG=C
[ATDE ~]$
cd ~/EnOcean_Link/Tutorial/
[ATDE ~/EnOcean_Link/Tutorial]$
cd Tutorial5/
[ATDE ~/EnOcean_Link/Tutorial/Tutorial5]$
make clean && make
[ATDE ~/EnOcean_Link/Tutorial/Tutorial5]$
ls Tutorial*
Tutorial
図3.60 チュートリアル Tutorial5 クロスビルド
4. Armadillo へデータを移動
コンパイルした~/EnOcean_Link
一式をArmadilloに渡します。まず、ビルドしたEnOcean_Link
をUSBメモリにコピーしてから第2章で起動したArmadilloに挿入します。次に下図のようにmount
コマンドを使ってマウントします。下図はUSBメモリが /dev/sda1
で認識され、ファイルフォーマットが FAT32 の場合の例です。
[(d)armadillo ~]#
mount -t vfat /dev/sda1 /mnt/
図3.61 チュートリアル Tutorial5 Armadilloへデータを移動
5. 実行の前に : FHEM の停止
プログラムを実行する前に、FHEM が起動していれば停止させてください。
下は FHEM が起動しているか確認する手順例です。FHEM がプロセスID 1298 で動作していることが確認できます。
[(d)armadillo ~]#
ps -aef | grep fhem
1298 root 7832 R perl fhem.pl fhem.cfg 1300 root 576 S grep fhem
図3.62 チュートリアル Tutorial5 FHEM 起動確認
FHEM のプロセスIDを指定して kill -9
コマンドを実行し、FHEM を停止します。
[(d)armadillo ~]#
kill -9 1298
図3.63 チュートリアル Tutorial5 FHEM の停止
6. プログラムの実行
プログラムを実行します。下の例のように Tutorial
を実行します。プログラムは Ctrl+c
を押せば終了できます。
[(d)armadillo ~]#
cd /mnt/EnOcean_Link/Tutorial/Tutorial5/
[(d)armadillo /mnt/EnOcean_Link/Tutorial/Tutorial5]#
./Tutorial
Opening Connection to USB300 DolphinV4_GWC 1.1.3.0, ID:0x040005F1 on /dev/ttyUSB0 Successful BIST performed! Base ID: FF82F880, 10 writes left Repeater added! Enabled: true, Level: 1 Filter added! Filter type: 1, Filter value: 0x11223344 Filter deleted Filter enabled All filter has been deleted! Maturity turned on
図3.64 チュートリアル Tutorial5 実行
具体的な処理については、ソースコードを参照してください。
これで、プログラム Tutorial5 を終了します。
3.3. 参照
表3.1 参照
参照 | 備考 |
---|---|
EnOcean製品のご紹介 | EnOcean の情報と購入先 |
EnOcean Link | EnOcean Link 試供版 (ソースコード) |
EnOcean Serial Protocol (ESP3) | EnOcean シリアル プロトコル (PDF, 英語) |
Equipment Profiles (EEP 2.6) | EnOcean 無線規格 (PDF, 英語) |