ブログ

Armadillo-640(Armadillo Base OS):LCDタッチパネルインタフェースを使用する(Qt)

at_takuma.fukuda
2024年6月24日 7時56分

※注意事項※


オープンソース版の Qt は GPLv3/LGPLv3 ライセンスの下で配布されています。
利用する際には必ず各ライセンスに従ってください。
Qt には商用ライセンスも用意されています。
ライセンスに関する詳細は、Qt 公式サイト上の情報 を参照してください。

Armadillo-640には、デジタルRGB入力を持つ液晶パネルモジュールなどを接続することができる、LCD拡張インターフェースを備えております。
また、オプション品としてこのインタフェースに接続してタッチインタフェースとして使用可能な7インチタッチパネルWVGA液晶をご用意しています。
このタッチパネルを使用したGUIアプリケーションの動作例をご紹介します。
この記事のGUIアプリケーションはQtを使って構築されています。
Qt5のでもアプリケーションを使って、タッチパネルインタフェースの動作を確認することが出来ます。
Armadillo-640 製品マニュアル (Debian GNU/Linux 10 対応) 20.7. LCDインターフェースの動作確認
このマニュアルおよびアプリケーションはArmadillo-640に直接Debianをインストールした場合のものですが、Armadillo Base OSにおいてもDebianコンテナの上でこのアプリケーションを動作させることが可能です。
この記事ではこのアプリケーションが動作するコンテナの構築方法をご紹介します。

VSCodeを使った構築

VSCodeを使った構築方法をご案内します。
ATDEによる開発環境をまだ構築されていない方は、以下を参考に構築を行ってください。
3.3. 開発の準備

まだArmadilloを購入されていないなど、現時点では開発環境の構築が難しい方は、後ほど別の手法をご紹介します。

プロジェクト作成

以下を参考に「shell new project」を実行してCUIアプリケーション用のプロジェクトを作成してください。
3.13. CUI アプリケーションの開発

Dockerfile

作成したプロジェクト内の各ファイルを改造します。
まず、Dockerfileを次のように編集します。

# ARCH will be set appropriately by scripts/build_container_image.sh
ARG ARCH
FROM docker.io/${ARCH}/debian:bullseye-slim
LABEL version="2.0.0"

# Add apt download source information
COPY resources/etc/apt /etc/apt/

# Add extra packages to containers/packages.txt
ARG PACKAGES
RUN apt-get update && apt-get upgrade -y \
    && apt-get install -y ${PACKAGES} \
    && apt-get clean

# Add extra files you want to copy to 'resources' directory
# Note 'app' itself will not be part of the container, but
# used as a volume
# copying 'resources_${PRODUCT}' is optional and will not error if missing
# thanks to the [r] path glob. It is only intended for product quirks.
ARG PRODUCT
COPY resources [r]esources_${PRODUCT} /
ENV QT_QPA_PLATFORM=linuxfb
ENV QT_QPA_GENERIC_PLUGINS=evdevtouch:/dev/input/event1
# Modify as necessary
RUN useradd -m -u 1000 atmark

  • 環境変数QT_QPA_PLATFORM=linuxfbを設定 <\li>
  • 環境変数QT_QPA_GENERIC_PLUGINS=evdevtouch:/dev/input/event1を設定

packages.txt

packages.txtを以下の通りに編集してインストールするパッケージを指定します。

# packages that can be installed with `apt install` are
# listed here line by line and installed in the container.
bash
qt5-qmake
libqt5gui5
libqt5webengine-data
libqt5webkit5
qtbase5-examples

Qt5の実行用ライブラリとサンプルアプリケーションをインストール

app.conf

コンテナ実行用の設定ファイルを編集します。

set_image localhost/{{PROJECT}}:latest

# mount app sources and data:
# - /var/app/rollback/volumes can be rolled back on failed
# upgrades, suitable for application sources and assets.
# - /var/app/volumes is not copied on updates and more suitable
# for volatile data such as logs and databases.
add_volumes /var/app/rollback/volumes/{{PROJECT}}:/vol_app
add_volumes /var/app/volumes/{{PROJECT}}:/vol_data

add_devices /dev/fb0
add_devices /dev/input

# Allow input to containers and see output from containers
add_args -it

# Add environment variables set by Atmark Techno.
add_armadillo_env

# launch app
set_command bash /vol_app/src/main.sh
  • add_devices /dev/fb0:LCDインタフェースをマウント
  • add_devices /dev/input:タッチパネルからの信号入力を受けられるようinputデバイスをマウント

main.sh

コンテナ起動時に実行されるスクリプトを編集して、コンテナ起動時に自動的にアプリケーションが実行されるようにします。

#!/bin/bash -e

# For debug. If you need it, please comment in.
#set -x

cd /usr/lib/arm-linux-gnueabihf/qt5/examples/widgets/touch/fingerpaint/
./fingerpaint

サンプルアプリケーションを格納しているディレクトリに移動して実行ファイルをたたいています。
絶対パスで他のディレクトリから実行すると失敗するので注意が必要です。

以上の通りにファイルを編集してVSCodse上でコンテナをビルドし、
タッチパネルと接続済みのArmadillo-640へ転送すると自動的にアプリケーションが実行されます。

VSCodeを使わない構築方法

何らかの理由によりATDEおよびVSCodeを使用できない場合は、Armadillo-640をインターネットに接続出来るのであれば、直接コンソールを操作してアプリケーションコンテナを構築することが出来ます。

コンテナイメージビルド

Dockerfileからコンテナイメージをビルドします。
まずはコンテナ内に取り込むスクリプトファイルを作成して実行権限を与えます。

[armadillo ~]# vi main.sh

#!/bin/bash -e
cd /usr/lib/arm-linux-gnueabihf/qt5/examples/widgets/touch/fingerpaint/
./fingerpaint

[armadillo ~]# chmod +x main.sh

以下のようにDockerfileを作成します。

[armadillo ~]# vi Dockerfile


FROM docker.io/debian:bullseye-slim
ENV QT_QPA_PLATFORM=linuxfb
ENV QT_QPA_GENERIC_PLUGINS=evdevtouch:/dev/input/event1

COPY main.sh /root/main.sh
RUN apt-get update && apt-get upgrade -y \
    && apt-get install -y  bash qt5-qmake libqt5gui5 libqt5webengine-data libqt5webkit5 qtbase5-examples \
    && apt-get clean
    
RUN useradd -m -u 1000 atmark

VSCodeで使用したDockerfileとほぼ同じですが細部を修正しています。
このDockerfileを使ってコンテナイメージをビルドします。イメージ名は任意ですがこの記事ではqt5としておきます。

[armadillo ~]# podman build -t qt5:latest .

完了すると、localhost/qt5:latestというイメージが作成されているはずです。
下記コマンドで確認して下さい。

[armadillo ~]# podman images -a

confファイル

コンテナイメージからコンテナを実行するためのconfファイルを作成します。 これも基本的にはVSCodeでのビルド時のものと同じものとなります。 ファイル名は任意の名称で良いですが、ここではat5.confとします。

[armadillo ~]# vi /etc/atmark/containers/qt5.conf


set_image localhost/qt5:latest

add_devices /dev/fb0
add_devices /dev/input

add_args -it
add_args --privileged

add_armadillo_env

set_command bash /root/main.sh


[armadillo ~]# persist_file /etc/atmark/containers/qt5.conf

以上で準備完了です。Armadillo-640を再起動させると自動的にアプリケーションが実行されてタッチパネルに表示が行われます。