4. 自作監視カメラの製作
(ESP32-CAMを使う)

更新日: 2026.06.28

概要

前回で下準備が済んだので今回は製作です。

回路図と実装

Schematic of ESP32 & module
  • 前回の回路にプッシュスイッチをGPIO2に追加しています。機能は後ほど説明します。
  • ピン配置
      ピン用途
      GPIO13サーボモータ(上下用)
      GPIO15サーボモータ(左右用)
      GPIO14人感センサ
      GPIO02モードスイッチ
      GPIO04フラッシュ(内蔵)

以下が組み上がり。

Final Prototype
  • 100円ショップで買った瓶に砂を入れ土台にしています。
  • 瓶の蓋にSG90のステーションをねじ止めして固定
  • ステーションの先端にESP32-CAMを固定
  • カメラの横に人感センサを配置
  • 電源はDC 5V 2A を供給。(3.3VはESP32-CAMが作成)
  • 追加したモードスイッチはESP32-CAMの裏に配置しました。

コンパイル前の設定

ファイルの修正

このファイルをダウンロードし解凍して下さい。ー>"ESP32_net_camera.zip"

解凍後ファイルの構成は以下の様になります。この中で、 "wifi_config.txt" と "ESP32_net_camera.ino" を コンパイル前に修正します。

    ESP32_net_camera
    ├── ESP32_net_camera.ino
    ├── data
    │   ├── ESP32_net_camera.html
    │   ├── file_list.html
    │   ├── photo
    │   ├── recipient.html
    │   ├── take_preview.html
    │   └── wifi_config.txt
    └── regist.h
  • "wifi_config.txt"
    • このファイルをエディターで開くと下記の様になっています。
    • SSID,PASSWORD,aaa,bbb,xxx,mail_addr

    • 6個のパラメタをカンマ "," で区切った文字列。各パラメタに下記の値をセットします。
        パラメタ説明
        SSIDルータのSSID
        PASSWORDルータのパスワード
        aaaGatewayアドレス3番めの値 例:192.168.aaa.bbb
        bbbGatewayアドレス4番めの値 例:192.168.aaa.bbb
        xxxカメラアドレス4番めの値  例:192.168.aaa.xxx
        mail_addrメールの送り先アドレス
    • Gatewayアドレスはルータの機種で違いますが、192.168.aaa.bbbでカバーできるはずです。
    • カメラのハンドリングを考えてIPアドレスを固定します。IPアドレスは "192.168.aaa.xxx" になります。
    • プログラムで改行を目印にこの文字列を読み込んでいます。必ず改行を入れてファイルを保存して下さい。

  • "ESP32_net_camera.ino"
      ESP32_net_camera.ino arduino
      // --- Gmail設定 --- #define SMTP_HOST "smtp.gmail.com" #define SMTP_PORT 465 /* The sign in credentials */ #define AUTHOR_EMAIL "xxxxxxxx@gmail.com" //Gmail 貴方のメールアドレス #define AUTHOR_PASSWORD "yyyyyyyyyyyyyyyy" //16桁のアプリパスワード /* Recipient's email*/ String recipient_email;
    • 78行:#define AUTHOR_EMAIL "xxxxxxxx@gmail.com" //Gmail 貴方のメールアドレス
      • ここに自分のGメールアドレスを指定
    • 79行:#define AUTHOR_PASSWORD "yyyyyyyyyyyyyyyy" //16桁のアプリパスワード
      • ここにGmailで取得した16桁のアプリパスワードを指定
    • ESP32_net_camera.ino arduino
      if(digitalRead(mode_pin)){ Serial.println("Starting in AP Mode..."); WiFi.softAP("ESP32CAM-SETUP", "abcdefg"); // SSID & Passowrd Serial.print("AP IP Address: "); Serial.println(WiFi.softAPIP()); httpd_handle_t wifi_server = NULL;
      • 211行:WiFi.softAP("ESP32CAM-SETUP", "abcdefg"); // SSID & Passowrd
        • ESP32-CAMがAPとして立ち上がる時のSSIDとPassowrdを指定します
        • SSID:"ESP32CAM-SETUP" と設定していますが、必要に応じて変更下さい。
        • Passowrd:"abcdefg" と設定していますが、必要に応じて変更下さい。

Arduino IDEの設定

Arduino IDE Setup
  • ボード: ”AI Thinker ESP32-CAM
  • Partition Scheme:”No OTA(2MB APP/ 2MB SPIFFS)

これでコンパイル実行出来ます。

使い方の説明

スケッチをコンパイル実行後、固定したアドレスにブラウザでアクセスすると下記の画面になります。 これが今回のスケッチのホーム画面です。 ESP32にとってStreamingはかなり負担が大きくStreaming中は他の処理を行う事が困難だった為、 管理をStreaming中とその他い分けています。

HP of ESP32-CAM

Streaming停止時

Detail of ESP32-CAM HP at none Streaming
  • 機能するボタン
    • Startボタン:これを押すと中央の窓でStreamingが開始します。
    • Fileボタン:これを押すとFile Manegerのポップアップ画面が表示されます
      • カメラに保存されているファイルを管理します。
        • Read:選択されたファイルを読み込んで表示します。
        • Download:選択したファイルをPCにダウンロードします。
        • Delete:選択したファイルを削除します。
        • ALLのDownloadとDelete:ファイルすべてをダウンロードまたは削除します。(ちょっと調子が悪い)
    • Recipient:メール宛先変更。
      • 人感センサが動体を感知した時にメールと写真を送信します。
      • ここで宛先を変更出来ます。
    • フラッシュ用チェックボックス
      • チェックでフラッシュオンです。
    • メール用チェックボックス
      • 動体検知のオンオフ
    • STREAM RESOLUTION
      • ここで画面の解像度を設定出来ます
  • 無効なボタン
    • "Stop", "Take" キーパッドとその表示

Streaming時

"Start"ボタンを押すとStreamingが始まります

Detail of ESP32-CAM HP at Streaming
  • 機能するボタン
    • Stop:Streamingを停止して最初の画面に戻る
    • Take:Captured Previewのポップアップが表示。写真撮影と管理
      • Save:写真をカメラに保存
        • 写真の容量は、解像度が800x600で一枚10数mB
        • SPISTFFとして2mB確保しているので、100数十枚保存出来る。
        • 今回はMAX30枚とし、超えた場合は古い物から順に新しい物に書き変わる。
          • "ESP32_net_camera.ino" 37行:"define photo_max  30" でMAX枚数を規定しています。
          • ここの値を変えるとMAX枚数を変更出来ます。
      • Download:写真をPCにダウンロードする。
    • カメラ移動パッド:カメラを移動させる
      • カメラの移動はStreaming中のみ。
      • U:Up D:Down L:Left R:Right H:Hom に移動
      • 移動に合わせてカメラ位置が U/D, L/R に表示される
    • "Frash", "STREAM RESOLUTION" はStreaming時でも機能します。
  • 無効なボタン
    • "Mail", "File", "Recipient" はStreaming中は無効

ESP32にとってStreamingは負担が大きいので必要時以外は停止するよう設定しています。

  • 開始
    • HPにアクセスし "Start" ボタンが押された時。それ以外は停止しています。
  • 停止
    • ”Stop"ボタンを押す、ブラウザを閉じる、規定時間(4分)になる の3パターン
    • 規定時間
      • "ESP32_net_camera.html" 293行:"timerId = setTimeout(stream_stop, 240000);" で設定
      • setTimeout()の第2引数で時間を設定します。(時間の単位はmsec)
      • またこの行をコメントにすると停止すること無くStreamingを続けます。

モード設定ボタン

このカメラを幾つか作って家の中に配置しそれらをPCで一括管理したいと思っています。 これらのカメラはIPアドレスを変えてコンパイルする必要が有りますが、コンパイル後にWiFi関係を セット出来たらその必要がなくなります。それを実現するためにこのボタンを使います。

このボタンを押しながらカメラの電源を入れると ESP32-CAM は AP モードで立ち上がります。 セットしたSSID(今回は "ESP32CAM-SETUP")をスマホで探し、パスワード(今回は "abcdefg")を入力すると、下記の画面が表示されます。

HP of WiFi parameter setting
  • 必要事項を入力後 ”Register & Restart" ボタンを押すと値がセットされカメラがRestart。
  • 注意
    • "wifi_config.txt" が無かったり、内容が間違っていたりすると機能しません。
    • 一度STAモードで正しく立ち上がる事を確認してからこの機能を使用して下さい。

これでコンパイルせずに設定を変更出来ます。

終わりに

安価に期待以上の性能の監視カメラが出来ました。今後は

  • カメラを複数にしてPCでそれらを一括管理
  • 管理しているPCにTailscaleを使って外部からアクセス。=>カメラに外部からアクセス出来る

を目指します。今回はここまで。

SINCE 2026