2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IoTLT (IoTや電子工作ネタなど)Advent Calendar 2024

Day 15

Moddable SDK 5.2.0で追加されたカメラ機能を試してみた

Last updated at Posted at 2024-12-14

はじめに

2024年11月14日、Moddable SDK 5.2.0がリリースされて、カメラ機能が含まれていました。

スクリーンショット 2024-11-23 11.03.49.png

積みボードを崩すつもりが、積んでしまった件

カメラ機能を試すため、新しいボードを積んでしまいました。

Seeed Studio XIAO ESP32S3 Sense

M5Stack AtomS3R Cam

M5Stack AtomS3R M12

環境構築(再構築)

xs-devツールを使用して環境を構築します。
xs-devツールを更新します。(私の環境では、v0.30.4 -> V0.33.1 へ更新)

npm update xs-dev

最初、SDKを更新(update)しようとしましたが、エラーが出たので環境を再構築しました。
環境を破棄します。

xs-dev teardown

Moddable SDKをインストールします。

xs-dev setup

環境変数(IDF_PYTHON_ENV_PATH)の問題でエラーが出たので、ターミナルを開き直します。
ESP-IDFをインストールします。

xs-dev setup --device esp32

ターミナルを開き直します。
エラーが発生しました。
インストールされているPythonのバージョンが3.9と異なると、エラーが発生します。

Last login: Sat Nov 23 12:51:54 on ttys000
Detecting the Python interpreter
Checking "python3" ...
Python 3.13.0
"python3" has been detected
Checking Python compatibility
Checking other ESP-IDF version.
Not using an unsupported version of tool openocd-esp32 found in PATH: 0.12.0. To use it, run '/opt/homebrew/opt/python@3.13/bin/python3.13 /Users/kitazaki/.local/share/esp32/esp-idf/tools/idf_tools.py export --prefer-system'
WARNING: Error while accessing the ESP-IDF version file in the Python environment: [Errno 2] No such file or directory: '/Users/kitazaki/.espressif/python_env/idf5.3_py3.13_env/idf_version.txt'
Adding ESP-IDF tools to PATH...
WARNING: Error while accessing the ESP-IDF version file in the Python environment: [Errno 2] No such file or directory: '/Users/kitazaki/.espressif/python_env/idf5.3_py3.13_env/idf_version.txt'
Checking if Python packages are up to date...
ERROR: /Users/kitazaki/.espressif/python_env/idf5.3_py3.13_env/bin/python doesn't exist! Please run the install script or "idf_tools.py install-python-env" in order to create it

ESP-IDFを再インストールします。

cd $IDF_PATH
./install.sh esp32

.zprofileに環境変数(MODDABLE、IDF_PATH)が設定されていることを確認します。

export MODDABLE="/Users/ユーザ名/.local/share/moddable"
export PATH="${MODDABLE}/build/bin/mac/release:$PATH"
export IDF_PATH="/Users/ユーザ名/.local/share/esp32/esp-idf"
source $IDF_PATH/export.sh

サンプルプログラムの実行

$MODDABLE/examples/io/imagein/camera ディレクトリにサンプルプログラムがあります。

camera-balls
camera-server
camera-server-jpeg
camera-server-motion-jpeg
camera-test

結論から言うと、AtomS3R CamやXIAO ESP32S3 Senseのように、デバイスにディスプレイが存在しないと動かないサンプルがありました。(ビルドでエラーが出ます)

camera-balls
camera-server
camera-test

動いたサンプル

camera-server-jpeg

ブラウザでデバイス(HTTPサーバ)へアクセスすると、デバイスのカメラで撮影したJPEG画像を表示します。
XIAO ESP32S3 Sense と M5Stack AtomS3R M12 で動作しました。
AtomS3R Camに搭載されているカメラ(GC0308)はJPEGを出力できないため、ビルド後の実行時にエラー("camera init failed")が発生します。
READMEにも記載されています。

cd $MODDABLE/examples/io/imagein/camera/camera-server-jpeg
UPLOAD_PORT=/dev/cu.usbmodem11101 mcconfig -d -m -p esp32/xiao_esp32s3_sense ssid="SSID" password="PASSWORD"

デバッガ(xsbug)のログに表示されるURLへブラウザでアクセスします。

1.jpg

2.jpg

camera-server-motion

ブラウザでデバイス(HTTPサーバ)へアクセスすると、デバイスのカメラで撮影した動画(Motion JPEG)を表示します。
XIAO ESP32S3 Sense と M5Stack AtomS3R M12 で動作しました。
AtomS3R Camは動作しませんでした。(JPEG出力に対応していないため)

XIAO ESP32S3 Sense は連続で動作させるとデバイスが高温になるので、注意してください。(ヒートシンクが発売されています)

3.jpg

4.jpg

M5Stack AtomS3R M12 は連続で動作させると画像が乱れ始めました。
カメラデバイス、または、画像データの処理速度が追いついていないかもしれません。(調査中)

調査完了 (2024年11月24日時点)

AtomS3R Camで動かす方法を探っていきます。
Cam と M12 は同じピン配列なので、同じデバイス定義ファイルで問題なさそうです。

デバイス定義ファイル(m5atom_s3r)

スクリーンショット 2024-11-23 19.45.57.png

ピン配列

Cam.jpg

M12.jpg

サンプルプログラム

AtomS3R Camにディスプレイを追加することでサンプルプログラムを動かすことができました。
以下のサンプルプログラムを使用します。

camera-server

ディスプレイが必要な理由

GC0308はJPEG出力に対応していないためRGB565で出力させますが、BMPを処理するのにCommodettoライブラリを使用するためscreen定義が必要です。

$MODDABLE/examples/manifest_commodetto.json を include している
 ↓

$MODDABLE/build/devices/esp32/setup/commodetto.js を preload している
 ↓
screen定義がないとエラー("no screen configured")を出力

最初、I2C接続のOLEDディスプレイ(SSD1306)を使用しましたが、エラー("unsupported pixel format")で動きませんでした。
SPI接続のIPSディスプレイ(ST7789)を使用してサンプルプログラムを動かすことができました。

ディスプレイのないデバイスにディスプレイを追加する方法(メモ)はこちらです。

プログラムの変更点

ディスプレイを使用するため、manifest.jsonに定義を追加します。

  • include
    • ST7789ドライバー
  • config
    • screen定義
  • defines
    • spi
    • ili9341 (ST7789ドライバーはili9341ドライバーを使用しています)
manifest.json
{
        "include": [
                "$(MODDABLE)/examples/manifest_base.json",
                "$(MODDABLE)/examples/manifest_net.json",
                "$(MODDABLE)/examples/manifest_commodetto.json",
                "$(MODULES)/network/http/manifest.json",
                "$(MODDABLE)/modules/io/imagein/camera/manifest.json",
                "$(MODULES)/drivers/st7789/manifest.json"
        ],
        "modules": {
                "commodetto/Bitmap": "$(COMMODETTO)/commodettoBitmap",
                "commodetto/Poco": "$(COMMODETTO)/commodettoPoco",
                "commodetto/*": "$(COMMODETTO)/commodettoPocoBlit",
                "commodetto/PixelsOut": "$(COMMODETTO)/commodettoPixelsOut",
                "*": [
                        "./main",
                        "./bmpSpooler"
                ]
        },
        "preload": [
                "commodetto/*",
                "bmpSpooler"
        ],
        "config": {
                "screen": "st7789",
                "touch": ""
        },
        "defines": {
                "spi": {
                        "mosi_pin": 6,
                        "miso_pin": -1,
                        "sck_pin": 7
                },
                "ili9341": {
                        "cs_pin": -1,
                        "dc_pin": 5,
                        "rst_pin": 8,
                        "spi_port": "SPI3_HOST",
                        "hz": 20000000,
                        "width": 240,
                        "height": 240
                }
        }
}

画像サイズが大きいとエラー(RangeError)が出るため、画像サイズを小さくします。

0.jpg

main.js
let width = 176, height = 144;

let width = 96, height = 96;

動作結果

デバッガ(xsbug)のログに出力されるURLへブラウザ(Firefoxはエラーが出ます。Chrome、または、Safariを使用します)からアクセスして、無事に画像(BMP)を表示できました。

2.jpg

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?