LambdaChip First Impression

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/84005763-e03b-5289-b9bd-c1f3894e93c2.png)
Alonzoボードはスタンダード版  (USD29) とフルセット版(USD99)の2種類あります。写真のパッケージはフルセット版です。



フルセット版の中身。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/ef2738f0-a557-fe88-48d5-f86cfc9ff520.png)
写真の左下にある黒いボードがAlonzoボード本体です。スタンダード版  (USD29) を購入した場合はこのボード1枚のみになります。
写真の右下はデバッガです。Alonzo ボードへのプログラム書き込みやデバッグなどに使います。

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

フルセット版/スタンダード版いずれも現在のところ入手はSeeedStudio経由となります。
https://www.seeedstudio.com/LambdaChip-Alonzo-Standard-Version-p-4854.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/6aecf08d-aa72-93e6-f49e-c421d9880b0e.png)

# 图㧪科学技術有限公司

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

LambdaChip 
https://lambdachip.com
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/36f47e56-2712-31e0-2fda-522f3dfbdbc6.png)

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

# Alonzo ボード



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/661bf416-95ec-7dd6-7d44-f359f0e7655d.png)

フルセット版に付属する説明書
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/99a678f0-e979-a2d7-a996-99ca5ae8d5e7.png)
説明書裏面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/3326462f-00ef-0ae1-7640-304f8f37d8b5.png)

デバッガ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/828b69dd-31f6-e46c-df76-26e544395f78.png)

デバッガを使ってPCに接続した状態 この状態でプログラムの書き込みやデバッグを行うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/e54ee5ca-8688-06ed-dce0-a6804e0c4724.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/6c81d754-1f39-f9a6-5623-63c56c7b0da3.png)

AlonzoボードのCPU はSTM32F411CEU6。Cortex-M4 の 32bit ARM プロセッサで 100MHz。 512KB のフラッシュが使えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/a71e9506-0aa3-a1b5-3db0-188d91fefb85.png)
FR8016HA は freqchip 社の BLE チップです。これを使うとしてAlonzoボードは日本の技適は取得していないので「技適未取得機器を用いた実験等の特例制度」などを申請して実験することになります。
https://www.freqchip.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/c8bb252a-ee3a-c174-515e-add04d45276f.png)


# 実験しよう

最初の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


MS-Windows の場合は以下のようにして Dockerをインストールします。
「LambdaChip を MS-Windows で試す」
https://qiita.com/nanbuwks/items/091a80bc0830f1963a9e

Mac の場合は以下を参照して Docker をインストールしてください。
「Mac に Docker Desktop をインストール &mdash; Docker-docs-ja 19.03 ドキュメント」
https://docs.docker.jp/docker-for-mac/install.html


## 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 カードを装着します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/24e1b343-232c-d7aa-f9c4-4861ea08361b.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/20bfa227-dea5-1a6d-6130-a4eb286a66de.png)

フルカラーLED D6 が
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/466a3d8d-f1c3-4532-b360-3b9bdb0452be.png)

点滅し、プログラムが実行されたことがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/4833d90c-8380-e3eb-da99-fffe8397ff9a.png)

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

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
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/c9a7fb5e-abcb-7458-0f76-10c5f29e9a50.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/aa2fa90c-a7ad-a8a8-3c08-200f8204880a.png)