1
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?

はじめてね AtomVM(4) ESP32でLチカ v0.7.0-alpha.1 版

1
Last updated at Posted at 2026-05-04

はじめに

以前 AtomVM のバージョン 0.6.6 を使ってLチカをしました。その記事をはじめてね AtomVM(1) ESP32でLチカにまとめてます。
2026年5月5日の段階で安定版の最新はこの v0.6.6 ですが、アルファ版として 0.7.0-alpha.1 が出てます。これを試してみました。結論から言うとインストールから Lチカまでは同様に出来て、なおかつちょっと良いことがありました。以下は以前の記事が前提で、おおよそ差分だけ書いてます。

使った環境

母艦は Macbook Pro M1 で macOS は Tahoe 26.4.1 です。そして Erlang が ver 28 系列でも AtomVM がいごくようになりました。

% mise ls
Tool    Version        Source                      Requested 
elixir  1.19.5-otp-27 
elixir  1.19.5-otp-28  ~/.config/mise/config.toml  latest
erlang  27.3.4.11     
erlang  28.5           ~/.config/mise/config.toml  latest
rebar   3.27.0         ~/.config/mise/config.toml  latest

なので AtomVM 0.6.6 を使わないなら Erlang(とそれを使う Elixir)は最新バージョンで構いません。今回は Erlang28.5 を使います。あと rebar3 も最新で大丈夫です。

処理系のAtomVM本体のインストール

今回使ったのは ver 0.7 のアルファ版AtomVM v0.7.0-alpha.1で、まだ安定リリースではありません。ちなみに以前使ったのは ver 0.6.6 AtomVM v0.6.6 で、これが安定版です。そしてこれが ver 0.6 系列の最終版になりそうです。

ESP32 をきれいにする

まず、フラッシュROMをきれいにします。以下で xxx は母艦の usb デバイスに合わせて下さい。

% esptool --chip auto --port /dev/tty.usbserial-xxx --baud 115200 erase_flash

きれいにしないとどうなるかは後述します。

処理系をダウンロードして焼く

今回の ESP32 用の AtomVM イメージは
AtomVM-esp32c2-elixir-v0.7.0-alpha.1.img です。以下で焼きます。

% esptool --chip auto --port /dev/tty.usbserial-xxx --baud 115200 --before default_reset --after hard_reset write_flash -u --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 ./AtomVM-esp32-elixir-v0.7.0-alpha.1.img

これは例によって時間がかかります。
これでAtomVM処理系がESP32のフラッシュに積まれました。

アプリケーションの作成と実行

アプリケーションも v0.6.6 同様ですが、一部だけ異なります。io.formart で古い文法を使ってて警告が出ていたのが直されたりしていました。

サンプルプログラムのダウンロード

アプリケーションは v0.6.6 同様に atomvm_examples から持ってきて、これの elixir/Blinky を使います。

ライブラリを仕込まなくて良い

これ v0.6.6 のときによくわからなくてかなり時間を溶かしたプロセスです。
これをやらなくて良くなりました。該当するファイルも AtomVM v0.7.0-alpha.1 からなくなってます。処理系のイメージに合体されたと思われます。
ただし atomvmlib-rp2-pico-v0.7.0-alpha.1.uf2
atomvmlib-rp2-pico2-v0.7.0-alpha.1.uf2 があります。ラズパイpicoとpico2ではまだ必要かもしれません。その場合はアプリケーションのディレクトリに atom_deps ディレクトリを掘って、そこにこれを置いておくとうまくいきそうです(私は試してません)。

ソースコードから実行可能形式を作る

以下の3行を実行します。Warning がやたらと出てくるのは v0.6.6 同様です。無視って突破できました。

% cd elixir/Blinky # サンプルプログラムのディレクトリに移動
% mix deps.get
% mix compile
% mix atomvm.packbeam

ディレクトリに Blinky.avm deps.avm priv.avm が出来てるはずです。

アプリケーションを焼いて実行

上でできた .avm ファイルを ESP32 のフラッシュROMに焼きます。

% mix atomvm.esp32.flash --port /dev/tty.usbserial-xxx

焼きおわると、リセットがかかってリブートし、Lチカがはじまります。

Hello World! を出す

elixir/Blinky/lib/Blinky.exstart/0 関数の先頭に :io.format(~c"Hello World!~n") を書くとちゃんとプログラム実行開始時に文字列が出ていました。これも前回の v0.6.6 と同様であることの確認が取れました。

ESP32のフラッシュROMをきれいにしない場合

最初にフラッシュをクリアしました。
v0.6.6 でLチカできてる状態で、クリアせずに v0.7.0-a.1 処理系を突っ込むとどうなるでしょうか。これはちゃんと動作します。AtomVM 処理系だけが差し替わって、アプリは元の場所にあり、それを新しい処理系が実行します。
.avm 形式は BEAM形式準拠なので基本的に AtomVM の処理系に依存せずに使えるということでしょう。

アプリケーションの .avm の大きさを見てみると v0.6.6 のときは以下です。

% ls -l *.avm
-rw-r--r--  1 yu  staff  356588  5月  5 02:17 Blinky.avm
-rw-r--r--  1 yu  staff  355224  5月  5 02:17 deps.avm
-rw-r--r--  1 yu  staff      40  5月  5 02:17 priv.avm

これが v0.7.0-a.1 になると 1/5 ぐらいのサイズになってます。

% ls -l *.avm
-rw-r--r--  1 yu  staff  76952  5月  5 02:42 Blinky.avm
-rw-r--r--  1 yu  staff  75584  5月  5 02:42 deps.avm
-rw-r--r--  1 yu  staff     40  5月  5 02:42 priv.avm

処理系を見ると AtomVM-esp32-elixir-v0.6.6.img の大きさが 2197764 Byte で AtomVM-esp32-elixir-v0.7.0-alpha.1.img が 2392028 Byte になってるので、標準ライブラリ扱いの atomvmlib-v.x.x.x-avm をアプリ側に持たせずに処理系に持たせるようになったものと思います。

ちなみに処理系のバージョンを上げる前にフラッシュをきれいにしておかないと、どの処理系やアプリがいごいてるのがさっぱりわからないです。なので、最初はきれにしておいた方が良いでしょう。

まとめ

まだアルファ版ですが、AtomVM v0.7.0 はトラブルなくインストールでき、Lチカが出来ました。多くの機能が追加されているようですので、それも試していきたいと思います。

参考文献

1
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
1
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?