ESP32-CAMの利用方法を模索
- 2023/08/06 16:03
- カテゴリー:Arduino・AVR
- タグ:ESP32
ESP32-CAMを動作させたのだけど,3セット(Amazon)もあるので利用できないか考えるため調べてみた
ハードウェア
- 既にモジュール化されているので大きな変更はできない
- 接続I/Oはカメラ,microSDスロット,高輝度LEDである
- CPUはESP32SでEPS32と同じと考えてよく,おそらくI2CとSPIには不具合があるかと思われる
- GPIOはあるが全て使用済なので利用は困難でSPIに接続されている4ピンをSPI未使用にする(microSDは不可となる)ことでOUTPUTピンとして利用できそう
- モジュールから高輝度LED以外は取り外すことは困難
ソフトウェア
モジュール構成からカメラ機能を主とした利用形態しかなく追加できるI/Oもかなり限定されそうだ
カメラ機能が主なので元となるスケッチはサンプルのCameraWebServerが優秀で良いためプログラムを調べてみるとHTML(camera_index.h)がgzip形式になっていることが判る
HTMLソースが編集できないと画面の変更追加ができないのでネットで情報を得てみると最終的にgzip形式に変換する方法は判った
しかしわざわざgzip形式にすることもないのでそのまま編集できるように改造
①まずはサンプルを動作させてブラウザでHTMLソースを退避しヘッダーファイル(index_ov2640.h等,以下のように)にする
const uint8_t index_ov2640_html[] = R"=====(<!doctype html>
<html>
<head>
<meta charset="utf-8">
(省略)
</body>
</html>)=====";
size_t index_ov2640_html_len = sizeof(index_ov2640_html)-1;
橙色部分が前後に追加したテキスト
index_ov2640なのはスケッチで使用されているESP32-CAMのカメラタイプ名だから
②app_httpd.cppのcamera_index.hを外しindex_ov2640.hを使用
③同じくapp_httpd.cppのesp_err_t index_handler()を編集
(旧)
static esp_err_t index_handler(httpd_req_t *req)
{
httpd_resp_set_type(req, "text/html");
httpd_resp_set_hdr(req, "Content-Encoding", "gzip");
sensor_t *s = esp_camera_sensor_get();
if (s != NULL) {
if (s->id.PID == OV3660_PID) {
return httpd_resp_send(req, (const char *)index_ov3660_html_gz, index_ov3660_html_gz_len);
} else if (s->id.PID == OV5640_PID) {
return httpd_resp_send(req, (const char *)index_ov5640_html_gz, index_ov5640_html_gz_len);
} else {
return httpd_resp_send(req, (const char *)index_ov2640_html_gz, index_ov2640_html_gz_len);
}
} else {
log_e("Camera sensor not found");
return httpd_resp_send_500(req);
}
}
(新)
static esp_err_t index_handler(httpd_req_t *req)
{
httpd_resp_set_type(req, "text/html");
httpd_resp_set_hdr(req, "Content-Encoding", "identity");
sensor_t *s = esp_camera_sensor_get();
if (s != NULL && s->id.PID == OV2640_PID) {
return httpd_resp_send(req, (const char *)index_ov2640_html, index_ov2640_html_len);
}
log_e("Camera sensor not found");
return httpd_resp_send_500(req);
}
汎用ではないのでESP32-CAMのindex_ov2640_htmlだけとなる
まずはUI部の対策のみ施した