WROOM-32 セットアップ

WROOM-32の開発環境セットアップ ～ Ｌチカ

いろいろ使い勝手のよさそうなWROOM32を使っていこうと思います。
公式のセットアップで一部つまずきましたのでメモっておきます。

さっそくWROOM-32にプログラムを書く準備です。
今回は、ESP-IDFを使った方法でやりますので、手順は以下の公式の通りです。
　http://esp-idf.readthedocs.io/en/latest/windows-setup.html

#Step 1: Quick Steps
MSYS32をDL (以下のリンクは20170401時点での最新ver)
　   https://dl.espressif.com/dl/esp32_win32_msys2_environment_and_toolchain-20170330.zip
Alternative - の方は飛ばします。

#Step 2: Getting the esp-idf repository from github 
上記のzipをC直下に展開して、コマンドラインで以下を実行
`C:\msys32\mingw32.exe`

好みのディレクトリに移動して以下を実行。ここでは、/home/nemeにesp-idfディレクトリを作成しました。
`mkdir /home/name/my-esp-idf`
`cd /home/name/my-esp-idf`
`git clone --recursive https://github.com/espressif/esp-idf.git`

#Step 3: Starting a project
サンプルアプリをDLします。
ここでは/home/name/にespSampleAppというディレクトリを作成してそこにDLしました。
`mkdir /home/name/espSampleApp`
`cd /home/name/espSampleApp`
`git clone https://github.com/espressif/esp-idf-template.git`

サンプルアプリのコードはこんな感じです。

```esp-idf-template/main/main.c
#include "freertos/FreeRTOS.h"
#include "esp_wifi.h"
#include "esp_system.h"
#include "esp_event.h"
#include "esp_event_loop.h"
#include "nvs_flash.h"
#include "driver/gpio.h"

esp_err_t event_handler(void *ctx, system_event_t *event)
{
    return ESP_OK;
}

void app_main(void)
{
    nvs_flash_init();
    tcpip_adapter_init();
    ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) );
    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    ESP_ERROR_CHECK( esp_wifi_init(&cfg) );
    ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) );
    ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );
    wifi_config_t sta_config = {
        .sta = {
            .ssid = "access_point_name",
            .password = "password",
            .bssid_set = false
        }
    };
    ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &sta_config) );
    ESP_ERROR_CHECK( esp_wifi_start() );
    ESP_ERROR_CHECK( esp_wifi_connect() );

    gpio_set_direction(GPIO_NUM_4, GPIO_MODE_OUTPUT);
    int level = 0;
    while (true) {
        gpio_set_level(GPIO_NUM_4, level);
        level = !level;
        vTaskDelay(300 / portTICK_PERIOD_MS);
    }
}
```
WiFiのアクセスとLチカですね。
ssidとpasswordを自分の環境にすれば動きそうです。
            .ssid = "access_point_name",
            .password = "password",

ハードウェアはLEDをGPIO_NUM_4に接続すれば良さそうですね。
[仕様書](https://www.espressif.com/sites/default/files/documentation/esp_wroom_32_datasheet_en.pdf)を確認すると、pin番号26。
>![GPIO4.png](https://qiita-image-store.s3.amazonaws.com/0/165672/5bd763c0-373c-b8c0-12e7-f2b96142ae58.png)

私の使ってるボードはDOIT製の開発ボードver.1ですので、D4のピンにpin番号26(GPIO4)がアサインされています。
>![GPIO4_D4.png](https://qiita-image-store.s3.amazonaws.com/0/165672/7f6372c4-a14d-9555-52e7-9ce2f208c9bc.png)
ボードのバージョンなどの情報は[ここ](http://ht-deko.com/arduino/esp-wroom-32.html)を参考にさせていただきました。←大変参考になります。
回路図は[ここ](http://ht-deko.com/arduino/esp32_Schematic_Prints.pdf)

ソースコードのGPIO_NUM_2に変更すると、開発ボード上の青色LEDが光ります。

#Step 4: Configuring the project
いよいよビルドです。
以下のコマンドでmsys32を起動します。
`C:\msys32\msys2_shell.cmd`
ここからはmsys32状での作業です。
idfのパスを通す
`export IDF_PATH="C:/path/to/esp-idf`
`＃今回の場合　export IDF_PATH="C:/msys32/home/name/my-esp-idf/esp-idf`
 
公式に従って、サンプルアプリのディレクトリに移動してmake menuconfig
`cd /home/name/espSampleApp/esp-idf-template`
`make menuconfig`

`Serial flasher config  --->`
`(/dev/ttyUSB0) Default serial port`
を選択し
`/dev/ttyUSB0をCOM29`
に変更。
`Serial flasher config  --->`
`Default baud rate (115200)  --->`
UARTの設定でボーレートが115200となっていますが、230400や931600にするとプログラムの転送速度が早くなります。(2MBaudはエラーになりました)
`Exit`
`Exit`
`Save`

ここから、makeと書いてあるのですが、実行すると以下のエラーがでました。
`make`

>$ make
GENCONFIG
CC src/bootloader_random.o
CC src/flash_encrypt.o
CC src/esp_image_format.o
CC src/flash_partitions.o
CC src/secure_boot_signatures.o
CC src/secure_boot.o
CC src/bootloader_flash.o
AR libbootloader_support.a
CC log.o
AR liblog.a
CC flash_qio_mode.o
CC bootloader_start.o
AR libmain.a
LD bootloader.elf
/bin/sh: python: コマンドが見つかりません
make[1]: *** [/home/takaf/my-esp-idf/esp-idf/components/esptool_py/Makefile.projbuild:49: /home/takaf/espSampleApp/esp-idf-template/build/bootloader/bootloader.bin] エラー 127
make: *** [/home/takaf/my-esp-idf/esp-idf/components/bootloader/Makefile.projbuild:31: /home/takaf/espSampleApp/esp-idf-template/build/bootloader/bootloader.bin] エラー 2

pythonが見つかりません、とありますが、ツールチェーンへのパスが通っていないようです。
以下でパスを通します。[ここ](http://nemuisan.blog.bai.ne.jp/?eid=220897)を参考にさせていただきました。
私の環境だと、以下でパスが通りました。
`export PATH="$PATH:/usr/bin:/mingw32/bin:/opt/xtensa-esp32-elf/bin"`
再度
`make`
完了!!

続いて書き込み
`make flash`

ここまでの作業でWiFiの接続とLEDチカリを確認しました。
次はexamplesにある、UART(esp-idf/examples/peripherals/uart_echo)の接続を試したいと思います。

<補足情報>

私が使っている開発ボードはこれです。e-bayで頼みました。
香港から発送されてフィンランドを経由して来ましたので届くまで1ヵ月くらいかかりました(汗)
http://www.ebay.com/itm/351936749769?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

気づいたら開発ボードが秋月さんでも販売され始めてましたので、今後は簡単に入手ができていいですね。
http://akizukidenshi.com/catalog/g/gM-11819/
スイッチサイエンスさんからはピッチ変換ボードが出ています。
https://www.switch-science.com/catalog/3170/

20170411追記
export関係のコマンドですが、msys32を開くたびに設定するのが面倒なので、/etc/profile.dに、espdir.shを追加して、起動時に自動で叩くようにしました。
`vim /etc/profile.d/espdir.sh`

```/etc/profile.d/espdir.sh
export IDF_PATH="C:/path/to/esp-idf
export PATH="$PATH:/usr/bin:/mingw32/bin:/opt/xtensa-esp32-elf/bin"
```