ESP32 Camera Web Server


 ESP32搭載ボードESP32-CAMを使いウェブカメラを製作する.
 ArduinoIDEのサンプルスケッチ ESP32->Camera->CameraWebServerを使いSSIDやPASSを設定し,プログラムを書き込むと,ESP32上でhttpd(ウェブサーバ)が動き,ブラウザからアクセスできるウェブカメラを構築できる.
 ただし,ArduinoIDEのサンプルスケッチを使用した場合,ボードに搭載されたLEDをウェブアプリから制御できない(ウェブアプリの画面にコントロールが出ない).
 そこで,ESP-IDFを使い,コードをGitHubから引っ張ってきてmakeしたら,無事LEDの輝度調整もウェブアプリからできるようになった.
 このプログラムではESP32上でFaceRecognitionも動く.
 Edgeではうまく動きません,筆者はChromeで検証しています.

配線

[ESP32-CAM]   [PC(USB)]
5V---ー----ー5V
GND--------GND
U0R--------TxD
U0T--------RxD
IO0ー|(書き込み時ジャンパ/実行時ジャンパ外す)
GNDー|

コードを取得

git clone --recursive https://github.com/espressif/esp-who.git

次のフォルダにプログラムがまとまっている
/examples/single_chip/camera_web_server/

cd esp-who/examples/single_chip/camera_web_server
make menuconfig

menuconfigで以下の項目を設定する

●書き込みに使用するシリアルポート
Serial flasher config->Default serial port
●無線LANのSSID(ESP32をSTAで使用する場合)
Camera Web Server->WiFi Settings->WiFi STA SSID
●無線LANのパスワード
Camera Web Server->WiFi STA Password
●LEDをウェブアプリから使用する場合は選択・設定する
Camera Web Server->LED Illuminator
●使用するボードの設定
Camera Web Server->Camera Pins->Select Camera Pinout
●顔認識を使用する場合は選択する
Camera Web Server->ESP-WHO Face Detection
Camera Web Server->ESP-WHO Face Recognition

menuconfigしたらボードへ書き込み

make flash

画像の方向を直す

このままでは,画像・映像の向きが90°回転している(ESP32-CAMボードを横向きで使用するなら正しい方向になっている)ので,httpdが吐き出すHTMLを編集して対応する.

cd esp-who/examples/single_chip/camera_web_server/main/web
vi index_ov2640.html

57行目 figure img{ の次に
transform: rotate( 90deg);
を追加
5行下のmargin-topを8px→15%に変更

クライアントへ投げるHTMLファイルは圧縮して保持しているようで,

./compress_pages.sh

再度書き込み

cd ../..
make flash

ちなみに

 LEDは放熱しきれないと焼けてしまうので,MAXの輝度を設定しておくことが出来ます(menuconfigの中で).

参考文献

(ESP-IDF)
https://tomono.tokyo/2019/03/11/7519/
https://robotzero.one/esp32-camera-module/
(ArduinoIDE)
https://qiita.com/Nabeshin/items/b195cad1afe99ce29f1e
https://www.ovt.com/image-sensors/2-5-megapixels