Hello ESP32 World!

ESP32上で動作する Hello World プログラムをつくります。

ESP32 & mruby/c用のアプリケーションテンプレートをGitHubからcloneします。

cd $HOME/esp
git clone https://github.com/hasumikin/mrubyc-template-esp32.git hello-mrubyc-world-esp32
cd hello-mrubyc-world-esp32

ディレクトリ構成を見てみましょう。 mrblib/ の中にわれわれのRubyソースコードを書きます。 main/ の中にはC言語のソースコードを書きます。

~/esp/hello-mrubyc-world-esp32$ tree -L 3
.
├── Makefile
├── components
│   └── mrubyc
│       ├── component.mk
│       ├── mrubyc_mrblib
│       └── mrubyc_src
├── main
│   ├── component.mk
│   └── main.c
└── mrblib
    ├── loops
    └── models

        8 directories, 4 files

3つのソースコードを以下のような内容に編集します。 すでに存在するファイルは上書きし、存在しないファイルは新規作成してください。

main/main.c

#include "mrubyc.h"

#include "models/greeter.h"
#include "loops/master.h"

#define MEMORY_SIZE (1024*40)

static uint8_t memory_pool[MEMORY_SIZE];

void app_main(void) {
  mrbc_init(memory_pool, MEMORY_SIZE);

  mrbc_create_task( greeter, 0 );
  mrbc_create_task( master, 0 );
  mrbc_run();
}

mrblib/loops/master.rb

greeter = Greeter.new

while true
  greeter.greet
  sleep 1
end

mrblib/models/greeter.rb

class Greeter
  def greet
    puts "Hello World!"
  end
end

ビルド

make コマンドを入力すると、ビルドが始まります。

ESPプロジェクトの初回の make 時には下の画像のような make menuconfig 相当の画面になります。エスケープキーを2回押すか、<Exit>を選択すればmenuconfigを終了できます。menuconfigは、プロジェクト(アプリケーション)ごとに毎回設定する必要があります。

ターミナル(ウインドウ)のサイズが小さすぎると「menuconfig画面をつくれない」という意味のエラーがでます。 ウインドウサイズを大きくして再度 make してください。

menuconfig-01

設定ファイルが自動で生成され(これによって次回の make コマンドでは設定画面が表示されなくなります。明示的に表示するためのコマンドが make menuconfig です)、プロジェクトのビルドが始まるはずです。下の画像のような出力で終了すれば正常です。

hello_world_build

正常終了しなかった場合は、これまでの手順のどこかを抜かしたか、入力ミスなどで正しく手順を踏めていなくてエラーメッセージに気づかず進んでしまったことが考えられます。

次はついにESP32へのプログラム書き込みですが、その前にUSB接続を確認し、シリアルポートを設定しましょう。 WindowsとmacOSそれぞれについて説明します。

USB接続の確認とシリアルポート設定

Windowsの場合:COMポート番号を確認

「デバイスマネージャー」アプリを開き、その状態のままUSBケーブルのマイクロコネクタ側をESP32開発ボードに、タイプAコネクタをWindowsパソコンに接続します。

「USB to UART ブリッジドライバ」がインストール済みなので、画像のように「ポート(COMとLPT)」内に「Silicon Labs CP210x USB to UART Bridge (COM5)」のような項目が現れるはずです。名称は環境によって異なる可能性があります。

device_manager-ja

「(COM5)」の 最後の数字「5」 が、みなさんの環境では異なる可能性があります。 この数字を覚えておいてください。

macOSの場合:シリアルポートのデバイスファイル名を確認

USBポートにESP32開発ボードを接続していない状態で、 ls -l /dev/cu.* と打ってみてください。 つぎに、ESP32開発ボードをmacに接続した状態で、同じコマンドを打ってください。「USB to UART ブリッジドライバ」が正しくインストールできていれば、出力がひとつ増えるはずです。そしてそのデバイスファイルは「/dev/cu.SLAB_USBtoUART」のような名前であるはずです。

この文字列をメモしておいてください。

WindowsとmacOS共通:シリアルポートを設定

make menuconfig

上記コマンドで設定画面を起動し、カーソルキーとエンターキーで「Serial flasher config」→「(/dev/ttyUSB0) Default serial port」と選択し、ポートを 下で説明する値 に変更してエンターキーで確定し、何度かエスケープキーを押すと保存するか確認されるので「<Yes>」を選択してください。

  • macOS:先ほどメモをとった「/dev/cu.SLAB_USBtoUART」のような文字列
  • WSL:「/dev/ttyS5」(最後の数字を先ほど確認したCOM番号と同じものに変更してください)
  • MSYS2:「COM5」(先ほど確認した「COM名」と同じ文字列にする。WSLと異なり、 /dev/ の部分は不要です)

menuconfig-01menuconfig-02 menuconfig-03 menuconfig-04

プロジェクトを書き込み、実行

このコマンドでプロジェクトが書き込まれます。makeコマンドの一般的な動作と同様、プログラムファイルの更新日時から計算される依存関係上必要な場合は、ビルドが先に実行されます。

make flash

このコマンドでESP32がリブートしてファームウェアが先頭から実行され、実行中のデバッグ情報などが標準出力に書き出されます。

make monitor

どうでしょうか? hello-mrubyc-world-posix(PC上のHello World)と同じように、1秒ごとに Hello World! が出力されたでしょうか? うまく行かない場合は手順を再度見なおしてください。

ESP-IDFのコンソールモニタ(make monitor)は、 ctrl + ] で終了できます。

ちなみに上の2つのコマンドは以下のように一度に実行できます。

make flash monitor