鳥なき里のマイコン屋(174) マイコンでLISP、吉例Lチカ、Wio Terminal

Joseph Halfmoon

下手の横好きということで、トートツにLispはじめました。といってPC上のLispではなく、マイクロコントローラ(マイコン)上の uLisp という処理系です。各種マイコンに「広く」移植されている小さなLisp処理系です。勿論Lispらしいコードが実行できるだけでなく、吉例Lチカなどマイコンハードも制御可能。ハマるな。

※「鳥なき里のマイコン屋」投稿順Indexはこちら

uLisp処理系

LISPはそのルーツを太古の昔にさかのぼる処理系であります。恐ろしいことに、その古さはFORTRANに匹敵する筈。今だにディープな支持者がおられることもFORTRANと似ているような気がします。80年代(1980年代ですぞ)中盤、LISPは「人工知能のアセンブラ」などと言われてそこそこもてはやされていました。この年寄は覚えておりますぞ、つくばの科学万博の米国パビリオンは「人口知能」メインで、LISP走らせているマシンが並んでいた朧げな記憶。何を見せたかったのかは全く覚えてないケド。

さて、8ビット「マイコン」の時代から、LISP処理系はマイコンにも移植されておりました。64Kバイトの主記憶空間のマシンで何が出来たのか今考えると不思議でもありますが。

しかしこの頃はマイコンとは言え32ビットです。8ビットマシンでも走ったくらいなので、LISPが載せられないわけがありません。ということで(どういうことだ)、偉大な人々がLISPを組み込み用のマイコンに搭載してくださっておりました。ホームページが以下に。

Lisp for microcontrollers

この処理系、Lispではありますが、Arduino IDEに依存しているのです。つまり、

uLisp処理系のソースはArduino IDEでビルド可能

です。まあボード毎に多少の変異はあるものの、ソース持ってきてビルドすれば、Arduino IDEがサポートする数多くのマイコンボード上で即走るというお手軽さであります。これは楽しくLISPするしかないわいな。

今回のターゲットマシン

今回のターゲットマシンは Seeed Studio社のWio Terminalであります。以前はよく使ったのですが、このところ「遊休」気味で箱の奥で眠っていたもの。しかし、Arm Cortex-M4コア搭載で組み込み向けとしてはかなり強力な部類のMicroChip社SAMD51マイコン搭載機であります。Seeed Studio社の日本語製品ページが以下に。

Wio Terminal

uLisp処理系のインストール手順

先ほど述べたように uLisp処理系は、Arduino IDE環境に「寄生?」しているので最低でもArduino IDEもしくは、”.ino” 拡張子のスケッチをビルドできる環境(Platform IOなど?)が必要だと思います。そして当然、Seeed Studioの Seeed SAMD Boards のコアがインストールされてないとなりません。まあ、WioTerminal購入したら、最初にやっていると思うので、ボードをもっている人は既にある環境である筈。

さてuLispは、Arduino IDE用の “.ino” ファイル形式で提供されているので、これをダウンドロードしてきてArduino IDEのプロジェクトにしないとなりません。Arm用のソースの在処は以下に。

technoblogy / ulisp-arm

なお、”.ino”形式のファイルが3つありますが、本当に必要なのは

ulisp-arm.ino

というファイル一つだけです。これを特定マシンをターゲットにビルドすれば各種Armコアのマシン向けのオブジェクトができます。LCDパネルを搭載したWio Terminal向けには以下で黄色マーカ部のコメントを外しておくと「グラフィックが使える」というご利益があるようです(まだ試してないケド。)uLispCompileOptions

後は普通に、ビルドしてFlashに書き込み。Flashに書き込みの最後のところが以下に。buildResults

吉例Lチカの実行

ビルドがArduino IDEに依存していただけでなく、その実行もArduino IDEのシリアル・モニタに依存気味です。ターゲットボードに接続(9600bps、送信はLF)すれば、LISPプログラムをターゲットボード上で実行可能です。

Arduino IDEのシリアルモニタを使ってWio Terminalに 1 + 1 を計算させたところが以下に。1plus1

後々、パソコン上のエディタで編集したLispプログラムをターゲットに流し込むことを考えると、別途、仮想端末ソフトに切り替えた方が良い気がします(当方は、伝統のTeraTermPro利用予定っす。)

なにはともあれ、Lチカを行わないと。コードが以下に。blinka

pinmodeとかdigitalwrite、delayとかはArduino風ですが、テールリカージョン(末尾再帰)で無限ループしておる所など、涙がちょちょぎれます。LISPだあ。

Lispと一緒(1) uLisp、Seeeduino Wio Terminal+VScodeで快適? へ進む

鳥なき里のマイコン屋(173) 久しぶりのRISC-V、8ピンCH32V003で吉例Lチカ へ戻る

鳥なき里のマイコン屋(175) STM32、CubeIDEをインストールで吉例Lチカ へ進む