LoginSignup
0
2

More than 3 years have passed since last update.

ESP32にZephyr OSを入れて動かしてみる

Posted at

はじめに

これまで、公式SDKのESP-IDF(OSはFreeRTOS)を使ってESP32を触っていましたが、他のOSも試してみようと思い、ドキュメントが充実していそうなZephyrを試してみました。

結果から言うと、Hello WorldとLチカまではできたものの、ESP32のWifiが使えずネットワーク通信できないことが後で分かったので、そこで止めてしまいました。ESP32でWifi接続する仕組みは以下で議論されていますが、まだ整備中のようです。
WiFi support for ESP32

というわけで、まさに「動かしてみた」だけになってしまいましたが、記録として残しておきます。

【今回の環境】

  • ボード:ESP32-DevKitC-32D
  • 開発環境:Windows 10 + ESP-IDF v4.0.1 + Zephyr v2.4.0 rc2

Zephyrビルド環境の準備

以下にガイドに沿って進めます。
Getting Started Guide

また、ESP32での利用については以下にガイドがあります。
Supported Boards » XTENSA Boards » ESP32

ESP32で使う際は、ESP-IDFに含まれるSDKとToolchainの双方が必要になるので、既に設定済のESP-IDF環境の上にZephyr環境を作りました。フォルダ構成は以下の通り。

C:\IoT\ESP-IDF
 ├ ESP-IDF-v4.0.1  ... SDK
 ├ Tools           ... Toolchain
 └ zephyrproject   ... この後に入れるZephyr Project

1. Select and Update OS

Windows Updateせよとあります。実施済なのでスキップ。

2. Install dependencies

まず、Windows用パッケージ管理ツールChocolateyをインストールします。インストール方法はこちら。
Installing Chocolatey

上記に従って、管理者モードでPowerShellを起動して以下を実行すると、Chocolateyがインストールされます。

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

次に、管理者モードでコマンドプロンプトを開いて以下を実行とありますが、

choco feature enable -n allowGlobalConfirmation
choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System'
choco install ninja gperf python git

gperf以外はESP-IDFを入れたときに既に入っているので、以下を実行しました。

choco feature enable -n allowGlobalConfirmation
choco install gperf

3. Get Zephyr and install Python dependencies

まず、Zephyrの管理ツールwestをインストールします。

pip3 install west

続いて、このwestを使ってzephyrprojectを所定の場所に用意します。

cd \IoT\ESP-IDF
west init zephyrproject
cd zephyrproject
west update

続いて、ZephyrアプリをビルドするためのCMake環境を準備。

west zephyr-export

続いて、追加で必要なツールをインストール。

pip3 install -r zephyr\scripts\requirements.txt

4. Install a Toolchain

Toolchainを入れた上で必要な環境変数を設定せよとあります。
Toolchainは既に入っているので、以下ESP32用ガイドを参考に環境変数を設定します。
Supported Boards » XTENSA Boards » ESP32

ESP32用ガイドには、Linux向けの設定例しか記載がありませんが、以下のように設定せよとあります。

export ZEPHYR_TOOLCHAIN_VARIANT="espressif"
export ESPRESSIF_TOOLCHAIN_PATH="/path/to/xtensa-esp32-elf/"

実際にやってみると、上記に加えてESP_IDF_PATHという環境変数の設定も必要になります。
最終的には以下のように設定することで、後述のビルドが通るようになりました。

set ZEPHYR_TOOLCHAIN_VARIANT=espressif
set ESPRESSIF_TOOLCHAIN_PATH=%IDF_TOOLS_PATH%/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf
set ESP_IDF_PATH=%IDF_PATH%

サンプルのビルド&実行

Getting Started Guideには、Blinky Sample(いわゆるLチカ)を動かしてみよ、とありますが、ESP32の場合そのままでは動きません。
ということで、まずHello Worldを動かしてみます。

Hello World

ESP-IDFのコンソールを開き、上記の環境変数を設定。
続いてサンプルコードをコピーして、そのままビルド。

cd \IoT\ESP-IDF\zephyrproject
mkdir projects\hello_world
xcopy /E zephyr\samples\hello_world projects\hello_world
cd projects\hello_world
west build -p always -b esp32

無事にビルドできたらフラッシュします。

west flash --esp-device COM3

シリアル接続して出力を見ると、無事にHello World!が出力されてます。

*** Booting Zephyr OS build v2.4.0-rc2-53-g61d42cf42b30  ***
Hello World! esp32

Blinky

次にLチカです。まずはサンプルコードをコピー。

cd \IoT\ESP-IDF\zephyrproject
mkdir projects\blinky
xcopy /E zephyr\samples\basic\blinky projects\blinky
cd projects\blinky

しかし、ESP32についてはLEDの定義が無いので、そのままビルドすると以下のように怒られます。

 #error "Unsupported board: led0 devicetree alias is not defined"

自分の環境ではIO19にLEDを接続してあったので、ソースコードの24~26行付近を以下のように修正。

//#error "Unsupported board: led0 devicetree alias is not defined"
//#define LED0  ""
#define LED0    "GPIO_0"
//#define PIN   0
#define PIN 19

これでビルドして書き込みます。

west build -p always -b esp32
west flash --esp-device COM3

IMG_20200928_185914_R.jpg

無事にLチカできました。

今回はここで終わりですが、ESP32でWifiが使えるようになったら、また色々試してみようと思います。

0
2
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
2