第8章 その他のデバイス

8.1. LED

Armadillo-400シリーズのLEDは、LEDクラスとして実装されています。LEDクラスディレクトリ以下のファイルによってLEDの制御を行うことができます。LEDクラスディレクトリとLEDの対応については、表8.1「LEDクラスディレクトリとLEDの対応」を参照してください。

表8.1 LEDクラスディレクトリとLEDの対応

LEDクラスディレクトリ説明
/sys/class/leds/red/LED3 (赤)
/sys/class/leds/green/LED4 (緑)
/sys/class/leds/yellow/LED5 (黄)

8.1.1. LEDを点灯/消灯する

LEDクラスディレクトリ以下のbrightnessファイルへ値を書き込むことによって、LEDの点灯/消灯を行うことができます。brightnessに書き込む有効な値は0~255です。

brightnessに0以外の値を書き込むとLEDが点灯します。Armadillo-400シリーズのLEDには輝度制御の機能が無いため値は意味を持ちません。

[armadillo ~]# echo 1 > /sys/class/leds/yellow/brightness

図8.1 LED5を点灯させる


brightnessに0値を書き込むとLEDが消灯します。

[armadillo ~]# echo 0 > /sys/class/leds/yellow/brightness

図8.2 LED5を消灯させる


brightnessを読み出すとLEDの状態が取得できます。0が消灯、0以外が点灯を表わします。

[armadillo ~]# cat /sys/class/leds/yellow/brightness
0

図8.3 LED5の状態を表示する


8.1.2. トリガを使用する

LEDクラスディレクトリ以下のtriggerファイルへ値を書き込むことによってLEDの点灯/消灯にトリガを設定することができます。triggerに書き込む有効な値は表8.2「triggerの設定」を参照してください。

表8.2 triggerの設定

設定説明
noneトリガを設定しません。
mmc0microSDカードのアクセスランプにします。
timer任意のタイミングで点灯/消灯を行います。この設定にすることにより、LEDクラスディレクトリ以下にdelay_on, delay_offファイルが出現し、それぞれ点灯時間, 消灯時間をミリ秒単位で指定します。
heartbeat心拍のように点灯/消灯を行います。
default-on主にカーネルから使用します。起動時にLEDが点灯します。

以下のコマンドを実行すると、LED3が1秒点灯、500ミリ秒消灯を繰り返します。

[armadillo ~]# echo timer > /sys/class/leds/red/trigger
[armadillo ~]# echo 1000 > /sys/class/leds/red/delay_on
[armadillo ~]# echo 500 > /sys/class/leds/red/delay_off

図8.4 LED3のトリガにtimerを指定する


triggerを読み出すとLEDのトリガが取得できます。[]が付いているものが現在のトリガです。

[armadillo ~]# cat /sys/class/leds/yellow/trigger
[none] mmc0 timer heartbeat default-on

図8.5 LED3のトリガを表示する


8.2. GPIO

Armadillo-400シリーズのGPIOは、generic GPIOとして実装されています。GPIOディレクトリ以下のファイルによってGPIOの制御を行うことができます。GPIOディレクトリとGPIOの対応については、表8.3「GPIOディレクトリとGPIOの対応」を参照してください。

表8.3 GPIOディレクトリとGPIOの対応

GPIOディレクトリ説明
/sys/class/gpio/CON9_1/CON9 1ピン
/sys/class/gpio/CON9_2/CON9 2ピン
/sys/class/gpio/CON9_11/CON9 11ピン
/sys/class/gpio/CON9_12/CON9 12ピン
/sys/class/gpio/CON9_13/CON9 13ピン
/sys/class/gpio/CON9_14/CON9 14ピン
/sys/class/gpio/CON9_15/CON9 15ピン
/sys/class/gpio/CON9_16/CON9 16ピン
/sys/class/gpio/CON9_17/CON9 17ピン
/sys/class/gpio/CON9_18/CON9 18ピン
/sys/class/gpio/CON9_21/CON9 21ピン
/sys/class/gpio/CON9_22/CON9 22ピン
/sys/class/gpio/CON9_23/CON9 23ピン
/sys/class/gpio/CON9_24/CON9 24ピン
/sys/class/gpio/CON9_25/CON9 25ピン
/sys/class/gpio/CON9_26/CON9 26ピン
/sys/class/gpio/CON9_27/CON9 27ピン
/sys/class/gpio/CON9_28/CON9 28ピン

8.2.1. 入出力方向を変更する

GPIOディレクトリ以下のdirectionファイルへ値を書き込むことによって、入出力方向を変更することができます。directionに書き込む有効な値は表8.4「directionの設定」を参照してください。

表8.4 directionの設定

設定説明
high入出力方向をOUTPUTに設定します。入力レベルの取得/設定を行うことができます。入力レベルはHIGHレベルになります。
out入出力方向をOUTPUTに設定します。入力レベルの取得/設定を行うことができます。入力レベルはLOWレベルになります。
lowoutを設定した場合と同じです。
in入出力方向をINPUTに設定します。入力レベルの取得を行うことができますが設定はできません。

8.2.2. 入力レベルを取得する

GPIOディレクトリ以下のvalueファイルへ値を読み出すことによって、入力レベルを取得することができます。0はLOWレベル、1はHIGHレベルを表わします。入力レベルの取得は入出力方向がINPUT, OUTPUTのどちらでも行うことができます。

[armadillo ~]# cat /sys/class/gpio/CON9_1/value
0

図8.6 CON9_1の入力レベルを取得する


8.2.3. 出力レベルを設定する

GPIOディレクトリ以下のvalueファイルへ値を書き込むことによって、出力レベルを設定することができます。0はLOWレベル、0以外はHIGHレベルを表わします。出力レベルの設定は入出力方向がOUTPUTでなければ行うことはできません。

[armadillo ~]# echo 1 > /sys/class/gpio/CON9_2/value

図8.7 CON9_2の出力レベルを設定する


8.3. RTC

Armadillo-420ベーシックモデル開発セットでは、RTC オプションモジュールが標準で接続されています。そのため、RTC(カレンダ時計)の機能により、電源を遮断しても時刻を保持することができます。

RTCに時刻を設定するためには、まずシステムクロックを設定します。その後に、ハードウェアクロック(RTC)をシステムクロックと一致させる手順となります。

8.3.1. システムクロックをdateで設定する

dateコマンドの引数で渡す時刻のフォーマットは[MMDDhhmmCCYY.ss]となります。以下の例では、現在時刻として2015年10月28日12時34分00秒に設定しています。

[armadillo ~]# date 現在のシステムクロックを表示
[armadillo ~]# date 102812342015.00
[armadillo ~]# date
※システムクロックが正しく設定されているか確認する
      

8.3.2. システムクロックをNTPクライアントで設定する

NTPクライアントを使用してシステムクロックを設定することができます。詳しくは「NTPクライアント」を参照してください。

8.3.3. ハードウェクロックを設定する

[armadillo ~]# hwclock ハードウェアクロックを表示
[armadillo ~]# hwclock --utc --systohc ハードウェアクロックをUTCで設定
[armadillo ~]# hwclock
※ハードウェアクロックが正しく設定されたか確認する
      

8.4. UVC対応Webカメラ

Armadillo-400 シリーズでは、UVC(USB Video Class)対応のWebカメラを使用することができます[10]

Armadillo-420ベーシックモデル開発セットの標準イメージでは、USB High Speedポート(CON5 下段)にUVC対応Webカメラを接続すると、自動でビデオサーバーが起動しブラウザ経由でカメラが撮影した画像を閲覧することができます。

ビデオサーバーには、MJPG-streamerを使用しています。Webカメラが接続されると、udevによりMJPG-streamerを起動します。MJPG-streamer起動中は、LED3(赤)が点滅します。

LED3(赤)が点滅している状態で、Webブラウザで http://(Armadillo-420のIPアドレス):8080/ にアクセスすると、MJPG-Streamerのデモページが表示されます。

MJPG-Streamerデモページ

図8.8 MJPG-Streamerデモページ


[警告]

Javaによるサンプルを動作させるには、使用しているPCに適切にJavaランタイムがインストールされている必要があります。また、InternetExplolerでStreamを表示するには、PCにコーデックが適切にインストールされている必要があります。

[注記]

MJPG-streamerが動作している時にWebカメラを引き抜くと、カーネルが下記のようなワーニングメッセージをコンソールに表示します。このメッセージは、問題ありません[11]。このメッセージは、Webカメラのように物理的には1つのデバイスですが、内部的には複数の機能 (この場合はビデオとコントロール用の入力)を持つデバイスで発生しています。カーネルが保持している複数のデバイスの後処理が行われた場合に、すでに片方が後処理されているにもかかわらず、もう一度後処理をしようとした事をカーネルが検知しワーニングを出しています。現在、問題の報告や修正案が Linux Kernel Mailing List に提出されていますが Linux v4.1 でもまだ直っていません。

ワーニングを表示しないようにするには、MJPEG-streamerを終了してから Web カメラを抜いてください。

usb 2-1: USB disconnect, device number 2
------------[ cut here ]------------
WARNING: CPU: 0 PID: 1631 at fs/sysfs/group.c:216 sysfs_remove_group+0x4c/0x94()
sysfs group c06e0c58 not found for kobject 'event1'
Modules linked in:
CPU: 0 PID: 1631 Comm: mjpg_streamer Not tainted 3.14.36-at2 #7
[<c000d838>] (unwind_backtrace) from [<c000bcd0>] (show_stack+0x10/0x14)
[<c000bcd0>] (show_stack) from [<c0017e1c>] (warn_slowpath_common+0x64/0x84)
[<c0017e1c>] (warn_slowpath_common) from [<c0017ebc>] (warn_slowpath_fmt+0x2c/0x3c)
[<c0017ebc>] (warn_slowpath_fmt) from [<c0151d2c>] (sysfs_remove_group+0x4c/0x94)
[<c0151d2c>] (sysfs_remove_group) from [<c0286158>] (device_del+0x34/0x16c)
[<c0286158>] (device_del) from [<c03046c8>] (evdev_disconnect+0x18/0x44)
[<c03046c8>] (evdev_disconnect) from [<c0302580>] (__input_unregister_device+0xe0/0x180)
[<c0302580>] (__input_unregister_device) from [<c03027fc>] (input_unregister_device+0x4c/0x70)
[<c03027fc>] (input_unregister_device) from [<c032319c>] (uvc_delete+0xc/0xfc)
[<c032319c>] (uvc_delete) from [<c0310e3c>] (v4l2_device_release+0x98/0xb8)
[<c0310e3c>] (v4l2_device_release) from [<c02857cc>] (device_release+0x5c/0x90)
[<c02857cc>] (device_release) from [<c022f19c>] (kobject_release+0x60/0x74)
[<c022f19c>] (kobject_release) from [<c030f7b0>] (v4l2_release+0x60/0x70)
[<c030f7b0>] (v4l2_release) from [<c00f0a50>] (__fput+0xd4/0x214)
[<c00f0a50>] (__fput) from [<c0033440>] (task_work_run+0x94/0xa8)
[<c0033440>] (task_work_run) from [<c001a130>] (do_exit+0x498/0xa40)
[<c001a130>] (do_exit) from [<c001a7d0>] (do_group_exit+0xcc/0xf8)
[<c001a7d0>] (do_group_exit) from [<c001a80c>] (__wake_up_parent+0x0/0x18)
---[ end trace 128ed9d0b95bde7e ]---
------------[ cut here ]------------
WARNING: CPU: 0 PID: 1631 at fs/sysfs/group.c:216 sysfs_remove_group+0x4c/0x94()
sysfs group c06e0c58 not found for kobject 'input1'
Modules linked in:
CPU: 0 PID: 1631 Comm: mjpg_streamer Tainted: G        W    3.14.36-at2 #7
[<c000d838>] (unwind_backtrace) from [<c000bcd0>] (show_stack+0x10/0x14)
[<c000bcd0>] (show_stack) from [<c0017e1c>] (warn_slowpath_common+0x64/0x84)
  :

      


[10] Armadillo-400 シリーズで動作確認済みのデバイスについては、Armadilloサイトの動作デバイス(http://armadillo.atmark-techno.com/devices)のページをご参照ください。

[11] 見た目はカーネル Oops や Panic に似ていますが...