2
1

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でLチカしてみる(できなかったのでpart1)

Last updated at Posted at 2020-06-04

Goal

  • ESP32でLチカする
    • 4時間かけてたどり着けなかった…:angel:
  • mruby/cで動かす
    • 完了

使用した開発ボード

ESP32-DevKitC ESP-WROOM-32開発ボード
http://akizukidenshi.com/catalog/g/gM-11819/

参考にしたサイト

利用したボードでもCP2102Nを使っていたので下記サイトを参考にさせていただきました。感謝!

ESP32×mruby/c IoTハンズオン
https://www.s-itoc.jp/activity/research/mrubyc/mrubyc_tutorial/ESP32/

シリアルポートのドライバをインストール

おもむろにUSBでESP32をつないでみたのですが、Windowsのデバイスマネージャーでシリアルポートの表示すらでないので、ドライバをインストールします。

上記サイトの「CP2102 drivers for Windows」をクリックしてインストーラをダウンロードしてください。

image.png

ドライバのインストール後、デバイスマネージャーでみたところ…

image.png

うん、よさげです。

WSLでのESP-IDF SDKパッケージのインストールまで

WSLでインストールする場合は、公式の「Standard Setup of Toolchain for Linux (Legacy GNU Make)」を参考にして下さい。

Standard Setup of Toolchain for Linux (Legacy GNU Make)
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started-legacy/linux-setup.html

==== ここから寄り道 ====

参考サイトの手順をためしたのですが、現時点ではESP版Hello Worldがmakeできないようです。以下のエラーが発生してしまいました。

$ cd hello-mrubyc-world-esp32
$ make
...省略
At global scope:
cc1plus: warning: unrecognized command line option '-Wno-frame-address'
/home/xxx/esp/esp-idf/make/component_wrapper.mk:291: recipe for target 'asio/asio/src/asio.o' failed
make[1]: *** [asio/asio/src/asio.o] Error 1
/home/xxx/esp/esp-idf/make/project.mk:635: recipe for target 'component-asio-build' failed
make: *** [component-asio-build] Error 2

==== ここからまで ====

まずは関連パッケージをインストールします。

sudo apt update
sudo apt install tree gcc git wget make libncurses-dev flex bison \
 gperf python python-pip python-setuptools python-serial \
 python-cryptography python-future python-pyparsing

ESP32 ToolChainをダウンロードします。なおパッケージが古い可能性もあるので、公式サイトを確認してください!

mkdir $HOME/esp
cd $HOME/esp
wget https://dl.espressif.com/dl/xtensa-esp32-elf-gcc8_2_0-esp-2020r1-linux-amd64.tar.gz
tar -xzf xtensa-esp32-elf-gcc8_2_0-esp-2020r1-linux-amd64.tar.gz

あとは、環境変数をセットして…

echo 'export PATH="$HOME/esp/xtensa-esp32-elf/bin:$PATH"' >> $HOME/.profile
echo 'export IDF_PATH="$HOME/esp/esp-idf"' >> $HOME/.profile
source $HOME/.profile

ESP-IDF SDKをインストールすればOK。ちなみにこのgit cloneおよびpythonの依存ライブラリインストールはかなり時間がかかります:sweat:

git clone --recursive https://github.com/espressif/esp-idf.git
python -m pip install --user -r $IDF_PATH/requirements.txt

念のためシリアルポートへの権限のための設定をして作業完了です!

sudo usermod -a -G dialout $USER

mrubyのインストール

==== ここから寄り道 ====

このあとハンズオンまでやってみたいので、参考サイトどおり、mruby-1.4.1を入れてみました。

ちなみに ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux] にインストールしました。

rbenv install mruby-1.4.1

:bangbang:上記駄目でした。rbenv rehashしてもだめだったので下記のとおりaptでインストールしてください!

==== ここからまで ====

こちらでインストール
sudo apt install mruby

WSL上でHello World!

ハンズオン1を参考にやってみました。

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

プログラムもそのとおりに変更してみます。

mrblib/loops/master.rb
while true
  puts "Hello World!"
  sleep 1
end

んで、makeします。

make

初回は make menuconfig がでますがいったんESCで閉じてください。
makeが成功すると完了です!

ESP32との接続(シリアルポートの確認)

デバイスマネージャーでみると、COM3 となっているのでUbuntu上では /dev/ttyS3 でアクセスできるはずです。なお COM3 の最後の数字は環境によって異なりますので実際にデバイスマネージャーで確認してください。

image.png

ESP-IDF SDKの設定

シリアルポートの設定を行います。

make menuconfig

「Serial flasher config」を選択し…

image.png

「(/dev/ttyUSB0) Default serial port」を選択し、私の場合は /dev/ttyS3 に変更して保存、終了します。

image.png

image.png

書き込みと実行の確認

下記コマンドでESP32に書き込みます。

make flash

成功…と思ったら無慈悲なエラーが

Flashing binaries to serial port '/dev/ttyS3' (app at offset 0x10000)...
esptool.py v3.0-dev
Serial port /dev/ttyS3
Connecting........_____....._____....._____....._____....._____....._____....._____

A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
/home/xxx/esp/esp-idf/components/esptool_py/Makefile.projbuild:104: recipe for target 'flash' failed
make: *** [flash] Error 2

どうやらアップロード中はずっと ESP32のbootボタン を押さないといけないみたい。自動で切り替えてくれないのね…とりあえず成功した!

$ make flash
...省略...
Connecting........_
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: fc:f5:c4:1a:5d:fc
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0220
Compressed 25376 bytes to 15745...
Wrote 25376 bytes (15745 compressed) at 0x00001000 in 1.4 seconds (effective 146.2 kbit/s)...
Hash of data verified.
Compressed 223088 bytes to 114055...
Wrote 223088 bytes (114055 compressed) at 0x00010000 in 10.1 seconds (effective 177.4 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 103...
Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.0 seconds (effective 1627.1 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

書き込み後ESP32が再起動してプログラムが実行されますので下記コマンドで確認します。

make monitor
...省略...
I (0) cpu_start: App cpu up.
I (267) heap_init: Initializing. RAM available for dynamic allocation:
I (274) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (280) heap_init: At 3FFBD980 len 00022680 (137 KiB): DRAM
I (287) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (293) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (299) heap_init: At 40089E94 len 0001616C (88 KiB): IRAM
I (306) cpu_start: Pro cpu start user code
I (324) spi_flash: detected chip: generic
I (324) spi_flash: flash io: dio
I (325) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
Hello World!
Hello World!
Hello World!
Hello World!

Hello World! 何度も言いたくなる!!!

終わるときは Ctrl + ] で終了です

やっとここまでこれた:sob:

感想

ここまで厳しいHello Worldはプログラミングを始めた遠い昔を思い出させました…
次回こそはLチカを完了させます!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?