ブログ

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

at_takuma.fukuda
2024年6月21日 13時15分

Armadillo-640には、デジタルRGB入力を持つ液晶パネルモジュールなどを接続することができる、LCD拡張インターフェースを備えております。
また、オプション品としてこのインタフェースに接続してタッチインタフェースとして使用可能な7インチタッチパネルWVGA液晶をご用意しています。
このタッチパネルを使用したGUIアプリケーションの動作例をご紹介します。
この記事のGUIアプリケーションはwxWidgetsを使って構築しています。
wxWidgetsで構築したArmadillo-640向けのサンプルアプリケーションとして、Armadillo-640のLEDを制御するアプリケーションがございます。
Armadillo-640 製品マニュアル (Debian GNU/Linux 10 対応) 20.6.1. wxWidgets を直接利用して GUI アプリケーションを開発する
このマニュアルおよびアプリケーションは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
ENV DISPLAY=:0
 
RUN apt-get update && apt-get upgrade -y \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y  ${PACKAGES} \
    && apt-get clean \
    && wget https://download.atmark-techno.com/sample/a640-wxwidgets-howto/wxwidgets_led.tar.gz \
    && tar zxf wxwidgets_led.tar.gz \
    && cd wxwidgets_led && make
 
# 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} /
 
# Modify as necessary
RUN useradd -m -u 1000 atmark
  • 環境変数DISPLAY=:0を設定
  • パッケージインストール時に「DEBIAN_FRONTEND=noninteractive 」を設定して対話形式を回避
  • アットマークテクノのWebサーバからサンプルアプリケーションのソースコードをダウンロードして解凍・ビルドを実行

packages.txt

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

bash
wget
build-essential
libwxgtk3.0-gtk3-dev
xorg
  • wget:ファイルダウンロードのため
  • build-essential:サンプルアプリケーションビルドのため
  • libwxgtk3.0-gtk3-dev:wxWidgets実行用ライブラリ
  • xorg:画面表示のため

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
 
# Allow LED to be written. This is application specific
# and should be changed depending on your needs.
add_volumes /sys:/sys
add_devices /dev/tty*
add_devices /dev/dri/card0
add_hotplugs 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/tty*,add_devices /dev/dri/card0:LCDインタフェースをマウント
  • add_hotplugs input:タッチパネルからの信号入力をホットプラグ指定

main.sh

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

#!/bin/bash -e
 
# For debug. If you need it, please comment in.
#set -x
 
startx &
cd /wxwidgets_led
./led

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

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

VSCodeを使わない構築方法

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

コンテナイメージビルド

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

[armadillo ~]# vi main.sh
 
#!/bin/bash -e
startx &
cd /wxwidgets_led
./led
 
[armadillo ~]# chmod +x main.sh

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

[armadillo ~]# vi Dockerfile
 
 
FROM docker.io/debian:bullseye-slim
ENV DISPLAY=:0
 
COPY main.sh /root/main.sh
RUN apt-get update && apt-get upgrade -y \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y  bash wget build-essential libwxgtk3.0-gtk3-dev xorg  \
    && apt-get clean \
    && wget https://download.atmark-techno.com/sample/a640-wxwidgets-howto/wxwidgets_led.tar.gz \
    && tar zxf wxwidgets_led.tar.gz \
    && cd wxwidgets_led && make
 
RUN useradd -m -u 1000 atmark

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

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

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

[armadillo ~]# podman images -a

confファイル

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

[armadillo ~]# vi /etc/atmark/containers/wxwidgets.conf
 
 
set_image localhost/wxwidgets:latest
 
add_volumes /sys:/sys
add_devices /dev/tty*
add_devices /dev/dri/card0
add_hotplugs input
 
add_args -it
 
add_armadillo_env
 
set_command bash /root/main.sh
 
 
[armadillo ~]# persist_file /etc/atmark/containers/wxwidgets.conf

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