TTGO T-CAMERAをSTAモードで起動する

Twitterで見たのをきっかけに、TTGO T-CAMERAというカメラ付きボードを買いました。スペックは以下の通り。

>レンズ: ノーマル/魚眼　※魚眼のほうがちょっと高い
マスターチップ: esp32 デュアルコア
ディスプレイタイプ: OLED
Uart チップ: CP2104
カメラ: OV2640
カメラ解像度: 2 メガピクセル
環境センサー: BME280

ESP32なのでArduinoで開発できるのが、ド素人の私にはありがたいです。

これをアリババで初回クーポンを適用して20ドルくらい（送料込み）で購入。梱包状態もよく、アリババ初体験でしたが、好印象。[→こちらで買えます](https://ja.aliexpress.com/item/TTGO-T-ESP32-WROVER-PSRAM-ESP32-WROVER-B-OV2640-0-96/32968683765.html?spm=a2g0s.9042311.0.0.7f1c4c4dEa8jFt)

このボード、初期設定ではSOPTAPモードになっています。ボードを電源につなぎ、PCやスマホなどのブラウザで「2.2.2.1」と入力すると、すぐにカメラを起動できます。

>![image.png](https://qiita-image-store.s3.amazonaws.com/0/172882/56e014dd-c542-64b4-ace2-e02811e5f93d.png)

ただ、PC（またはスマホ）がボードと直接つながっている状態なので、インターネットからは遮断されます。そこで今回はSTAモードでカメラを起動するところをやってみます。

#やったこと
- サンプルコードをDLしてコンパイル
- サンプルコードを書き換える
- UART通信のドライバをインストール
- ボードにアップロード

むちゃくちゃ難易度は低いはずですが、数か所はまりました。その辺を記録することで、どなたかの役に立てれば幸いです。

#サンプルコードをDLしてコンパイル
サンプルコードはGitHubの[→こちら](https://github.com/lewisxhe/esp32-camera-bme280)からとってきます。写真の右にある”Download ZIP”をクリックすればよいです。
>![image.png](https://qiita-image-store.s3.amazonaws.com/0/172882/7268297e-2ece-3c0c-5ace-7a18de01f4ad.png)

ArduinoIDEでこれをコンパイルするだけなのですが、なかなかに難しいです。DLしたZIPの中に、README.MDがあります。ここにいろいろ記載されているので、ちゃんとやらないとコンパイルが通りません。

####サンプルコードのZIPを開きフォルダの名前を変更する
ZIPを開くと`esp32-camera-bme280-master`というフォルダに解答されると思います。このフォルダ名が、`esp32-camera-bme280.ino`と名前が異なるのでフォルダ名の方を、`esp32-camera-bme280`に変える。ファイル構成はこんな感じになるはず。
>![image.png](https://qiita-image-store.s3.amazonaws.com/0/172882/1f705f34-2676-75fc-4169-e8c0e681d347.png)

####ボードの最新版をインストールする
[→こちら](https://github.com/espressif/arduino-esp32/releases)にアクセスし、ESP32 Arduino `v1.0.1rc2`以上のバージョンにアップデートします。

ArduinoIDEの［ファイル］→［環境設定］→［追加のボードマネージャのURL］に
`https://github.com/espressif/arduino-esp32/releases/download/1.0.2-rc1/package_esp32_dev_index.json`をコピペします。
>![image.png](https://qiita-image-store.s3.amazonaws.com/0/172882/459dd764-77d1-19db-1fe8-8daaa3a32d4b.png)

次に、［ツール］→［ボード］→［ボードマネージャ］を開き、下のほうにあるesp32のバージョンを更新します。
>![image.png](https://qiita-image-store.s3.amazonaws.com/0/172882/a99027be-c161-7e0e-cb81-1986bc3bb749.png)

####いくつかのインクルードファイルをインストールする
これは人によって違うかもしれません。私は3つほどインストールしました。すべてコンパイル中に出たアラームから`.hファイル`の名前を拾って、GitHubで見つけてこれました。

####Adafruit_BME280.hを一部変更
`Adafruit_BME280.h`の29行目、`#include <Adafruit_Sensor.h>`をコメントアウトする。

以上をちゃんとやるとコンパイルが通るはず。10分くらいかかります。通れば次のステップです。

#サンプルコードを書き換える
`esp32-camera-bme280.ino`の頭の方にある定義文を以下のように書き換えます。

```
#define ENABLE_SSD1306
//#define SOFTAP_MODE　//この行をコメントアウトする 
#define ENABLE_BME280
#define ENABLE_SLEEP
#define ENABLE_IP5306

#define WIFI_SSID   "SSID"　　//自分の環境に合わせてWiFiのSSIDを入力
#define WIFI_PASSWD "PassWord"　//自分の環境に合わせてWiFiのパスワードを入力
```
変えるのは3行だけ。簡単です。
#UART通信のドライバをインストール
microUSBケーブルでボードとPCを接続するため、UARTモジュールのドライバをインストールします。[→こちら](https://jp.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)から環境に合わせたドライバをインストールしましょう。

その後はmicroUSBケーブルでボードとPCを接続。写真のようにデバイスマネージャーにて、`Silicon Labs CP210x　***`　と表示されていればOKです。ここで表示されているポート番号（写真ではCOM４）をArduinoのシリアルポートに設定しましょう。
>![image.png](https://qiita-image-store.s3.amazonaws.com/0/172882/9bf34f9b-268c-4219-bd6b-5c7da25c15fb.png)

もしボードが認識されていないようでしたら、ケーブルを疑ってみましょう。microUSBには充電専用というのがあります。見た目にはわかりません。[こんなやつ](https://t.co/tTaCi7VAhU)を買いましょう。

#ボードにアップロード
ここまでできれば、あとははまらないと思います。[マイコンボードに書き込む]を実行しましょう。書き込み後にボードの`RSTボタン`を押してリセットすると、ボードが再起動され、WiFiと接続を開始します。写真のようにIPが表示されると成功です。
>![image.png](https://qiita-image-store.s3.amazonaws.com/0/172882/42a9a158-a79f-35b2-42ee-d8a3298dc509.png)

ここで表示されたIPをブラウザに入力すると、STAモードでカメラにつながります。このモードならインターネットにつながったままなので、ネットを楽しみながら、ときどきカメラの様子を見る、といった使い方ができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172882/0bd6a65a-8ae2-7ac2-a594-08f6b75d60f5.png)

#まとめ
以上を通じて、ボードにコードをアップすることができるようになりました。
今後は
- 人感センサをトリガに写真を撮る
- 顔認識してみる
など、いろいろやってみようかと思います。たぶんサーバ構築とかをしないといけないのかな。めっちゃはまる予感です。