ESP32-CAM の CameraWebServer サンプルスケッチを元に、独自に改良を加えた スケッチ が公開されているのを見つけたので、早速試してみました。
ソースファイルのダウンロードと配置
前回、Arduino IDEを使ってESP32-CAMに書き込んだスケッチは、Espressif社提供のサンプルスケッチでしたが、これを元に独自の改良を重ねているスケッチを、こちらのGitHubページに見つけました(Great Works!!)。
導入から使い方まで全てREADMEにまとめられているので、その手順に従って作業を進めます。
こちらのリンクから、 Latest のスケッチが収められた圧縮ファイルをダウンロードし、Arduino IDEのスケッチフォルダへ展開します。展開後はフォルダ名からバージョン番号を抜いて、 esp32-cam-webserver とします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
~/Arduino/esp32-cam-webserver ├── API.md ├── CONTRIBUTING.md ├── Docs │ ├── board-selection-small.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-README.md │ ├── favicon.ico │ ├── headline-image.png │ ├── hookup.png │ ├── infodump.png │ ├── linearled │ │ ├── README.md │ │ └── linearled.c │ ├── logo-big.png │ ├── logo.png │ ├── logo.svg │ ├── mygodsitsfullofcats.png │ ├── ota-board-selection-small.png │ ├── ota-board-selection.png │ ├── simpleviewer.png │ ├── streamview.png │ ├── twocatsactually.png │ └── webcams.programmer.jpg ├── LICENSE ├── README.md ├── app_httpd.cpp ├── camera_pins.h ├── css.h ├── esp32-cam-webserver.ino ├── index_other.h ├── index_ov2640.h ├── index_ov3660.h ├── myconfig.sample.h ├── platformio.ini ├── src │ ├── favicons.h │ ├── jsonlib │ │ ├── README.md │ │ ├── jsonlib-LICENSE │ │ ├── jsonlib.cpp │ │ └── jsonlib.h │ ├── logo.h │ ├── parsebytes.cpp │ ├── parsebytes.h │ └── version.h ├── storage.cpp └── storage.h |
Arduino IDE ボードの設定
Arduino IDEを立ち上げ、展開したスケッチを開いたら、書き込み前にボードの設定を確認します。
前回サンプルスケッチを書き込んだ時との違いは、 Partition Scheme のところ。今回のスケッチはサンプルスケッチと比べスリムなことと、さらに以後のOTA更新に対応すべく、 Minimal SPIFFS を選択しました。
素のSOFTAPモードで書き込み
GPIO0 を GND に落とした状態のESP32-CAMをUSBシリアルコンバータを介して繋ぎ、まずは特に変数を変えずそのまま書き込んでみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
最大1966080バイトのフラッシュメモリのうち、スケッチが1073933バイト(54%)を使っています。 最大327680バイトのRAMのうち、グローバル変数が64756バイト(19%)を使っていて、ローカル変数で262924バイト使うことができます。 esptool.py v4.5.1 Serial port /dev/ttyUSB0 Connecting... Chip is ESP32-D0WD (revision v1.0) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: ##:##:##:##:##:## Uploading stub... Running stub... Stub running... Configuring flash size... Flash will be erased from 0x00001000 to 0x00005fff... Flash will be erased from 0x00008000 to 0x00008fff... Flash will be erased from 0x0000e000 to 0x0000ffff... Flash will be erased from 0x00010000 to 0x00117fff... Compressed 18992 bytes to 13112... Writing at 0x00001000... (100 %) Wrote 18992 bytes (13112 compressed) at 0x00001000 in 1.5 seconds (effective 104.6 kbit/s)... Hash of data verified. Compressed 3072 bytes to 146... Writing at 0x00008000... (100 %) Wrote 3072 bytes (146 compressed) at 0x00008000 in 0.1 seconds (effective 308.4 kbit/s)... Hash of data verified. Compressed 8192 bytes to 47... Writing at 0x0000e000... (100 %) Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.1 seconds (effective 513.3 kbit/s)... Hash of data verified. Compressed 1079680 bytes to 649724... Writing at 0x00113d92... (100 %) Wrote 1079680 bytes (649724 compressed) at 0x00010000 in 57.2 seconds (effective 151.1 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin... |
ジャンパピンを外してESP32-CAMを再起動させると、自身はSOFTAPモードで待ち受け状態になるので、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0030,len:1344 load:0x40078000,len:13964 load:0x40080400,len:3600 entry 0x400805f0 ==== esp32-cam-webserver: ESP32 camera server Code Built: Sep 21 2023 @ 10:01:11 Base Release: 4.0 Starting internal SPIFFS filesystem E (484) SPIFFS: mount failed, -10025 Listing SPIFFS directory: / Camera init succeeded OV2640 camera module detected Preference file /esp32cam-preferences.json not found; using system defaults. Starting WiFi Known external SSIDs: None MAC address: ##:##:##:##:##:## AccessPoint mode selected in config Setting up AccessPoint SSID : ESP32-CAM-CONNECT Password : InsecurePassword IP address: 192.168.4.1 Setting httpURL Starting Captive Portal Setting up OTA No OTA password has been set! (insecure) Added HTTP service to MDNS server Time functions disabled Lamp: 0%, pwm = 0 Starting web server on port: '80' Starting stream server on port: '81' Camera Ready! Use 'http://192.168.4.1/' to connect Stream viewer available at 'http://192.168.4.1:81/view' Raw stream URL is 'http://192.168.4.1:81/' Camera debug data is disabled (send 'd' for status dump, or any other char to enable debug) |
スマートフォンなどから次のWiFi情報を元に接続します。
- SSID : ESP32-CAM-CONNECT
- PASS : InsecurePassword
そのままブラウザから http://192.168.4.1/ へアクセスすると、WebUIが開きす。 Full Viewer で設定項目を確認したら、 Start Stream でストリーミング映像が受信できることを確認。
ただ、このスケッチにおいてもWiFi接続関連の設定は動的に変えられないので、このSOFTAPモードでは監視カメラには不向き。そこでArduino IDEに戻り、WiFi接続情報を書き加えようと思います。
WiFi接続情報を記述して書き込み
スケッチフォルダ内に myconfig.h と言う名前の新規ファイルを作成、まずはひな型である myconfig_sample.h の内容をコピペします。
そこから編集したのは以下の通りで、WiFi接続情報の他にNTPやホスト名といった程度です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* Give the camera a name for the web interface */ #define CAM_NAME "ESP32Cam4C" /* Give the network name */ #define MDNS_NAME "ESP32Cam4C" /* WiFi Settings */ struct station stationList[] = {{"SSID","PASSPHRASE", true}}; /* NTP */ #define NTPSERVER "hk.pool.ntp.org" #define NTP_GMT_OFFSET 28800 #define NTP_DST_OFFSET 0 |
※コメントアウトで設定を使い分けて残したりすると、その後の動作が不安定になる事象に見舞われたことが幾度かありました。書き込み後の動作確認でのトラブルシューティング時には、思い当たる記述がスケッチにないか確認を。
先ほどと同じ要領でESP32-CAMへ書き込んだ後、再起動させると指定したSSIDへクライアントとして繋がりました。
Expressif社サンプルスケッチには無かった、映像の90°回転や、設定の保存、ボードの再起動機能が実装されているのが見てとれるほか、Nameをクリックするとボードの現在の状態が、別ウィンドウで表示されます。
ここで気になったのが MCU temperature 。空調の効いた屋内で運用していても70℃前後に達していたので、金属ケースにヒートシンクを貼り付けたところ、半分の36℃程度まで下がりました。
ボードの再起動はRebootボタン押下の他、APIで直接操作することも可能です。
1 |
http://IP_ADDRESS/control?var=reboot&val=0 |
そのほかに用意されているAPIは、こちらのページで確認できます。
まとめ
今回試してみたスケッチには、前回のサンプルスケッチで挙がった懸念事項のうち、以下の項目が解消されました。
- 設定は再起動後残らない。
- 映像の上下反転や左右反転はあるが、90°回転が無い。
- WebUI上でボードを再起動させる術がない。
残るWiFi接続情報のWebUI上での設定変更機能についても、引き続き調べてみるつもりです。