Armadillo-840では、AVコーデックミドルウェアによりカメラからの入力画像をH.264にエンコードすることができます。 今回は、USBカメラからの画像をJPEGファイルに連続して保存し、ffmpegで動画ファイルに変換するということを試してみます。 ffmegはDebianパッケージのバイナリを使うことにします。
Armadillo-840では、AVコーデックミドルウェアによりカメラからの入力画像をH.264にエンコードすることができます。 今回は、USBカメラからの画像をJPEGファイルに連続して保存し、ffmpegで動画ファイルに変換するということを試してみます。 ffmegはDebianパッケージのバイナリを使うことにします。
Armadillo-IoTとHeroku(Node.js)でHello Worldをやってみましたので、 その際の作業手順をまとめてみます。
ここではATDE5でNode.jsを動かすために、Node.jsをインストールします。(ローカルで動作させる環境が不要な場合はこの章の手順は不要です)
Node.jsのパッケージ(nodejs, nodejs-legacy)は、ATDE5のベースであるDebian wheezyにはパッケージがありません。そのためbackportから取ってくる必要があります。
ここでは以下のURLを参考にATDE5にNode.jsをインストールします。
まずは/etc/apt/sources.list.d/backports.listファイルを以下の内容で作成してください。
Armadilloの標準イメージには、viエディタが入っています。しかしviエディタは操作方法が特殊であり使いにくいという人もいます。 そのため、Debian GNU/Linuxでも標準のエディタになっているnanoをAtmark Distに追加してみました。
インターネットイニシアティブ(IIJ)のSEILブログにArmadillo-IoTを
SACMに対応させる方法について記載されているので、試してみました。
SACMについては、リモートから色々とできそうなので興味があります。
■ ArmadilloとSACM - SEILブログ
http://www.seil.jp/blog/armadillo_sacm
■ SEIL公式サイト
http://www.seil.jp/
libarms動作検証用SACM利用申請を行うと確認用メールが届きます。
3日ですか。。
待ってる間に次に進むことにしました。
現時点(2015年2月12日時点)では発売前の「BLEアドオンモジュール BT00」(※1)を利用してみました。
今回は、Braveridge社製のビーコン「BVMCN1101AA」 (※2)を利用し、アドバタイジング・パケットを
受信した場合にそのビーコン情報を他のプログラムで処理することができるようにスクリプトを書いてみました。
※1. Armadillo-IoT BLEアドオンモジュール BT00 - Armadilloサイト
※2. Bluetooth Beacon (ビーコン) - Braveridge
Armadillo-400シリーズで、Debianのrsh-clientパッケージをもってきて、とあるrsh-serverに対して任意のコマンドを実行しようとしたところ、connection timeoutとなりました。
ATDE3(Debian)から同様なことを実施したところ成功したので、rsh-server側の問題ではありません。
こういった場合、WireSharkなどを使うと便利です。
http://sourceforge.jp/projects/wireshark/
実際にパケットをキャプチャすると、rsh-server側からArmadilloの1022および1023ポートに対して接続に来ていることがわかりました。このポートはArmadilloのiptableで弾いています。
よって、以下のようにArmadilloの1022、1023ポートを解放することで、解決できました。
Armadillo-IoTでIoTができるということで、データ分析を試してみたくなった。
簡単に試せる環境がないか探していると、どうもkibanaというモノでデータを可視化して分析できるらしい。
ということで、kibanaをATDEにインストールしてみたので、その時のメモを貼り付ける。
どうもkibanaというのは、データを可視化するためだけのアプリケーションのようで、データはelasticsearchに入っているものを使うらしい。
ということで、まずはelasticsearchをインストールする。
elasiticsearchの公式ページのインストール方法を参考に、apt-getでelasticsearchが取れるようにしてみる。
ATDEをVMware Player等(以降VMware)を使用していると、VMwareのウインドウにフォーカスが 移ってしまうとAlt+Tabでタスク切り替えをしようと思っても、ホストOSのタスクに切り替わらない。(ゲスト側でタスク切り替えすることになる) キーボードを使ってタスク切り替えをすることが多いので、これでは不便ということでVMwareのユニティモードを使い、ホストOSのウインドウとして、ATDEのアプリケーションを立ち上げる方法を紹介します。
Armadillo-810/840のfirmwareパーティションは、SquashFSファイルシステムで作成されています。 firmwareパーティションは、Armadillo特有のAVコーデックミドルウェアや、OpenGL ES2 ライブラリが含まれます。
今回は、AVコーデックミドルウェアや、Qt(OpenGLが必要)等を使わない場合で、 firmwareパーティションを変更したい時に、SquashFSファイルシステムのイメージを作成する方法を紹介します。
SquashFSファイルシステムのイメージを作るためには、mksquashfsコマンドを使用します。
以下の様にコマンドを実行することで、SquashFSファイルシステムのイメージが作成されます。
[atde ~]$ mksquashfs イメージ化したいディレクトリ イメージファイル名 -comp xz
※: 「イメージ化したいディレクトリ」、「イメージファイル名」は適宜変更してください。
Armadillo-440液晶開発セットで、Qtを使ってLCDタッチパネルにタッチした位置を表示するサンプルプログラム。 Qtの開発環境については、下記URLを参考
参考URL)
以下、Howto : Armadillo-440でQt! 第3回を最後まで実行したQtCreatorのプロジェクトを使う。 mainwindow.hとmainwindow.cppを以下のように変更する。(追加箇所には、/* */でコメントしてある。) ビルドして実行すると、LCD拡張ボードのスイッチ(SW1、SW2、SW3)を押すと、LCDに対応するスイッチ名が表示される。
1.カーネルの修正
Armadillo-440液晶開発セットで、Qtを使ってLCDタッチパネルにタッチした位置を表示するサンプルプログラム。 Qtの開発環境については、下記URLを参考
参考URL)
以下、Howto : Armadillo-440でQt! 第3回を最後まで実行したQtCreatorのプロジェクトを使う。 mainwindow.hとmainwindow.cppを以下のように変更する。(追加箇所には、/* */でコメントしてある。) ビルドして実行すると、Mainwindow上にLCDにタッチした位置が"(258, 170)"のように表示される。
mainwindow.h
カーネル起動時にUSBのプローブが有効になっていると、 認識された順番にデバイスファイルの末尾の番号がつく。
例えば、Armadillo-IoT開発セットの場合、3Gモジュールには、ttyUSB[0-4]が割り当てられるが、 USBコネクタにUSB-シリアル変換ケーブルを挿入した状態で起動すると、 USB-シリアル変換ケーブル:ttyUSB0 3Gモジュール:ttyUSB[1-4] のように3Gモジュールのデバイスファイルの番号がずれる。 補足)本例では、カーネルコンフィギュレーションのUSBサポートの機能で、シリアル変換のサポートを有効にしているものとする。
このような番号ずれを防ぐ方法としては、delayed_probeという方法がある。
本例について、USBコネクタにさしたデバイスを、3Gモジュールより後で認識させる場合は、 make menuconfigでカーネルコンフィギュレーションを
ATDE3の VMware仮想イメージファイルは、Oracle社のVirtual BOXでも起動することが可能です。
インストール方法は省略いたします。このブログではバージョン 4.3.12 を使用しています。
任意のフォルダに弊社Webサイトで公開しているATDE3の仮想イメージファイルを展開してください。
ATDE5の VMware仮想イメージファイルは、Oracle社のVirtual BOXでも起動することが可能です。
インストール方法は省略いたします。このブログではバージョン 4.3.12 を使用しています。
任意のフォルダに弊社Webサイトで公開しているATDE5の仮想イメージファイルを展開してください。
展開の方法は以下のHowToも参考にしてください。
https://armadillo.atmark-techno.com/howto/tar_xz-extract
プログラムを作成した際に、依存しているライブラリのライセンスを確認する必要があると思います。その際に、リンクしているライブラリのソースコードを取得する必要があるため、指定のバイナリが使用しているライブラリのDebianパッケージ名、Debianソースパッケージ名を調べるためのシェルスクリプトを作ってみました。
以下のシェルスクリプトを作成し、ATDEで動かしてみてください。
Armadillo-IoTで簡易的に任意のRubyライブラリを追加するには、
/usr/lib/ruby/vendor_ruby/ディレクトリにライブラリファイルを配置する
ことで利用できるようになります。
ここでは、WebSocketのシンプル実装である「websocket-client-simple」を
追加する例を記載してみます。
参照: https://rubygems.org/gems/websocket-client-simple
尚、本項では簡易的な手順を示すため、ユーザーランドイメージを作成することはありません。
Armadillo-IoTにログインして、下記のようにwgetコマンドなどでライブラリを配置します。
Armadillo-810の標準イメージではUVCガジェットが起動しているので、USBカメラのように使うことも可能です。 以下のマニュアルには、ATDE5上で guvcviewというツールを使ってArmadillo-810で撮影した画像を確認する方法が 記載されています。
[ 6.2.1. UVCガジェット ]
https://manual.atmark-techno.com/armadillo-810/armadillo-810_product_manual_ja-1.6.0/ch06.html#sct.usb_gadget-uvc
ただしPCのスペックなどによりリソース不足でguvcviewが起動できないケースもあるかもしれません。 ATDE5上ではなく、以下のようなWindowsアプリケーションをインストールすることで、ATDE5を介さずに、直接Windows上でArmadillo-810の画像を確認することができますよ。
以下に公開しているHowToでは、OpenCVのサンプルコードをATDE5上でクロスビルドしています。 これだと、サンプルを直すたびに、Armadillo-810への転送が必要になるので面倒です。
[ Howto : Armadillo-810でOpenCVを用いた画像処理 ]
https://armadillo.atmark-techno.com/howto/armadillo-810-opencv
ここではArmadillo-810上にコンパイルに必要な環境と、OpenCVのライブラリをインストールして、 Armadillo-810上でビルドする方法をご紹介します。
DebianパッケージをAtmark Distで作ったユーザーランドに追加する際に、バイナリを実行しても必要なファイルが見つからずに正常に起動しないことがあるかと思います。その際に、何が必要なファイルかを調べる方法を紹介します。
バイナリ実行時に必要なファイルは、open()システムコールで開かれます。そのため、バイナリ実行時にどのシステムコールが使用されたかを調べるstraceを使うことで、どのファイルをopen()しようとしたかを調べることができます。このstraceはLinuxのデバッグユーティリティであり、引数に渡されたバイナリが使用するシステムコールを見ることができます。
Atmark Distのコンフィギュレーションで選択できるstraceでは、ビルド時にエラーが発生するため、Debian Packagesからstraceのバイナリを持ってくる必要があります。
以下のページを参考に、straceをユーザーランドに追加してください。
Armadillo-810 製品マニュアルでは、/sys/class/video4linux/videoN/name(Nは数字が入ります)でどのデバイスファイルがどのカメラに対応するかを確認する方法が記載されています。この方法の場合、複数のカメラが接続されているとコマンドを複数回打つ必要があり面倒です。そのため、2014年11月の製品アップデートで追加されたv4l-utilsを使って、どのデバイスファイルが、どのカメラに対応しているか調べる方法を紹介します。
例として、Armadillo-810 カメラモデル開発セット(標準イメージ)の場合で説明します。 起動時には、以下のように/dev/video0と/dev/video1が作成されています。
[root@armadillo810-0 (ttySC2) ~]# ls -1 /dev/video*
/dev/video0
/dev/video1
v4l-utilsに含まれるv4l2-ctlコマンドを、以下のように実行することで、どのデバイスファイルが、どのカメラに対応しているか調べることができます。
1.ATDEを起動して、MicroSDカードを接続してアンマウントする
SDカードを接続すると自動的にマウントされる
[atde ~]$ mount
/dev/sdb1 on /media/略
ので、下記コマンドでアンマウントする。
[atde ~]$ sudo umount /dev/sdb1
2.fdiskコマンドでMicroSDカードのパーティションを構成
準備)
Armadilloで、転送したいファイルを /home/www-dataに置く。
下記例において、
とする。
方法1:htmlを使う
<a href="http://192.168.10.10/log10.txt" download="log10.txt"> Armadillo log </a> </br>
という内容のhtmlファイルを作る。
htmlファイルをダブルクリックするとWebブラウザが開いて。 Armadillo log という文字が表示される。
当方が使ったWebブラウザはFirefox。
Armadillo logの文字を右クリックして、 名前を付けてリンク先を保存 すると、log10.txtがダウンロードされる。
Armadilloを標準イメージで起動すると、 /etc/network/interfaces の
auto lo eth0
iface eth0 inet dhcp
に基づきDHCPでアドレスを取得するようにネットワーク設定される。
上記の設定でArmadilloを起動後、固定IPアドレスに変更するには、下記のようにifconfigコマンドで設定できる。
[armadillo ~]# ifconfig eth0 192.168.10.0 up
ただし、長時間たつとIPアドレスが変更されることがある。
これは、DHCPクライアントのプロセス
が動作していることが要因のようなので、DHCPクライアントを止める。
・恒久的な方法:DHCPクライアント動作させない
Armadillo-840/810開発セットに付属しているUSBシリアル変換アダプタ(FTDI 社製FT232RL内臓)をPCに接続しても、 自動でドライバが認識しない場合は、以下のサイトからダウンロードしてください。
http://www.ftdichip.com/Drivers/VCP.htm
「Currently Supported VCP Drivers」のx86(32bit) OR x64(64bit)
お使いのPCに合わせたOS/アーキテクチャのものをダウンロードしてください。
Armadillo-400シリーズのドライバにはLEDクラスが用意されています。
https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_software_manual_ja-1.9.1/ch09.html#sec-led-class
Armadillo-420/440に標準で用意されている red / yellow / green のLED以外に、 新しいLEDを追加する際の手順です。
今回は、例としてCON9_28ピンをLEDクラスに割り当てます。 また諸事情により、kernel2.6.35に対する修正方法を記載していますが、2.6.26でも大きな違いはないと思います。
まずは以下のソースを編集します。
ユーザーモードqemuを使うと、amd64もしくはi386アーキテクチャのLinux上で、armアーキテクチャのバイナリが動かせます。 この仕組みを使って、ATDE上でArmadillo-800シリーズ用のDebian(armhfアーキテクチャ)を動かす方法を紹介します。
Armadillo-400シリーズのSoCであるi.MX257には、CANコントローラは2つ(CAN1、CAN2)あります。 しかし、現在のカーネルソースでは、CON14のCAN2のみを有効にできるようになっています。
CON11にマルチプレクサされているCAN1を有効化する手順を紹介します。
(注意)
こちらはハードウェアを接続しての検証はしておりません。またCAN2を有効化している環境を想定しています。CAN2を有効化するには以下を参照してください。
https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_software_manual_ja-1.9.1/ch09.html#sec-CAN
環境: linux-2.6.26-at20
ifconfigコマンドを使えば、IPアドレスを簡単に設定できる
[armadillo ~]# ifconfig eth0 192.168.11.36 up
helpを読むと他にも設定できることがわかった。 broadcastは
[armadillo ~]# ifconfig eth0 broadcast 0.0.0.0 up
netmaskは
[armadillo ~]# ifconfig eth0 netmask 255.255.255.0 up
などなど。
実行結果を標準出力とファイルの両方に出力する必要があった。
(ファイルにログを残しつつも、コンソールでリアルタイムにログを確認したかった。)
teeコマンドを使えばよかった。 例えば、psコマンドの出力を標準出力とtemp.txtに出力したい場合は、
[armadillo ~]# ps | tee temp.txt
例えば、makeのログを標準出力とtemp.txtに出力したい場合は、
[armadillo ~/atmark-dist]# make 2>&1 | tee temp.txt
Armadillo上で動作しているプロセスの物理メモリ使用量を調べてみます。
Armadillo-440の標準イメージで自動起動されるfunctesterの場合、まずは
[root@armadillo440-0 (ttymxc1) ~]# ps | grep functester
PID Uid VmSize Stat Command
1358 root 6352 S functester
でPIDを確認します。
/proc/[プロセスのID]/status
をcatで確認します。 上記のfunctesterの場合は、プロセスIDは1358なので、
Armadillo-400シリーズのUART2は、標準のカーネルコンフィギュレーションでは ハードフロー制御が有効になっており、make menuconfigからは設定変更できない。
そこで、ハードフロー制御を無効にできるようにする。
備考)以下の説明において、、ディレクトリ構成は、 Armadillo実践開発ガイド第1部7.2. Atmark Distを使ったルートファイルシステムの作成に基づいて環境構築しているものとする。
atmark-dist/linux-2.6.x/arch/arm/mach-mx25のKconfig内で、Armadillo-410/420/440については、 デフォルトでUART2のハードフロー制御が有効になるように設定されているので、その設定を削除する。
Armadillo-400シリーズで使用可能であった、gpioctrlをArmadillo-840でも使用できるようにしてみたいと思います。 (注意) 実際にハードウェアを接続しての検証はしておりません。 あくまでソフトウェア的に移植をしたところまでですので、ご了承ください。
[9.9.2. Armadillo-200 シリーズ互換 GPIO ドライバー]
https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_software_manual_ja-1.9.1/ch09.html#sec-armadillo-200-series-gpio-driver
Howto : Armadillo-810/840で IEEE802.11ac USB無線LANアダプタ GW-450Sを動作させるを参考に、Armadillo-840のDebian環境(SDカード使用)でGW-450Sを使える環境を作成してみました。
Armadillo-400シリーズには、swmgrというスイッチを押した際に任意のコマンドを実行するツールが標準でインストールされていました。
[Armadillo-440 液晶モデル開発セット スタートアップガイド]
https://manual.atmark-techno.com/armadillo-4x0/armadillo-440_startup_guide_ja-1.1.9/ch09.html#sec-08-2
このswmgrをArmadillo-840でも使えるようにしてみます。
LANケーブル接続時にDHCPを使用して、IPアドレスを取得する方法として、 ifplugdを使用する方法があります。 以下、Armadilloでifplugdを使用する手順について説明いたします。
Armadillo-400シリーズのAtmark Distで標準でインストールされるbusyboxのバージョンは [ 1.00-rc3 ] です。 このbusyboxを [ 1.20.2 ] に上げてみた際の、作業メモです。
ソースコードをビルドする際に、特定のファイルが必要で、それをDebianパッケージからインストールしたい場合があると思います。そういった際に便利な方法です。
Armadillo-810/840でHALCONを利用したアプリを実行するとエラーが出力される場合があります。
2014年11月7日時点でHALCONエラーの要因が判明しているものについて記載します。
ライセンスファイル(/opt/halcon/license/license.dat)が存在しない場合に出力されます。
ライセンスファイル(/opt/halcon/license/license.dat)の内容がおかしい場合に出力されます。
Xサーバーに接続できない場合や、ウィンドウを開けない場合に出力されます。
久しぶりにArmadillo-420/440のブートローダー「hermit-at」をカスタマイズしたので記事にしてみました。
上記が必要な場面は、電源ON/OFF(リセット)以外の制御が行えない状況下で、マイクロSDに格納されているシステムイメージを更新するといった場面です。
システムリカバリにも利用可能です。
過去に、Armadillo-810での作業中に、やらかしてしまった失敗談を参考まで。
とある問題の切り分けのためにフラッシュ用のboot loaderを、Hermit-At Winを使って、何回か書き換えている最中に、 hermitが立ち上がらなくなる事象が発生。
USBシリアル変換チップのスライドで、保守モードにしようがOS自動起動モードにしようが、シリアルコンソールには何も表示されない。 ハード故障かと思ったが、LEDは点灯しているし、問題はなさそう。
Hermit-At Winから再度書き換えたいが、targetにつながらないといわれる。 ふと再度Hermit-At Winの画面を見ると、前回フラッシュに書き込んだファイルが、SDカード用のboot loaderでした。
復旧方法は以下の通り。
以上
Atmark Distで動かしていたQMLアプリケーションを、Debianへ移行した際のメモです。
Armadillo-840用のDebianユーザーランドにはQt5のパッケージがインストール済のため、 特にQt関係のパッケージ追加は必要なかった。
ただし日本語フォントが入っていなかったので、ひとまずtakaoフォントをインストールした。
#apt-get install ttf-takao-gothic
しかし以下のようにQMLを実行してみたが、タッチイベントに反応しない。
# QT_QPA_EGLFS_DISPLAY=1
# QT_QPA_EGLFS_WIDTH=800
# QT_QPA_EGLFS_HEIGHT=480
# qmlscene ./hoge.qml
調べた結果、pluginオプションでevdevtouchの指定が必要のようです。
# qmlscene ./hoge.qml -plugin evdevtouch:/dev/input/event0
以上
開発したアプリケーションや、設定ファイルなどを、Atmark Distで作ったユーザーランドに配置する方法について紹介します。
例として、 Howto : Armadillo-440でQt! 第3回 で作成されたMainWindowにラベルを貼りつけて3種類のフォントで「こんにちは」を表示する方法を示す。
1.Armadillo-440のROMのユーザーランド領域には、日本語Truetypeフォントを複数置けるサイズはないので、予め、Truetypeフォント書き込んだMicroSDをArmadillo-440に挿入して起動する。
(下記サンプルコードでは、TakaoGothic.ttf、TakaoMincho.ttf、sazanami-mincho.ttf をMicroSDに置いた場合である。これらのttfファイルは、ATDEの/usr/share/fonts/truetype/にある。)
2.Armadilloの/usr/local/Trolltech/Qt-4.8.3-qws-armel/lib/fonts のフォントファイルを削除する。(標準では、TakaoPGothic.ttfが存在。)
Armadilloのユーザーランドには、「Atmark Dist」と「Debian GNU/Linux」が使用できます。 それぞれに特徴があり、どういった場面でどちらを使えば良いかわからない場合もあるかと 思います。 今回は、簡単にですが「Atmark Dist」と「Debian GNU/Linux」の選び方について紹介します。
Howto : Armadillo-440でQt! 第2回に紹介されているQtに対応したATDE(atde4-qt-amd64)でビルドした場合、 フォントは、 atmark-dist/romfs/usr/local/Trolltech/Qt-4.8.3-qws-armel/lib/fonts の下に置かれる。 (デフォルトは、TakaoPGothic.ttf)
簡易的にフォントを変更する場合は、TakaoPGothic.ttfを削除して 別のフォント(例えばTakaoPMincho.ttfや、sazanami-gothic.ttf等)を置いてmake imageする。
補足)ATDEだと、/usr/share/fonts/truetype/内にフォントファイルがある。
例として、 Howto : Armadillo-440でQt! 第3回 で作成されたMainWindowにラベルを貼りつけて「こんにちは」を表示する方法を示す。
QtCreatorで、
1.「編集」を選択して、「mainwindow.cpp」をダブルクリックする。
->mainwindow.cppのソースの編集画面に変わる。
2.mainwindow.cppのインクルードファイルに
#include <QLabel>
#include <QTextCodec>
を追加。
MainWindow::MainWindowに下記のように
/***** Display Japanese: begin ****/
と /***** Display Japanese: end ****/
で囲んだ範囲を追加。
Howto : Debianのパッケージに含まれるコンパイル済みのバイナリをArmadilloで動作させる方法を参考に、Armadillo-400シリーズでPythonをインストールしたユーザーランドイメージを作成してみました。
インストールしたパッケージは以下の通りです。
Armadillo-840でQMLを使ってテキストを90度回転させるサンプルコードを書いてみました。
10秒かけて[Hello World]という文字が90度回転し、さらに10秒かけて元の表示位置に戻ります。
Armadillo上で、テキストファイルの改行コードがLFのものをLF+CRにする方法を試してみた。
例えば、改行コードがLFのテキストファイル"test0.txt"を、改行コードがLF+CRのテキストファイル"test1.txt"にするには 下記のようなコマンドになる。
[armadillo ~]# awk '{sub(/$/, "\r"); print}' test0.txt > test1.txt
trコマンドやsedコマンドでも可能かもしれないが、当方はうまい方法が見つからなかった。 nkfコマンドとiconvコマンドは標準イメージでは有効になっていなかった。
以前のブログでは USBでArmadillo-840とプリンタを接続しました。
https://users.atmark-techno.com/blog/750/969
今回試しているNP-2511はUSB以外にもRS232Cで接続することが可能で、ユーザーズガイドにもプリンタの
追加のための手順も記載されています。
今回はArmadillo-840とNP-2511をRS232Cで接続してみたいと思います。