概要
LinuxにESP32向けmruby開発環境を構築します。
MacにESP32向けのmruby開発環境を構築する - Qiita
を書く前に、Mac向けに書かれている記事が見つけられなくて実はLinuxで試していました。
途中でビルドできなくてMacで試したのですが、結局同じ原因で引っかかっていて解決しました。
折角なのでLinux版も公開します。
(流れは同じですが、コマンドなど多少違います)
前提条件
ParallelsでLinuxの仮想マシンを作成してその上に構築してます。
使用したLinuxディストリビューションとバージョンです。
$ cat /etc/lsb-release
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=19.2
DISTRIB_CODENAME=tina
DISTRIB_DESCRIPTION="Linux Mint 19.2 Tina"
ターゲットデバイスは M5Stack です。
手順
Linux mint 仮想マシン作成
Linuxは普段使っていないので、下のサイトを参考に今までインストールしたことがなかったLinux mintにしてみました。
【目的別】初心者におすすめのLinuxディストリビューション7選
Parallelsインストールアシスタントに従ってディストリビューションを選択するだけでほぼ自動的に作ってくれます。
知らなかったんですがParalles Liteという無料版もあり、こちらでもLinuxの仮想環境を作ることができる様です。
ESP-IDF開発環境構築
Macの時と同じ様にESP-IDFというクロス開発環境を使います。
公式ドキュメントに従って進めていくのですが、あらかじめ各種コマンドを用意する必要があります。
Get Started — ESP-IDF Programming Guide v4.1-dev-1066-g93a8603c5 documentation
コマンド類のインストール
必要なコマンドは@GORO_Nekoさんが下の記事で書いてくれているので、それを参考に入れていきます。
mruby-esp32 を使って ESP-WROOM-32(ESP32)上で、Ruby言語のコードから作ったアプリケーションを動かす - Qiita
所が、sudo apt install
を実行すると 404 Not Found
が出てしまいaptを更新しないといけないみたいです。
$ sudo apt update
下の様に必要なコマンド類をインストールします。
(入ってなかった物とバージョンアップされた物です。)
最近はapt get
じゃなくapt install
なんですね。
$ sudo apt install git
$ sudo apt install libncurses-dev
$ sudo apt install gperf
$ sudo apt install python-pip
$ sudo apt install python-serial
$ sudo apt install python-dev
$ sudo apt install grep
$ sudo apt install automake
$ sudo apt install texinfo
$ sudo apt install help2man
$ sudo apt install libtool
$ sudo apt install libtool-bin
$ sudo apt install cmake
$ sudo apt install ruby
ESP-IDFのソースコード 一式Clone
ここから下はMac版と大体同じです。
ドキュメントに従ってespディレクトリ内にgithubからCloneします。
$ mkdir ~/esp
$ cd ~/esp
$ git clone --recursive https://github.com/espressif/esp-idf.git
ESP-IDFのセットアップ
$ cd ~/esp/esp-idf
$ ./install.sh
~/.bashrc
に以下の行を追加します。
. $HOME/esp/esp-idf/export.sh
ターミナルを立ち上げ直すか、source ~/.profile
を実行して反映させます。
hello worldサンプルプロジェクトのコピー
esp-idfで用意されているhello worldのサンプルをコピーします。
$ cd ~/esp
$ cp -r $IDF_PATH/examples/get-started/hello_world .
Configuration
ビルドに先立ってmenuconfigを起動します。
$ cd ~/esp/hello_world
$ idf.py menuconfig
正常に起動すると下の様な画面がでます。
この画面がでればここまでの作業が問題なくできています。
この画面で色々条件を設定するみたいですが、ここではESCキーで一旦終了します。
終了時のダイアログで念のためYを押して保存します。
ビルド
下のコマンドでhello world プロジェクトがビルドされます。
$ idf.py build
実機へアップロード
M5Stack をUSBケーブルで接続します。
接続したポートを確認します。通常は/dev/ttyUSB0
の様です。
$ ls /dev/ttyU*
/dev/ttyUSB0
プログラムをアップロードするには下のコマンドを実行します。
$ idf.py -p /dev/ttyUSB0 flash
が、Permission deniedでErrorになってしまいました。
serial.serialutil.SerialException: [Errno 13] could not open port /dev/ttyUSB0: [Errno 13] Permission denied: '/dev/ttyUSB0'
/dev/ttyUSB0
のownerがroot:dialoutになっていてアクセス権がないようなので、dialoutグループにログインしているユーザー(parallels)を追加します。
$ sudo usermod -aG dialout parallels
ここで再起動します。(多分ログインし直すだけでいいと思います。)
/dev/ttyUSB0
のownerを変更する方法でもできましたが、デバイスを抜き差しするとownerがroot:dialoutに再設定されてしまうので、毎回chownする必要がでてしまうので、グループに入れる方が良いです。
改めてアップロードしてみます。
$ idf.py -p /dev/ttyUSB0 flash
今度はうまくいきました。
プログラムの動作確認
monitorでプログラムの出力を確認できます。
idf.py -p /dev/ttyUSB0 monitor
Hello world!とチップの情報が出力されているのが確認できます。
Hello world!
This is ESP32 chip with 2 CPU cores, WiFi/BT/BLE, silicon revision 1, 2MB external flash
Restarting in 10 seconds...
Restarting in 9 seconds...
Restarting in 8 seconds...
これでESP-IDFでプロジェクトビルトから実行まで確認できました。
mruby構築
ソースコードをClone
GitHub の mruby-esp32 のドキュメントに従ってソースコードをCloneします
$ cd ~/
$ git clone --recursive https://github.com/mruby-esp32/mruby-esp32.git
$ cd mruby-esp32
ビルド
ドキュメントにあるようにmakeでビルドします。
MRUBY_EXAMPLE=simplest_mrb.rb はいくつかあるサンプルから使用するmrubyファイルを指定する様です。
Mac版と同様に-WオプションのチェックでエラーがでるのでCFLAGSにチェックを無効にする設定をしてからmakeします。
$ export CFLAGS="-Wno-error=format-overflow="
$ make MRUBY_EXAMPLE=simplest_mrb.rb
通信ポートの設定
menuconfig
で通信に使用するポートを設定しますが、デフォルトが /dev/ttyUSB0
になっているので通常は設定しなくてもいいと思います。
もし通信ポートが /dev/ttyUSB0
でなかった場合に下の手順で設定します。
$ make menuconfig
menuconfig
が起動したら次の様に設定します。
- Serial flasher config ---> を選択
- (/dev/ttyUSB0) Default serail port) を選択
- 使用するポートを入力します。
- ESC を2回押し、ダイアログで Y を押して保存します。
プログラムの書き込みと動作確認
simplest_mrb.rbファイルを確認してみると、下の様に1234と4321の2行出力する様になっています。
puts "1234"
puts "4321"
プログラムの書き込みと動作確認するにはflashとmonitorタスクを実行します。
$ make MRUBY_EXAMPLE=simplest_mrb.rb flash monitor
出力を確認すると正常に動作している様です。
I (542) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
I (370) mruby_task: Loading binary...
1234
4321
I (390) mruby_task: Success
という事でMac版同様に無事mrubyプログラムが実行されました。
関連
Mac版です。
参照
以下のサイトを参考にさせていただきました。(ほぼまとめサイトの様になっておりますが…)
ありがとうございました。