ESP8266_RTOS_SDK V3を使ってみる

環境構築


ESP8266では2つのRTOSを利用することができます。
1つはこちらで紹介しているesp-open- rtosです。
今回はEspressifが提供しているESP8266_RTOS_SDKを紹介します。

ESP8266_RTOS_SDKはこちらのページから ダウンロードすることができます。
ReadMeのRoadMapには以下の様に記載されています。
Google君に翻訳してもらいました

出展:https://github.com/espressif/ESP8266_RTOS_SDK

EESP8266_RTOS_SDKのフレームワークはかなり古く、現在のesp-idfとは異なります。
最終的にv2.0.0以降は ESP8266_RTOS_SDKをesp-idfに移行する予定です。
ただし、当分の間esp-idfによってマルチCPUアーキテクチャがサポートされていないため、
回避策として、まずESP 8266 SDK(ESP 8266_RTOS_SDK v3.0)の新しいバージョンを提供します。
ESP8266_RTOS_SDK v3.0に対して実行されるアクションは、次のとおりです。
1.フレームワークをesp-idfスタイルに変更します。
2.Wi-Fiライブラリとlibmainを含むいくつかのコアライブラリを再構築する
3. FreeRTOS、lwIP、mbedTLS、noPoll、libcoap、SPIFFS、cJSON、wolfSSLなどを含むサードパーティ製ライ ブラリをいくつか更新します。
4.いくつかのドライバを更新する
5.その他



esp-idfはESP32の標準開発環境です。
最終的にはマルチCPUアーキテクチャ(要するにESP8266とESP32)をサポートし て、
ESP8266もESP32も、同じ環境で開発できるようになるのかもしれませんが、
esp-idfはesp32、esp32-s2、esp32-c3など、サポートする範囲をどんどん広げているので
ESP8266とESP32の開発環境を統合するのは難しいと思います。

フレームワークがesp-idfスタイルに変更されているので、V2とは全く違うのかもしれませんが、V2を使ったことが無いので違いが分かりま せん。
ESP8266_RTOS_SDK V3を使うと、どのようなことができるのか紹介していきます。
今回使用したプラットフォームはCore-i3で動くUbuntu 18.04.1です。

環境構築に際しては以下のページを大いに参考にさせていただきました。
http://dsas.blog.klab.org/archives/2017-04.html



まずはtoolchainのインストールです。
ESP8266(Xtensa LX106)のtoolchainとしてesp_open_sdkを使います。

esp-open-sdkの入手方法はこちらで 紹介しています。
今回はESP8266_RTOS_SDKに付属のPreBuildバイナリを使いました。

pythonとpyserialがインストールされていないときは、以下の手順であらかじめインストールしておきます。
config時に使用するscreenもイントールしておきます。
$ sudo apt-get install python python-pip screen

$ pip install pyserial

使用したpythonのバージョンは以下のバージョンです。
$ python --version
Python 2.7.17

ファームの書き込みで使用するesptool.pyがインストールされていないときは、こちらの手順でインストールしておきま す。



この時点で、アカウントにUSBポートのアクセス権を与えておきます。
これをしないと、ファームの書き込み時にパーミッションのエラーとなります。
ESP8266をUSB経由でホストマシンに接続すると、USBポートを所有しているグループが分かります。
$ ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0  2月 10 08:50 /dev/ttyUSB0

$ sudo usermod -a -G dialout ログインユーザ名

一旦ログアウトして再ログインすると、設定が有効になります。



次にESP8266-RTOS-SDKをインストールします。
$HOME/espの下にインストールしている例が多いのですが、私は$HOMEの直下にインストールしました。
$ cd $HOME

$ git clone https://github.com/espressif/ESP8266_RTOS_SDK.git
Cloning into 'ESP8266_RTOS_SDK'...
remote: Enumerating objects: 335, done.
remote: Counting objects: 100% (335/335), done.
remote: Compressing objects: 100% (223/223), done.
remote: Total 15407 (delta 139), reused 218 (delta 100), pack-reused 15072
Receiving objects: 100% (15407/15407), 39.55 MiB | 4.44 MiB/s, done.
Resolving deltas: 100% (8144/8144), done.

$ ls ESP8266_RTOS_SDK/
add_path.sh     examples    LICENSE           sdkconfig.rename
CMakeLists.txt  export.sh   make              SUPPORT_POLICY_CN.md
components      install.sh  README.md         SUPPORT_POLICY_EN.md
docs            Kconfig     requirements.txt  tools

次に以下のコマンドでIDF_PATHの環境変数を設定し、環境変数を有効にします。
この環境変数をだれがどのように使うのかは追って紹介します。
$ echo 'export IDF_PATH=$HOME/ESP8266_RTOS_SDK' >> ~/.profile

$ source .profile

最後に以下のコマンドでビルド時に使用するPython関連のツールをインストールします。
$ /usr/bin/python -m pip install --user -r $HOME/ESP8266_RTOS_SDK/requirements.txt



ESP8266_RTOS_SDK/examplesディレクトリには多数のサンプルソースが含まれています。
動作確認のために、ESP8266_RTOS_SDK/examples/get-started/hello_worldをビルドしますが、
TeraTermを使ってsshでログインしている環境では以下のように文字化けします。


sshでログインしている環境ではscreenコマンドを実行してから、ビルドを行います。
$ screen
ずらずらと説明が表示されますが、Enterで説明を終わります。

$ cd ESP8266_RTOS_SDK/examples/get-started/hello_world

$ make

ESP8266_RTOS_SDK(esp-idf環境)では以下のメニューを使ってプロジェクトごとの設定を行うことができます。


hello_worldのサンプルをビルドする場合、何も変更する必要はなく、そのままExitで構いません。
新しいコンフィグを有効にするかどうか聞かれるのでYesで抜けます。


カレント・ディレクトリにsdkconfigが作られます。
sdkconfigは普通のテキストファイルでviやcatで見ることができます。
ビルドはこのファイルの定義に従って行われます。
ビルド条件を変えるときは、make menuconfig を実行するか、あるいは直接sdkconfigファイルを編集します。



makeのオプションは以下で表示することができます。
いずれじっくりと探検してみたいと思います。
$ make help
Toolchain path: /home/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc
Toolchain version: esp-2020r3-49-gd5524c1
Compiler version: 8.4.0
Python requirements from /home/esp8266/ESP8266_RTOS_SDK/requirements.txt are satisfied.
Welcome to Espressif IDF build system. Some useful make targets:

make menuconfig - Configure IDF project
make defconfig - Set defaults for all new configuration options

make all - Build app, bootloader, partition table
make flash - Flash app, bootloader, partition table to a chip
make clean - Remove all build output
make size - Display the static memory footprint of the app
make size-components, size-files - Finer-grained memory footprints
make size-symbols - Per symbol memory footprint. Requires COMPONENT=<component>
make erase_flash - Erase entire flash contents
make erase_otadata - Erase ota_data partition; First bootable partition (factory or OTAx) will be used on next boot.
                     This assumes this project's partition table is the one flashed on the device.
make monitor - Run idf_monitor tool to monitor serial output from app
make simple_monitor - Monitor serial output on terminal console
make list-components - List all components in the project

make app - Build just the app
make app-flash - Flash just the app
make app-clean - Clean just the app
make print_flash_cmd - Print the arguments for esptool when flash
make check_python_dependencies - Check that the required python packages are installed

See also 'make bootloader', 'make bootloader-flash', 'make bootloader-clean',
'make partition_table', etc, etc



ファームのビルドと書き込みは以下のコマンドで行います。
$ make flash monitor

ファームのビルドが終わると、以下の表示となります。
このプログラムはチップ情報を表示して10秒後に再起動するだけのプログラムです。
シリアルモニタからは Ctrl+] で抜けられます


続く....