ESP32の開発環境いろいろ

#はじめに

先日、[ESP32(ESP-WROOM-32)でLチカ](http://qiita.com/rukihena/items/6a904368700eb1c7d2a3)という記事を書きました。

これは Arduino IDE で開発する方法でした。

しかし、ESP32 の開発方法はほかにも様々な環境があります。それをご紹介してまいります。

esp32.net の [TOOLS, FRAMEWORKS, LIBRARIES & CODE](http://esp32.net/#Tools-n-Code) を元に書いています。

#ESP-IDF

[ESP-IDF公式](https://github.com/espressif/esp-idf)

Official development framework for ESP32(公式開発フレームワーク) が、ESP-IDF: Espressif IoT Development Framework と呼ばれるものです。

C++のコードをテキストエディタで書いて、make all でコンパイル、make flash で実機書き込みするような開発環境です。

すべての機能にアクセスできるものの、最近の統合開発環境に慣れている方にはとっつきにくいでしょう。

ベースの部分にESP-IDFを使いつつ、IDEとして Eclipse や Visual Studio を使う方法もあるみたいです。

#Arduino Core for the ESP32

[Arduino core for ESP32 WiFi chip 公式](https://github.com/espressif/arduino-esp32)

先日、書いた [ESP32(ESP-WROOM-32)でLチカ](http://qiita.com/rukihena/items/6a904368700eb1c7d2a3) が、コレです。

一番メジャーと思われる開発方法です。

ただ、loop() ですべての処理を行うので、ESP32のマルチコアを生かすことができるのか、ちょっと疑問に思ってます。ESP32のポテンシャルを生かすために、その辺の制約を回避してArduino IDE上でゴニョゴニョするぐらいなら、生の ESP-IDF を使ったほうがいいんじゃないかと。

#Simba Embedded Programming Platform

[Simba 公式](http://simba-os.readthedocs.io/en/latest/index.html)

Simba ってなんぞや？

タイトル通り、「Embedded Programming Platform」です。

日本語の情報が少ないので、これを採用するのは茨の道の予感がします。

[対応ボード](http://simba-os.readthedocs.io/en/latest/boards.html) 間で移植しまくりたい人には良いかもしれません。

また、ESP-WROOM-32 対応というわけではなく、ESP32(チップ)を使ったNANO32という基板に対応しているものなので、ESP-WROOM-32 で使えるのかどうか不明です。

#MicroPython

Pythonの小さいやつです。スクリプト言語Pythonの文法でコードが書けるんだと思います。（適当）

実装が3つありますｗ

[Official MicroPython](https://github.com/micropython/micropython-esp32)

esp32.net でのリンクが Official となっています。Espressif の公式というわけではなく、MicroPythonプロジェクトからみた公式のようです。

2017/2/5現在、beta版です。

[Pumbaa (MicroPython on Simba)](https://github.com/eerimoq/pumbaa/)

Simbaの上にMicroPythonを乗っけたものです。
レイヤ２つ噛んでるところが、長所でもあり短所でもあると思われます。

[PyCom's MicroPython Port](https://github.com/pycom/pycom-micropython/tree/master/esp32)

MicroPython port for the ESP32 based boards from Pycom ということなんですが、Pycom ってなんすか？

#Lua

Lua もスクリプト言語ですね。

これも実装が3つありますｗ

よくわからないので、リンクだけ挙げておきます。

[LuaNode](https://github.com/Nicholas3388/LuaNode)
[Lua RTOS](https://github.com/whitecatboard/Lua-RTOS-ESP32)
[NodeMCU ESP32/ESP-IDF Project](https://github.com/nodemcu/nodemcu-firmware/projects/1)

#JavaScript
みなさんご存知JavaScript。詳しい人と話すとECMAScriptとちゃんと区別して発言しないと怒られるアレです。

実装が2つあります。

[Espruino JavaScript](https://github.com/espruino/Espruino/tree/ESP32)
[Duktape](https://github.com/nkolban/duktape-esp32)

#Forth

[CForth](https://github.com/MitchBradley/cforth)

ギークが大好きなForth。たぶん、Forthを動かすことが目的なんだと思います。（偏見）

#BASIC

[BASIC INTERPRETER HIDDEN IN ESP32 SILICON](http://hackaday.com/2016/10/27/basic-interpreter-hidden-in-esp32-silicon/)

ROMに隠しBASICが乗ってるSUGEEEEE! というものです。

ioset/ioget でGPIOをいじれるし、なんなら peek/poke でハードウェア直叩きもできるぜという優れもの？ です。

GPIO12をプルアップして起動すると、BASICが立ち上がるみたいです。Arduino IDEで書き換えちゃったあとは動かないと思います(多分)。

#おわりに

いろいろあって、どれを使うか悩んじゃいますね。

C++系で開発するなら、情報が豊富であろう、Arduino IDE を使って開発し、限界が見えてきたら、生の ESP-IDF を使うことを検討する、というのがいいと思います。

スクリプト言語系では、MicroPython, JavaScript, Lua があります。(検索するとmrubyもあるようです。) 自分の得意な言語を選ぶことになるでしょう。しかし、実装の安定度や機能の網羅で差があると思うので、実現したい機能が安定して使えるかどうかを見極めるところで苦労するかもしれません。

ForthとBASICは、ネタとしては面白いと思います。

Simbaは、先にも書きましたが他ボードへの移植を考えている場合には選ぶ理由があると思います。