PR

【IoT】ESP32-S3でカメラ画像をFTPアップロードしてWebブラウザに表示する方法

ESP32でカメラ撮影した画像をネットで見れるようにしたいなあ

こうした悩みを解決します。

姫野秀徳

組み込みエンジニアとしてメーカー勤務10年。
第二種電工事士、基本情報技術者、Code.org認定教師。
microbitを用いた電子工作&プログラミング教室を開校。
組み込み開発の実際を発信するyoutube活動も行う。

姫野秀徳をフォローする
組み込みオンライン学習システム"クミタテ"を作っています クミタテを見る

はじめに

この記事では、ESP32-S3カメラで撮影した画像をFTP経由でサーバにアップロードし、Webブラウザで閲覧する方法 を解説します。
リアルタイムのストリーミングではなく、一定間隔で更新される静止画の仕組みですが、初心者でも試せるIoT入門として最適です。

想定読者

  • ESP32初心者(Arduino IDEは触ったことがある程度)
  • IoTで「撮影 → アップロード → 表示」の流れを体験したい方

使用するキット

こちらのESP32S3キットを使用します。
ESP32-S3-WROOM スターターキット3

あと、サーバを用意しておく必要があります。

FTPとは?

FTP(File Transfer Protocol)は ファイルをネットワーク経由で送受信するためのルール(プロトコル) です。

今回の例では、ESP32が「FTPクライアント」として動き、サーバ(今回はConohaWING)上の指定フォルダに 撮影した画像ファイルをアップロード しています。

ポイント:

  • サーバ側にログイン(アドレス・ユーザー名・パスワード)が必要
  • 画像やテキストなど様々なファイルを簡単に転送できる
  • 専用ソフト(FFFTPやFileZillaなど)を使うと手動でも確認可能

目標成果物

30秒おきにESP32カメラで撮影した画像をWEBブラウザ上に表示する
※予告なく終了していたら申し訳ありません。
 「更新日時」が30秒経過しても変わらない場合は更新されておりません。

↓こんな感じ

更新日時: 取得中…

プログラム

こちらのサンプルプログラムをもとに進めていきます。

カメラサンプル

ESP32S3キット(Arduino)
Freenove社のESP32S3スターターキットで学習できる内容を日本語でまとめています。以下の商品を購入した方のみ公開とさせていただいております。ESP32S3 スターターキット3コース内容の紹介サンプルプログラムおよび動画が付属してい...

FTPサンプル

GitHub - ldab/ESP32_FTPClient: An FTP-Client for the ESP32
An FTP-Client for the ESP32. Contribute to ldab/ESP32_FTPClient development by creating an account on GitHub.

download_file.inoのサンプルを利用します。

動作

今回の仕組みは、以下の流れで動作します。

  1. WiFi接続
     ESP32-S3を無線LANに接続します。
  2. FTPサーバ接続
     ConoHa WINGなどのレンタルサーバをFTPで指定。ユーザー名・パスワードでログイン。
  3. カメラ撮影
     ESP32-CAMライブラリを利用して静止画をJPEG形式で取得。
  4. 画像アップロード
     FTPクライアントライブラリ(ESP32_FTPClient)を使って、撮影したJPEGをサーバにアップロード。
  5. WEBブラウザで確認
     アップロード先をブラウザからアクセスすれば、最新の画像を表示可能。

つまずいたこと

FTP接続

ESP32でいきなりFTP操作せずに、PCのFTPソフトでまずはパソコンとサーバ間がFTPで接続できるか確認することをオススメします。

FFFTPとかFileZillaとか無料ソフトあるので、それを使うと良いでしょう。

容量不足

今回の内容には含んでいませんが、当初の計画では撮影毎にSDカードに画像に番号振って保存していました。

それでWifi、SD、カメラ、FTPと全て起動すると、最初はメモリ不足でエラーが出て動かなくて焦りましたが、PSRAMを有効にしたら解決しました!

SDかFTPかどちらかを未使用にすれば動作しましたが、
最終的には外付けのPSRAMを有効にすることで、全て動作でき解決しました。

このほか、実装時によくあるトラブルをまとめました。

  • FTP接続エラー(530 You aren’t logged in)
     → ユーザー名・パスワードが間違っているか、サーバがFTPS専用になっている場合があります。まずはFFFTPやFileZillaで手動接続確認を推奨。
  • RAM不足でクラッシュ
     → WiFi+カメラ+SD+FTPを同時に動かすとメモリ不足になる場合があります。menuconfig から外付けPSRAMを有効にすることで解決できます。
  • 画像がブラウザで更新されない
     → ブラウザキャッシュの影響です。画像ファイル名を固定する場合は、クエリ文字列をつけて表示しましょう。
     例:latest.jpg?time=1690000000

課題

消費電力

定常的に100mA程度消費しています。カメラ動作+アップロード中は200mA程度消費します。
どの機能も必要なときだけ動作させるようにしないと、屋外使用を考えると、発熱や電力消費が大きく実用的ではないですね。
ディープスリープとか使わないとダメですね。
(そもそもESP32は高速でぶん回しすぎ感は否めない)

ディープスリープとは

ESP32は省電力機能として「ディープスリープモード」があります。
これは人間でいう「熟睡」のような状態で、ほとんどの機能を止めて待機することで、消費電流を数mA以下にまで下げることができます。

例えば今回のように 30秒ごとに撮影→アップロード を繰り返すなら、

  • 通常時はディープスリープで待機
  • タイマーで30秒後に自動で起きる
  • カメラ撮影&アップロードが終わったらまた寝る

という流れにすると、常に動かしっぱなしにするよりもバッテリー持ちが何倍も良くなります。

👉 ポイント

  • esp_deep_sleep_start(); を呼ぶとスリープ開始
  • esp_sleep_enable_timer_wakeup(30 * 1000000); のように設定すると30秒後に復帰可能

屋外や電池駆動で使いたい場合は、この仕組みを組み込むのが実用化への第一歩です。

FTP以外の方法

今回FTPを採用しましたが、他にも手段があります。

  • HTTPサーバ方式
     ESP32をWebサーバ化して直接アクセス。ただし外部公開にはポート開放やセキュリティ設定が必要。
  • MQTT方式
     軽量プロトコルでクラウドに送信可能。ただし画像などの大きなデータ転送には不向き。
  • クラウドストレージAPI
     Google DriveやAWS S3に直接アップロードする方法もあるが、OAuth認証などが必要で実装が複雑。

👉 これらと比べて、FTPは「シンプルで導入が容易」というメリットがあります。
  以下の理由からFTPを選択しました。
  攻撃されるリスク低減 & 通信量少ない & 消費電力小さい

応用例アイデア

  1. 植物観察タイムラプス
    毎日や一定間隔で撮影 → 画像をサーバにアップロード → 後でまとめて再生して「成長記録動画」にできる。
  2. 天気観測カメラ
    屋外に設置して空模様を定期撮影 → サイトに公開すれば「簡易気象カメラ」。
    (気温・湿度センサを追加すれば「環境観測ステーション」にもなる)
  3. リモート確認カメラ
    倉庫・ガレージ・水槽・ペット小屋など、遠隔地の状態を定期確認できる。
  4. 作業工程記録カメラ
    工場や研究実験で、一定間隔で撮影 → 後で「作業の自動記録」として利用。
  5. IoTデータ連携
    • 画像と一緒にセンサーデータ(温度、湿度、二酸化炭素濃度など)も同時にFTPアップロード
    • サーバ側で「画像+数値ログ」をまとめて表示
  6. イベント用スナップカメラ
    展示会やイベント会場で、一定時間ごとに自動撮影してサーバにアップロード → 会場サイトでリアルタイム更新される「雰囲気共有フォト」になる。
  7. 遠隔監視+通知
    人感センサやドアセンサと組み合わせて「変化があったら撮影してアップロード&メール通知」みたいな簡易防犯カメラ。

まとめ

本記事では ESP32-S3カメラで撮影した画像をFTP経由でサーバにアップロードし、WEBブラウザから閲覧できる仕組み を紹介しました。
ストリーミングのようなリアルタイム性はありませんが、一定間隔で更新される画像を簡単に公開できるのが特徴です。

実装のポイントは以下のとおりです。

  • ESP32をFTPクライアントとして動作させ、撮影データをサーバに送信
  • WEBブラウザからは画像ファイルを直接閲覧(キャッシュ無効化で常に最新を表示)
  • SDカードやPSRAMの使い分けでメモリ不足を回避
  • ディープスリープ等の省電力制御が実用化のカギ

さらに、植物観察や気象観測、防犯カメラ、遠隔監視など、応用の幅も広がります。
シンプルな仕組みだからこそ、アイデア次第で多用途に展開できるのが魅力です。

👉 次のステップとしては、人感センサや環境センサと組み合わせて「必要なときだけ撮影・送信」する仕組みに発展させると、省電力化と実用性アップにつながります。

この内容が良いと思ったら、いいね💖を押して教えてください!

組み込みオンライン学習システム"クミタテ"を作っています クミタテを見る
未分類組み込み機器
シェアしていただけると嬉しいです!

コメント

タイトルとURLをコピーしました