第12章 開発の基本的な流れ

この章では Armadillo-X1 を使ったアプリケーションソフトウェアの 開発方法について説明します。

Armadillo-X1を使ったアプリケーションソフトウェア開発には、 Ruby等の軽量スクリプト言語を使うことができます。

新たにパケット通信、各種アドオンボードを利用したセンサーからのデータ読み出し を実装したアプリケーションプログラムを実装するときは、Ruby等の軽量スクリプト言語を 使った開発をお勧めします。

Armadillo-X1 の出荷用のユーザーランドには、最初からRubyインタプリタ がインストールされているので、PCと同じように開発を進めることができます。

もちろん、Rubyに限らず、Debian の提供する豊富なパッケージ群から Python や Go、 Haskel といったスクリプト言語を自由にインストールして使うことも可能です。

12.1. 軽量スクリプト言語によるセンサーデータの送信例(Ruby)

ここでは、サンプルとしてArmadillo-X1 に搭載された温度センサーの値を 定期的に HTTP POST でパラメータ名 "temp" に格納した値として送信する例を示します。

温度センサーからの値の取得は sysfs から可能です。

ここで作成するアプリケーションはArmadillo-X1で動作するクライアントと ATDEで動作するテスト用のサーバーの2つです。 ATDEで動作させるためのテスト用のサーバーは、典型的なHTTPプロトコルで アクセスできるWeb APIを持ったサービスを模擬しています。テスト用サーバーは 単に入力されたPOST リクエストの内容を変数に格納してコンソールに出力し、 クライアントには"Thanks!"という文字列を返します。

12.1.1. テスト用サーバーの実装

最初に ATDE6 にテスト用サーバーの動作に必要なパッケージをインストールします。

[PC ~]$  sudo apt-get install ruby
[PC ~]$  sudo gem install sinatra

図12.1 ruby と sinatra のインストール


次にエディタで次のコードを入力して、server.rb として保存してください。

require 'sinatra'

post '/' do
  puts "Temperature is #{params[:temp]}"
  "Thanks!\n"
end

図12.2 テスト用サーバー (server.rb)


12.1.2. テスト用サーバーの動作確認

Armadillo-X1 でクライアントアプリケーションを動かす前に、テスト用サーバーの動作確認を行います。 動作確認は Armadillo-X1 から cURL コマンドを使って、クライアントアプリケーションと同等の リクエストを送ってみます。

まず、ATDE6 の IPアドレス を確認しておきます。下記の例では、ip または ifconfig コマンドで確認するとATDE6 のIPアドレス が 172.16.2.117 であることがわかります。

[PC ~]$  ip addr show eth0
      2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:30:b0:e0 brd ff:ff:ff:ff:ff:ff
    inet 172.16.2.117/16 brd 172.16.255.255 scope global dynamic eth0
       valid_lft 65913sec preferred_lft 65913sec
    inet6 fe80::20c:29ff:fe30:b0e0/64 scope link
       valid_lft forever preferred_lft forever

図12.3 IPアドレスの確認 (ipコマンド)


[PC ~]$  sudo ifconfig
eth0      Link encap:イーサネット  ハードウェアアドレス 00:0c:29:30:b0:e0
          inetアドレス:172.16.2.117 ブロードキャスト:172.16.255.255  マスク:255.255.0.0
          inet6アドレス: fe80::20c:29ff:fe30:b0e0/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:132712 エラー:59329 損失:0 オーバラン:0 フレーム:0
          TXパケット:13632 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:1000
          RXバイト:124163876 (118.4 MiB)  TXバイト:970956 (948.1 KiB)
          割り込み:19 ベースアドレス:0x2024

図12.4 IPアドレスの確認 (ifconfigコマンド)


次の例のように server.rb を実行すると、全てのIPアドレスからのリクエストを 8081番ポートでWebサーバーとして待ち受けます。

[PC ~]$  ruby server.rb -p 8081 -o 0.0.0.0
[2016-03-28 16:02:15] INFO  WEBrick 1.3.1
[2016-03-28 16:02:15] INFO  ruby 2.1.5 (2014-11-13) [i386-linux-gnu]
== Sinatra (v1.4.7) has taken the stage on 4567 for development with backup from WEBrick
[2016-03-28 16:02:15] INFO  WEBrick::HTTPServer#start: pid=10849 port=8081
    

ここで、Armadillo-X1 から cURL を使ってテストデータを送ってみましょう。正しく通信できた場合は、"Thanks!" の文字列が表示されます。もし、"Connection refused" 等が表示された場合は、一旦 ATDE6 のIPアドレスに ping を送信してネットワークの設定に問題が無いか確認してください。

[armadillo ~]$   curl -d "temp=30" 172.16.2.117:8081
Thanks!

図12.5 curl によるテストデータの送信


正しく受信できた場合は、ATDE6で起動しているテスト用サーバーが起動しているコンソールに下記の文字列が出力されます。

Temperature is 30

図12.6 ATDE6 におけるテストデータの受信表示


12.2. クライアントの実装

Armadillo-X1 で動作するクライアントを実装します。下記のコードをエディタで入力して、client.rb として保存してください。ファイルは、ATDE6 上で作成しても Armadillo-X1 上で、vi等を使って作成しても構いません。ATDE6 で作成した場合は次の手順で、Armadillo-X1 へ転送します。

require 'net/http'

uri = URI.parse(ARGV[0])
thermal_sys = "/sys/class/thermal/thermal_zone0/temp"
File.open(thermal_sys, "r") do |f|
  @temp=(f.read.to_f/1000).round(2)
end
response = Net::HTTP.post_form(uri, {"temp" => @temp})

puts response.body

図12.7 温度送信クライアント(client.rb)


12.3. Armadillo-X1へのファイルの転送

ATDE6 上で作成したソースコードを Armadillo-X1 に配置する方法の一例として、 ここでは、SSH を使った転送方法を説明します。

[armadillo ~]#  apt-get install openssh-server

図12.8 Armadillo-X1 へのSSHサーバーのインストール


[ATDE ~]$ scp client.rb atmark@[armadilloのIPアドレス]:~/

図12.9 ATDE6 から Armadillo-X1 への client.rb の転送


12.4. クライアントの実行

作成した温度送信クライアントを実行します。第一引数にはテスト用サーバーが動いているATDE6のIPアドレスとポートをHTTPスキーマのURIで記述してください。

[armadillo ~]#  ruby client.rb  http://172.16.2.117:8081
Thanks!

図12.10 クライアントの実行方法


正しくクライアントとの通信ができた場合、ATDE6で動作しているサーバーのコンソールには小数点以下2ケタの温度が表示されます。

Temperature is 33.02

図12.11 ATDE6 における温度データの受信表示


12.5. C言語による開発環境

C/C++等の資産がある場合は、Armadillo上でgcc/g++を使ってアプリケーションを コンパイルする事もできます。

12.5.1. 開発環境の準備

アプリケーションをコンパイルするために、Armadilloにgcc等を含むツールチェーンを インストールします。 Armadilloのコンソールで次のコマンドを実行してください。

[armadillo ~]#  apt-get install build-essential

図12.12 ツールチェーンのインストール


これで、gcc, make, gdb等が使えるようになりました。 次に、アプリケーションのビルドに必要なライブラリとヘッダーファイルを インストールします。例えば libssl であれば次のコマンドでインストールする ことができます。

[armadillo ~]#  apt-get install libssl-dev

図12.13 開発用パッケージのインストールの例 (libsslの場合)


例に示すように、コンパイルに必要なヘッダーファイルを含むパッケージは、 普通 -dev という名前が付いています。

[ティップ]

必要なヘッダファイルの名前や、共有ライブラリのファイル名がわかっている 場合は、Debian プロジェクトサイトの「パッケージの内容を検索」からファイルの 含まれるパッケージの名前を探す事ができます。

Debian -- パッケージ パッケージの内容を検索 https://www.debian.org/distrib/packages#search_contents

また、パッケージの部分的な名前が分っている場合は「パッケージ管理」で紹介した、 apt-cache search コマンドを使って必要なパッケージを探す事もできます。