0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ESP32向けのmruby開発環境を構築する(Linux編)

Last updated at Posted at 2019-12-06

概要

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の仮想環境を作ることができる様です。

Image from Gyazo

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

正常に起動すると下の様な画面がでます。
この画面がでればここまでの作業が問題なくできています。

Image from Gyazo

この画面で色々条件を設定するみたいですが、ここでは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 が起動したら次の様に設定します。

  1. Serial flasher config ---> を選択
  2. (/dev/ttyUSB0) Default serail port) を選択
  3. 使用するポートを入力します。
  4. 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版です。

参照

以下のサイトを参考にさせていただきました。(ほぼまとめサイトの様になっておりますが…)
ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?