ブログ

Armadillo Base OS:DebianコンテナでBLE機器との通信を行う

at_takuma.fukuda
2023年10月27日 15時55分

はじめに

Armadillo-IoT G4およびArmadillo-IoT A6EにはWLAN+BTコンボモジュールが搭載されたモデルがあり、
BLE通信機能を持った機器などと通信させることが出来ます。

alpine linuxのコンテナ上での通信については製品マニュアルに手順の掲載がありますが、
Armadillo-IoT A6E製品マニュアル3.6.4. BT を使用する
この記事ではDebianコンテナを使う場合の手順についてご案内します。

概要

Debianコンテナの場合、bluezがインストールされていて、ネットワークへのアクセス権限があればBLE機器との通信を行う事が出来ます。
また、bluetoothctlコマンド等を使用するためにbluetoothデーモンを動作させるため、dbusとsystemdもインストールしておく必要があります。 Dockerfileを使ってあらかじめ上記がインストールされたDebianコンテナイメージを作成し、このイメージを使ったコンテナ上で動作を確認します。

手順

コンテナイメージの作成にあたって、この記事ではArmadillo上で直接コンテナイメージをビルドする手順をご紹介していますが、Armadillo上で動作するコンテナイメージの生成方法はこれ以外にも様々な方法がございます。
ATDE上のVSCodeを使ったコンテナイメージの生成などの方法においてもこの記事で紹介するDockerfileの内容は有効になりますので、それぞれの手法に沿った使い方で応用してください。

コンテナイメージ作成

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

[armadillo ~]# vi Dockerfile

#Armadillo-IoT G4の場合
FROM docker.io/arm64v8/debian:bullseye-slim
#Armadillo-IoT A6Eの場合
FROM docker.io/arm32v7/debian:bullseye-slim

RUN apt update && apt upgrade -y && apt -y install bluez dbus systemd

Dockerfileを元にコンテナイメージをビルドします。

[armadillo ~]# podman build -t localhost/debian:ble .

コンテナ起動ファイル作成

podman_startコマンドによるコンテナ起動のためのconfファイルを作成します。

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

set_image localhost/debian:ble
#コンテナ起動時にsystemdを動作させる
set_command /lib/systemd/systemd
set_network host
add_args --cap-add=NET_ADMIN

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

コンテナ起動

コンテナを起動してみましょう

[armadillo ~]# podman_start ble_test

動作確認

コンテナに入ってコマンドを実行し、動作確認を行います。

btmgmtコマンドを使用する場合

#コンテナに入る
[armadillo ~]# podman exec -ti ble_test /bin/bash

#btmgmtを実行
[container ~]# btmgmt
Index list with 1 item
hci0:   Primary controller
        addr XX:XX:XX:XX:XX:XX version 9 manufacturer 305 class 0x000000
        supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy configuration static-addr phy-configuration
        current settings: br/edr
        name CYW94373 UART 37.4MHz Class 1 wlbga sLNA-0102
        short name
hci0:   Configuration options
        supported options: public-address
        missing options: public-address

#hci0を選択
[mgmt]# select hci0
Selected index 0
[hci0]# power on
hci0 Set Powered complete, settings: powered br/edr
[hci0]# le on
hci0 Set Low Energy complete, settings: powered br/edr le

#周辺のbleデバイスを検索
[hci0]# find
Discovery started
hci0 type 7 discovering on
hci0 dev_found: XX:XX:XX:XX:XX:XX type LE Random rssi -76 flags 0x0004
AD flags 0x00
eir_len 8
#以下、周辺のデバイスが表示されます。

bluetoothctlコマンドを使用する場合

#コンテナに入る
[armadillo ~]# podman exec -ti ble_test /bin/bash

#bluetoothデーモンを再起動
[container ~]# systemctl restart bluetooth
root@armadillo:/# bluetoothctl
Agent registered
[CHG] Controller XX:XX:XX:XX:XX:XX Pairable: yes
[bluetooth]# scan on
Discovery started
[CHG] Controller XX:XX:XX:XX:XX:XX Discovering: yes
[NEW] Device XX:XX:XX:XX:XX:XX XXXXXXX
#以下、周辺のデバイスが表示されます。

このように作成したコンテナを応用し、BLEデバイスと通信するアプリケーションを開発してみて下さい。