汎用ESP8266/ESP32ボードでNefry/Nery BTのソフトウェア群を使う

# 本記事でやること

Nefryのハードウェアを使わずとも、安い汎用のESP8266/ESP32ボードで便利なNefryのソフトウェア群を使うことができたのでその紹介をしています。使えないピンなどの注意点も記載しています。
Nefryアドベントカレンダーなのに、Nefryのハードウェアを使わない記事で大丈夫か！？

# Nefryの利点と欠点

[Nefry](https://nefry.studio/)というESP8266/ESP32の開発ボードがあります。はんだ付けを行わなくても手軽にIoTができるというもので、ESP32版のNefry BTはクラウドファンディングでは目標の473%を達成しています。


Nefryは、素のESPボードに比べて以下のような利点があります。

* Groveコネクタを使ってはんだ付け不要で電子工作ができる
* Webブラウザを使って簡単にWifi設定ができる
* IFTTTやambientといったクラウド連携のためのライブラリと作例が充実している
* 日本語の情報が多い（開発者が日本人のため）

わたし的には特に2番めのWifi設定ができるのが大きいです。素のESPボードを使ってこれをやろうとすると、この部分だけでかなりのコードをスケッチに書かなければいけませんが、Nefryを使えばスケッチに何も書かずともはじめからWifi設定が便利になります。

しかし、以下のような問題もあります。

* 値段が高い
* 入手性が良くない（在庫がない時がある。特にESP8266のNefry）

実際、素のESPボード値段を比べると価格の差は歴然です。
**ESP8266版**

|製品|価格|
|---|---|
|[dotstudio Nefry v2.0（千石電商）](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-55W7)|4480円|
|[ＥＳＰ－ＷＲＯＯＭ－０２開発ボード（秋月電子通商）](http://akizukidenshi.com/catalog/g/gK-12236/)|1280円|

**ESP32版**

|製品|価格|
|---|---|
|[dotstudio Nefry BT（千石電商）](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-55W8)|5380円|
|[ＥＳＰ３２－ＤｅｖＫｉｔＣ（秋月電子通商）](http://akizukidenshi.com/catalog/g/gM-11819/)|1480円|

はんだ付けが不要になるように、Groveコネクタをつけたり、OLEDモジュールを刺すだけで使えたりと便利なところは多いのですが、価格が数倍してしまうと躊躇してしまいます。

# ソフトウェアだけを使う

上で触れたようにNefryはソフトウェア群が充実しています。汎用の安いESPボードで、これらのソフトウェアを使うことができたので紹介します。

## ArduinoIDEの設定

[ArduinoIDEの環境を整えよう - Nefry](https://nefry.studio/ArduinoIDE%E3%81%AE%E7%92%B0%E5%A2%83%E3%82%92%E6%95%B4%E3%81%88%E3%82%88%E3%81%86/) の通りに設定します。
要約すると以下です。

- ArduinoIDEのインストール
- ボードマネージャーからNefry/NefryBTをインストール

## 新規スケッチ作成とボードの選択

- ArduinoIDEで[ファイル]→[新規ファイル]で新しいスケッチを作成します。
- [ツール]→[ボード]から、**Nefry Modules > Generic ESP8266 Module** または **Nefry (ESP32) Module > ESP32 Dev Module** を選択します。
  - ESP32 Arduino とか ESP8266 Modules の中のものではないので注意。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/70022/98039c79-ec0f-a07b-cf25-95c1b0f739f6.png)

## ソースコード作成

Nefry.h をインクルードするだけで良いです。
試しに下記の**何もしないプログラム**をボードに転送してみます。

```cpp:nefry_test.ino
#include <Nefry.h>
void setup() {
}
void loop() {
}
```

こんなプログラム、何も動かない、と思いきや…

NefryBT-**** というアクセスポイントが現れます。
このアクセスポイントに接続し、ブラウザで192.168.4.1にアクセスすると、Nefryの設定画面が現れます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/70022/f6b0ec3d-0922-7c21-038a-8822711e72fb.png)

ここで「Setup WiFi」をクリックすると、Wifiの設定画面が現れます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/70022/e9441a7b-458d-3c2e-abf2-c351ec15ffbf.png)

ここに、普段使っているWifiのSSIDとパスワードを入力してSaveを押すと、Wifiが設定され、自動で再起動します。
ここの設定は不揮発メモリに保存されるので、電源を切っても保持されます。

再度NefryBT-****にアクセスし、ブラウザで192.168.4.1にアクセスすると、Wifi SpotにSSIDが表示され、IPアドレスが割り当てられています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/70022/afb7a7ff-3157-dcd0-e42a-ea3437ac5bbf.png)

普段のWifiアクセスポイントに接続を戻すと、割り当てられたこのIPアドレスでアクセスできます。

**もう一度言います。Nefry.hをインクルードしただけで、他は空のプログラムです。**これらの機能を素のESP32/ESP8266で実現しようとすると、かなりの行数のプログラムを書かなければいけません。素晴らしいですね。

## 使用できないピン

Nefryハードウェアを使っていませんが、Nefryボードとしてソフトウェアが動作するため使用できないピンがあります。

|ボード|使用できないピン|
|---|---|
|ESP8266|0, 4, 16|
|ESP32|0, 4, 16|

# おわりに

Nefryライブラリを使うことによって、スケッチ作成の際にネットワーク設定の煩わしいコードを書かずに済み、ユーザーは自分のやりたいことに専念できます。また、Nefryを使った豊富な作例も参考にできます。
Nefryが高いよという人や、Nefryでプロトタイピングしたものを別のESPボードに移植する場合にも活用できると思います。