エントリー

ESP32-CAMの利用方法を模索

ESP32-CAMを動作させたのだけど,3セット(Amazon)もあるので利用できないか考えるため調べてみた

IMG_20230731_115244.jpg

ハードウェア
  • 既にモジュール化されているので大きな変更はできない
  • 接続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部の対策のみ施した

温度センサーの確認

3Dプリンタの温度管理のため温度センサーの準備をしている

BMP280のI2Cアドレス

複数個所の温度を取得しようとした時,複数のセンサを繋がないとならないがBMP280なら2つのアドレスが使えるってことで確認

仕様ではSDO端子をVccにつなぐと0x77で、GNDに落とすと0x76になる

良い具合に気象観測用で不良で交換したBMP280がある(6個あって完全に使えないのが2個で1個は実験で破壊したから3個)

SDOピンにプルダウンされている10kΩのチップ抵抗を外して,隣のプルアップされているピンに接続

IMG_20230804_153329.jpg

3.3VロジックのArduino miniでI2Cで接続してアドレス確認と温度取得確認

IMG_20230804_153235.jpg

BMP280をSPI接続で使用

ESP32-CAMではI2Cが使えないのでSPIで接続できるようにする

10kΩのチップ抵抗を全て外せばSPIで接続可能

IMG_20230805_144647.jpg

結果はESP32-CAMではSPIのセレクトラインであるCSを割り当てられるピンがないため失敗

IMG_20230805_144925.jpg

SPIに改造したBMP280の動作は未確認

ESP32-CAMでDHT22(AM2302)を確認

SPIの4ピンはSPIで使用しないならI/Oピンで使用できるのではということでAM2302を接続してみる

IMG_20230805_175811.jpg

通信に1ピンしか使用しない(専用I/F)ので13ピンで温度・湿度・気圧が取得できることを確認(12ピンは使用不可のようで,接続しておくとスケッチ書き込みでエラーとなり,外して無理やり書き込んでもスケッチは動作しない)

IMG_20230805_175742.jpg

ESP32のIDE設定記録

ESP32の設定を記録していなかったので追加

IoT Exprewss

トラ技が考案したWi-FI ArduinoボードでESP32モジュールをArduinoのPinで使える

IMG_20230731_115607.jpg

追加のボードマネジャーはURL指定

SS20230803_001.png

ボードはESP32>ESP32 Dev Moduleとなる

SS20230803_002.png

USBポートの設定のみで他はデフォルトで問題なし

SS20230803_003.png

その他

  • プログラム書き込み時は①Reset+BootボタンON>②Reset OFF>③Boot OFF>④書き込み>⑤Resetで実行
  • ボードのLEDはIO2(PIN2)に接続
ESP32-CAM

ESP32SにカメラとSDスロットがセットになっているボード

IMG_20230731_115332.jpg

プログラム書き込み用のシリアルは付いてないのでFTDIなどを繋ぐ

参考:https://www.circuitschools.com/how-to-program-upload-the-code-to-esp32-cam-using-arduino-or-programmer/

IMG_20230731_133509.jpg

ボードはESP Wrover Moduleとなる

SS20230803_011.png

  • Flash Frequency: “80MHz”
  • Flash Mode: “Q10”
  • Partition Scheme: “Huge APP (3MB No OTA/1 MB SPIFFS)”
  • Core Debug Level: “None”
  • Upload Speed: “921600”

Upload Speedは921600bpsが早くて良い

スケッチサンプルからESP32>Camera>CameraWebServerを読み込んでカメラをテスト

SS20230803_012.png

スケッチのカメラモジュールをCAMERA_MODEL_AI_THINKERに,WiFiのssid,passwordを設定

#define CAMERA_MODEL_AI_THINKER // Has PSRAM

const char* ssid = "******";
const char* password = "******";

コンパイルして書き込み

SS20230803_013.png

解像度を上げてもヌルヌル動作する

SS20230803_014.png

温度管理を追加し3Dプリンタ用のカメラとして使いたいところだが,I2Cが省かれているのでSPIを使うとIO-Pinが不足するので考え中

ピン配置

https://lastminuteengineers.com/esp32-cam-pinout-reference/

https://randomnerdtutorials.com/esp32-cam-ai-thinker-pinout/

(追加)

  • GPIO12~GPIO15の4PinはμSDがSPIで使用している
GPIO12: MISO
GPIO13: MOSI
GPIO14: CLK
GPIO15: CS(microSD Used)
  • SPIで追加デバイスは他のピンは全て使用されているのでCSピンが割り当てられないので困難(GPIO4のLEDを外す方法はある)
  • SPIを使わなければGPIO12~GPIO15を通常I/Oピンとして使用は可能なようだ

PLAプラスフィラメント(クリア)

3Dプリンタのエンクロージャーのジョイントを改良しようとしたところ,使用していたフィラメントが無くなってしまったので再購入しようとしたら価格がアップしていた

仕方ないので同じ「マット ライトブラウン」か近い色のフィラメントが木に合うので探してみたが別商品でも安くはない

IMG_20230801_124911.jpg

そこで造形が良好のPLAプラスフィラメントでクリアを選択

PETGでクリアは知っていたのだけどPLAでもあるとはどんな印刷物になるのか楽しみである

IMG_20230731_203606.jpg

「黒」「シルバー」でも選択した,STVICTORYのPLAプラスフィラメント(クリア)

フィラメントの見た目は半透明

IMG_20230801_124047.jpg

切れ端だと透けて見えるほど透明なのが判る

IMG_20230801_124835.jpg

早速印刷してみると(Cura設定はPLAプラスで同じ)造形自体は良好

IMG_20230801_134835.jpg

印刷物は内壁クロスの積層もあってかガラス細工のようにも観える

IMG_20230801_134850.jpg

またPLAだと0.8㎜ノズルで印刷すると表面がザラザラになるのが(透明ということもあってか)少し収まる

骨組みにジョイントを装着したところ見栄えも良い(ジョイントは透明が合うようだ)

IMG_20230801_183041.jpg

改良点は断熱用のプラダン装着用の差し込み口で,当初はプラダンを貼り付ける予定だったのを取り外しができた方が便利なので修正

IMG_20230801_183215.jpg

後は上部の問題もあるが前面を観音開きにするかどうか考え中

 

 

ユーティリティ

検索

エントリー検索フォーム
キーワード

新着コメント

Re:SDRplay社RSP1クローンを購入
2025/05/25 from 匿名希望
Re:Mozilla FirefoxではNHKプラスを再生できない件
2025/05/09 from Donabeyaki
Re:ATS-25を作製する
2025/03/23 from kazu
Re:ATS-25を作製する
2025/03/22 from admin
Re:ATS-25を作製する
2025/03/22 from kazu

過去ログ

Feed