Raspberry Pi (Pi400) での利用 (講習会ユーザ用)
前提:利用する ESP32 マイコンには,mruby/c の VM が書き込まれているものとする.
SD カードに OS イメージを書く (Windows 11 での作業)
公式の Raspbery Pi Imager をインストールし,それを用いて micro SD への OS イメージの書き込みを行う. なお,後述の ESP-IDF ver.4.2 は Raspberry PI OS (armv7l) の 32-bit 版でしか動作しないので注意されたい. また,PI400 の US キーボード版を利用しているので,キーボードレイアウトは us としている.
- OS : Raspberry PI OS (32-bit)
- ストレージ : 接続した microSD
- 詳細な設定 (右下の歯車アイコン) :
- ホスト名 : es
- ユーザ名・パスワード : 適宜
- wifi 設定 : 適宜
- ロケール :
- タイムゾーン : Asia/Tokyo
- キーボード : us
Raspberry Pi での準備作業
ESP-IDF 公式開発環境は必要ないのでインストールしない. ファームウェアは別途 PC で用意して書き込むことを念頭においている.
初期設定
Raspberry Pi Configuration にて,ロケールの設定をする. 他の設定は Raspbery Pi Imager にて設定済である.
- Localisation
- Locale : ja, UTF-8
基本パッケージのインストール
# apt update # apt upgrade # apt install dnsutils # apt install ruby # apt install bison # apt install lv emacs # apt install gnome-terminal
mruby
ESP32 用 mrubyc ライブラリ (https://github.com/gfd-dennou-club/iotex-esp32-mrubyc.git) は mruby 2.1.0 に依存している.Debian パッケージの mruby とバージョンが合わないので, 手動で mruby 2.1.0 をインストールする.
$ git clone -b 2.1.0 https://github.com/mruby/mruby.git $ cd mruby $ ./minirake $ sudo cp bin/* /usr/local/bin/
mkspiffs
メインプログラム (master.rb) からバイトコードを作成する際に必要となる mkspiffs コマンドを用意する.
$ cd ~/src $ git clone https://github.com/igrr/mkspiffs $ cd mkspiffs $ git submodule update --init $ ./build_all_configs.sh --esp-idf $ sudo cp ./mkspiffs /usr/local/bin/
nodejs
スモウルビーは javascript で書かれており,nodejs が使われている. Debian パッケージの nodejs のバージョンが古いので, nodejs の公式の説明に従って nodejs が配布している Debian パッケージを利用する.
- https://nodejs.org/ja/download/package-manager/#debian-and-ubuntu-based-linux-distributions-enterprise-linux-fedora-and-snap-packages
https://github.com/nodesource/distributions/blob/master/README.md
# curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - # apt install -y nodejs
メモ
"npm install <パッケージ名>" を実行すると,依存するパッケージをインストールすることができる. "npm install -g <パッケージ名>" とすると,グローバルインストールすることができる (/usr 以下にインストールされる). -g を付けないと個人環境へのインストールとなる (~/.npm 以下にインストールされる). なお,"npm install" というようにパッケージ名を省略すると,カレントディレクトリの package.json の情報に元づいてパッケージがインストールされる.
package.json に書かれているパッケージ情報が古くなってきた場合は, npm-check-updates を用いてアップデートすると良い. 但し,npm v7 から仕様が変わったので,--legacy-peer-deps を付ける必要があるかもしれない. このオプションは peerDependencies の依存解決を v6 以前と同じ処理にするものである.
# npm install -g npm-check-updates $ ncu $ ncu -u $ npm install --legacy-peer-deps
また,npm list でインストールされたパッケージとそのバージョンが一覧される.
$ npm list
esp-idf
ラズパイでは ESP32 用の VM をコンパイルすることは無いので,メインプログラム (master.rb) を mrbc コマンドでコンパイルして,esptool.py や idf_monitor.py で バイトコードのマイコンへの書き込みや,モニタ出力の確認ができれば良い. ここでは esptool.py, idf_monitor.py を用意する.
ESP32 用 mrubyc ライブラリ (https://github.com/gfd-dennou-club/iotex-esp32-mrubyc.git) で make spiffs するためには esptool.py が必要となる. ここでは root 権限でグローバル環境にインストールすることにした.
$ sudo pip install esptool
ESP32 用 mrubyc ライブラリ (https://github.com/gfd-dennou-club/iotex-esp32-mrubyc.git) で make monitor で確認するためには,esp-idf を clone する必要がある. esp-idf/tools/idf_monitor.py を動かすだけなら,--recursive や ./install.sh を 実行する必要はないようだ.
$ git clone -b v4.2.3 https://github.com/espressif/esp-idf.git
SmT on Raspberry Pi のセットアップ
$ cd ~/SmT $ git clone -b linux-SmTmini --recursive https://github.com/gfd-dennou-club/electron_smt.git $ cd electron_smt/ $ npm install $ cd app/esp/mrblib $ mv master.rb ~/SmT/master.rb $ ln -s ~/SmT/master.rb ./ $ cd ../ $ vi Makefile (esptool.py, idf_monitor.py のパスやポート (/dev/ttyUSB0) を確認すること) $ cd ../../ $ npx electron app (起動することを確認する)
デスクトップにショートカットを用意する.
$ cp bin/* ~/デスクトップ/ (日本語がうまく扱えない場合は,ファインダで操作すること)
デスクトップ上のアイコンをダブルクリックして実行する. プログラムを作成して「Rubyコードを保存」する際は,ファイル名は /home/pi/SmT/master.rb にすること.
ファイル内を確認し,パスがずれていないか確認すること. なお,SmT-monitor.sh と SmT-write.sh はターミナルを立ち上げてコマンドを実行する形にしている.
- SmT.sh : SmT の起動
- SmT-monitor.sh : モニター出力 (プログラムの動作確認用)
- SmT-write.sh : メインプログラム (master.rb) のコンパイルとマイコンへの書き込みのみ
- SmT-edit.sh : メインプログラム (master.rb) の編集.テキストエディタが起動する.
TODO
- 一度マイコンへ書き込みをすると,SmT のウィンドウが x ボタンで閉じないことがある.理由がまだ判明していない
バイナリを以下のように作成することができる.しかし,esp32-mrubyc の master.rb は相対パスで指定されているので,ファイルが見つからないために動かない (そのために,デスクトップに起動用のシェルスクリプトを置くことにした).なお,バイナリを作る場合には以下のようにする.
$ npx electron-packager app SmT-2022 --platform=linux --arch=armv7l electronVersion=16.2.4