LambdaChip First Impression


LambdaChip はオープンソースの関数型組み込みシステムです。

LambdaChip を実装し、Scheme で組み込みプログラミングができる Alonzoボードを入手したので試してみました。


Alonzoボードはスタンダード版 (USD29) とフルセット版(USD99)の2種類あります。写真のパッケージはフルセット版です。

フルセット版の中身。

写真の左下にある黒いボードがAlonzoボード本体です。スタンダード版 (USD29) を購入した場合はこのボード1枚のみになります。
写真の右下はデバッガです。Alonzo ボードへのプログラム書き込みやデバッグなどに使います。

スタンダード版のみ購入の場合でも、プログラムの書き込み/実行は microSD カードにプログラム配置することで行うことができます。

フルセット版/スタンダード版いずれも現在のところ入手はSeeedStudio経由となります。
https://www.seeedstudio.com/LambdaChip-Alonzo-Standard-Version-p-4854.html

图㧪科学技術有限公司

LambdaChip および Alonzo 中国深センで組込技術開発を行う TuweiTechnology 社(图㧪科学技術有限公司)が開発しています。

LambdaChip
https://lambdachip.com

TuweiTechnology 社は LambdaChip の開発に注力していますがライセンスは独占的ではなく、LambdaChip は Linux のようにオープンソースで誰でも使うことができます。

Alonzo ボード

フルセット版に付属する説明書

説明書裏面

デバッガ

デバッガを使ってPCに接続した状態 この状態でプログラムの書き込みやデバッグを行うことができます。

デバッガを使わずにスタンダード版のみで開発や実行をする場合は、このようにmicroSDカードを使ってプログラムの実行を行います。

AlonzoボードのCPU はSTM32F411CEU6。Cortex-M4 の 32bit ARM プロセッサで 100MHz。 512KB のフラッシュが使えます。

FR8016HA は freqchip 社の BLE チップです。これを使うとしてAlonzoボードは日本の技適は取得していないので「技適未取得機器を用いた実験等の特例制度」などを申請して実験することになります。
https://www.freqchip.com/

実験しよう

最初の1歩として、LED点滅(Lチカ) をしてみます。

https://lambdachip.com/articles/docs
の「0. Get started」を行います。

環境

  • Ubuntu 20.04 LTS

あらかじめ、以下の手順でDockerをセットアップしています。
「Ubuntu20.04 に Docker を導入する」
https://qiita.com/nanbuwks/items/0ba1d13b3cd27e5c6426

docker で開発環境を入手


$ sudo docker pull registry.gitlab.com/lambdachip/laco:latest

sudo しているのは、先のDockerセットアップで sudo 必要な設定としているからです。sudo 必要ない設定にしている方は以降も sudo 無しに読み替えてください。
なお、環境を作った後もこのコマンドを実行することで開発環境が最新に保つことができます。

ワークスペースを作り、開発環境に入る


$ mkdir ~/lambdachip-workspace
$ cd lambdachip-workspace/

としておいて、


$ sudo docker run -it --rm -v $PWD:/workspace -w /workspace -u "lambdachip:lambdachip" registry.gitlab.com/lambdachip/laco:latest bash

と実行すると、以下のようになります。


 ________________________________
/\                               \
\_|                     _        |
  | |  _.._ _ |_  _| _./ |_ o._  |
  | |_(_|| | ||_)(_|(_|\_| |||_) |
  |                          |   |
  |   ___________________________|_
   \_/_____________________________/
Laco compiler workspace
lambdachip@de52db3dde27:/workspace$

プロンプトがこのようになったことを確認し、一度抜けます。

lambdachip@de52db3dde27:/workspace$ exit
exit
$

Scheme プログラムを作成、コンパイルする

$ vim program.scm

として、以下の内容のファイルを作成します。


(define (main x)
  (gpio-toggle! 'dev_led1)
  (usleep 200000)
  (if (= x 0)
    #t
    (main (- x 1))))
(main 10)

ここに示したプログラムは、サンプルから少し変えています。

再度仮想環境に入ります。


$ sudo docker run -it --rm -v $PWD:/workspace -w /workspace -u "lambdachip:lambdachip" registry.gitlab.com/lambdachip/laco:latest bash

先程作成したプログラムをコンパイルします。

lambdachip@448d3a1fe424:/workspace$ laco program.scm
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;;       or pass the --no-auto-compile argument to disable.
;;; compiling /usr/bin/laco
;;; compiled /home/lambdachip/.cache/guile/ccache/3.0-LE-8-4.5/usr/bin/laco.go
lambdachip@448d3a1fe424:/workspace$

コンパイルしたファイルができていることを確認します。

lambdachip@448d3a1fe424:/workspace$ ls
program.lef program.scm

この、program.lef を microSDカードに書き込みましょう。

Alonzo ボードで実行

書き込んだ microSD カードを装着します。

USB Type-C 端子から5Vを供給します。

フルカラーLED D6 が

点滅し、プログラムが実行されたことがわかります。

プログラムを変更してみる

LED の定義を変えたり、時定数を変えたりして遊んでみましょう。

定義 LED
dev_led0 フルカラーLED 赤
dev_led1 フルカラーLED 緑
dev_led2 フルカラーLED 青
dev_led3 白LED

Alonzoボードの入手

先に記したように現在のところSeeedStudio経由となります。

https://www.seeedstudio.com/LambdaChip-Alonzo-Standard-Version-p-4853.html
https://www.seeedstudio.com/LambdaChip-Alonzo-Standard-Version-p-4854.html

しかしながら、フルセット版/スタンダード版いずれも品切れで入手できません。なんとかしてみようと計画中です。