Home
V2640搭載 Unit Cam Wi-Fi Camera(ESP32-WROOM-32E)で工夫したこと
All rights reserved JA3OOK 中村 利和
特に4項の説明文改善 Ver.1.1 '23/05/20
Ver.1.0 '22/09/29
V2640搭載 Unit Cam Wi-Fi Camera(ESP32-WROOM-32E) を動かしたときに苦労したことと、
私自作の「ネットワークパラメーターのセッティングツール(net-param-SPIFFS.ino)を組み込んだ」
ことをまとめました。
V2640搭載 Unit Cam Wi-Fi Camera(ESP32-WROOM-32E)は
・PCやスマホと無線LAN(Wi-Fi)で接続する超小型ビデオカメラで、
スイッチサイエンスや秋月電子通称で販売されています。
・ビデオカメラ基板「V2640」とマイクロコンピューター基板「ESP32-WROOM-32E」で構成され、
ArduinoIDEでカストマイズすることにより利用できます。
Arduino IDEの環境設定や準備は先達が書かれた参考資料1と2に詳しく書かれており分かりやすいの
でそれを見てください。
1 おりくらしげる ESP32-CAMでWebカメラの設定をしてみた
2 おりくらしげる V2640搭載 Unit Cam Wi-Fi Camera(ESP32-WROOM-32E)でWebカメラの設定をしてみた
ネットワークパラメーターのセッティングツール(net-param-SPIFFS.ino)は、
・無線LANのSSIDやpassword、ローカルIPアドレスの設定を、スケッチの修正とコンパイルなしに
設定でき生産性向上に大きく(大げさ?)貢献します。
・組み込み作業は上記と同じArduino IDEで行います。
以下に私が行ったことや苦労したことなどを書きます。(参考資料1や2と一部重複するところが
ありますがご容赦ください)
1.Arduino IDEの環境設定
参考資料1と2に詳しく書かれているのでそれに従います。
(ESP−WROOM−32開発ボードを使用したことがあったので、設定済みの箇所が
ありました)
2.スケッチ「CameraWebServer.ino」へ次の変更追加を行います。
コメントに OOK と書かれている行が変更、追加した行です。
変動アドレスより固定IPアドレスの方が使い勝手が良いので指定しています。
ssidやアIPドレスなどは各自の無線LANルーターの環境に合わせてください。
#include "esp_camera.h"
#include
//
// WARNING!!! Make sure that you have either selected ESP32 Wrover Module,
// or another board which has PSRAM enabled
//
// Select camera model
//#define CAMERA_MODEL_WROVER_KIT // OOK commentout
//#define CAMERA_MODEL_ESP_EYE
#define CAMERA_MODEL_M5STACK_PSRAM // OOK non commentout
//#define CAMERA_MODEL_M5STACK_WIDE
//#define CAMERA_MODEL_AI_THINKER
#include "camera_pins.h"
const char* ssid = "無線LANルーターssid"; // OOK 無線LANルーターのssid
const char* password = "無線LANルーターpassword"; // OOK 無線LANルーターのpassword
IPAddress myip(192,168, 0, 51); // OOK ローカルIPアドレスを指定(適宜変更すること)
IPAddress mygateway(192,168, 0, 1); // OOK 無線LAN環境に適宜変更すること
IPAddress mysubnet(255, 255,255, 0); // OOK 〃
IPAddress mydns(192,168, 0, 1); // OOK 〃
void startCameraServer();
|
変更ないので記載省略
|
#if defined(CAMERA_MODEL_M5STACK_WIDE)
s->set_vflip(s, 1);
s->set_hmirror(s, 1);
#endif
WiFi.config(myip, mygateway, mysubnet, mydns); // OOK この設定で固定ローカルIPアドレスになる
delay(100); // OOK
WiFi.begin(ssid, password); // OOK
以下変更ないので記載省略
|
2.オブジェクトのメモリー不足対策
設定の既定値のままだとコンパイルエラー「オブジェクトのメモリー不足」になるので、
"Huge APP (3MB No OTA/1MB SPIFFS)"を指定しておきます。
参考 ボード名が"ESP32Wrover Module"、Partition Schemeが"Huge APP (3MB No OTA/1MB SPIFFS)"で
あることを確認できます。
3.コンピューター基板の半田付け作業
マイクロコンピューター基板「ESP32-WROOM-32E」に6個の端子穴(GND,G0,EN 5V,G1,G3)が
あり、その全部をスケッチの書き込み時やランなどの際に使うのでピンヘッダーを半田付け
します。(書き込み時に必要となるGNDとG0のショートは「コード付クリップで行う」
こととし半田付け箇所を最小限にしました)
3pinのピンヘッダー(2.54mmピッチ)を2個、1pinのピンヘッダーを1個用意します。
GND,G0,ENにピンヘッダーを挿し、同様に 5V,G1,G3にピンヘッダーを挿し半田付けします。
さらにGNDにはピンヘッダー1pinを90度横方向に半田付けしておきます。
半田付けが終わった状態の写真。
4.スケッチの書き込み時の配線
USBシリアル変換基板からのコードを写真のように挿します。
写真の説明。
USBシリアル変換基板との接続は次の対応にする。
コンピューター基板 USBシリアル変換基板
G3(RXD0) TXD
G1(TXD0) RXD
5V 5V
GND GND
スケッチ書き込みをする場合は、G0 と GND とをコード付クリップで接続しておく。
書き込みが終わればクリップを外す。
書き込み時にエラーが出る場合は5V電源ピンを挿し直してから、再度書き込みしてみてください。
EN を GND に一時的にショートさせることにより、プログラムを再起動させることができる。
(コード付クリップなどでショート)
G0 と GND とをコード付クリップで接続ときに、間違ってENと接触しないための工夫が必要です。
G0のピンヘッダーにピンソケットを挿して長くしておくとか、ENのピンヘッダーを短く切ってお
くのがいいと思います。(写真ではピンソケットを挿して長くしてある)
基板には既存の「白色コネクター」が目立ちます。内部を覗くと4本のピンがあります。
3項で半田付けしたGNDピンに近い順に GPIO16,GPIO17,+5V,GND です。
写真のようにGPIO16にピンソケットを挿して長くしておき、コード付クリップなどで
GNDにショートさせやすくしておきます。
これは後で述べる「「ネットワークパラメーターのセッティングツール(net-param-SPIFFS.ino)」
を組込んだスケッチの場合にショートさせて使います。
書き込み時のエラー対策
メモリー不足
・2項に記載。
Timed out waiting for packet header
・G0を接地しないで書き込み指示を行った。
・G0を接地しても電源を入れなおさないで書き込み指示を行った。
・GPIO16を接地したままで書き込み指示を行った。
・他にも原因があるかも。
5.USBシリアル変換基板への対策
USBシリアル変換基板の CTS と RTS が接続されていない場合は接続しておいてください。
私は「CH340C」を搭載したUSBシリアル変換基板を使ってます。買ったままで使用したら、
書き込み時に
A fatal error occurred: Failed to connect to ESP32: Invalid head of packet (0x04)
A fatal error occurred: Failed to connect to ESP32: Invalid head of packet (0x9D)
が出て困惑しました。
参考資料3を見つけて「変換基板の CTS RTS を接続する必要がある」ことを知り、
次の写真のように6pinピンソケットを半田付けしジャンパーピンで接続しました。
6.書き込み後の再起動方法
EN を GNDすることで、必要に応じ再起動できます。(コード付クリップを使用)
7.動作時に画像が表示されない、表示されても動画が止まってしまうトラブル
原因は特定できませんが試行錯誤してみると複数あるようで、
・電源の電流容量が少なすぎる。
PCのUSB端子からではなくてACアダプターから供給してください。5V0.5Aくらい以上は必要な
ようです。電源コードが細すぎても電圧降下してまずいようです。
・無線LAN(Wi-Fi)環境が影響しているようです。
ルーターと近すぎる、遠すぎる。パソコンなど無線LAN機器と近すぎる、近くに線材や金属がある。
住宅密集地で無線LANが混雑しているなど。
8.ネットワークパラメーターのセッティングツール(net-param-SPIFFS.ino)」を使用
このツールを組込むことにより、無線LANのSSIDやpassword、ローカルIPアドレスの設定をスケッチ
の修正とコンパイルなしに設定できます。
このツールの詳細はここ(参考資料4)です。
本カメラのスケッチに組み込む具体的方法は次のとおりです。
@ツールのソースプログラムをコピーして net-param-SPIFFS.ino という名前のファイルを作成し、
カメラソース(CameraWebServer.ino)と同じフォルダーに格納。
Aカメラソース(CameraWebServer.ino)に次の変更を実施。
コメントに OOK と書かれている行が変更、追加した行です。
変動アドレスより固定IPアドレスの方が使い勝手が良いので指定しています。
ssidやアIPドレスなどは各自の無線LANルーターの環境に合わせてください。
#include "esp_camera.h"
#include
//
// WARNING!!! Make sure that you have either selected ESP32 Wrover Module,
// or another board which has PSRAM enabled
//
// Select camera model
//#define CAMERA_MODEL_WROVER_KIT // OOK commentout
//#define CAMERA_MODEL_ESP_EYE
#define CAMERA_MODEL_M5STACK_PSRAM // OOK non commentout
//#define CAMERA_MODEL_M5STACK_WIDE
//#define CAMERA_MODEL_AI_THINKER
#include "camera_pins.h"
// ここから メイン.ino と net-param-SPIFFS.ino との連携データ // OOK
bool settingMode = true;
String sketch; // メインスケッチファイル名など
int debug; // 0:本番
String myplace; // このプログラムが動作する場所(server / client)
char myssid[31]; // Wi-Fiルーターのssid (charの場合は文字数指定が必要)
char mypassword[31]; // Wi-Fiルーターのパスワード
String myportStr; // myport番号は指定しても無効(制限事項)
uint16_t myport; // myport番号は指定しても無効(制限事項)
IPAddress myip(192,168, 0, 49); //myipaddress 仮の値
IPAddress mygateway(192,168, 0, 1); //mygateway 〃
IPAddress mysubnet(255, 255,255, 0); //mysubnetmask 〃
IPAddress mydns(192,168, 0, 1); //mydns 〃
String hisNetname; // hisipのネットアドレス型式名
IPAddress hisip(49,49,49,49); //動作場所が"client"の場合に、his即ちサーバーの指定に使用
unsigned int hisport; //動作場所が"client"の場合に、his即ちサーバーの指定に使用
String appPW; //アプリレベルの認証パスワード
// ここまで連携データ // OOK
WiFiServer server(80); // OOK WiFiServer定義 PORT番号は定数でないとダメな模様(void loop()内でも定数でないとダメな模様)
#define settingPin 16 // OOK ピン定義 HY-2.0_UART RX 接地(LOW)時はシリアル端末を使用してIPドレス等設定
void startCameraServer();
void setup() {
Serial.begin(115200);
// OOK ここから追加
pinMode(settingPin, INPUT_PULLUP);
delay(200); // PULLUP完了までdelay
// ランモード/設定モードの設定(settingPinが接地されているかどうかで判定)
if(digitalRead(settingPin)) settingMode = false; // highなら、ランモード
else settingMode = true; // lowなら、設定モード
// settingModeがfalse: ランモード : ファイルが無ければ既定値でファイルを作成し、既定値でreturn
// ファイルが有ればファイルの値でreturn
// settingModeがtrue : 設定モード : 各種コマンドを入力でき、ファイルに書き込むことができる
// exitコマンドでランモードへ
setNetworkParameter(); // ネットワークパラメーターの設定を実行
// OOK ここまで追加
Serial.setDebugOutput(true);
Serial.println();
|
変更ないので記載省略
|
#if defined(CAMERA_MODEL_M5STACK_WIDE)
s->set_vflip(s, 1);
s->set_hmirror(s, 1);
#endif
WiFi.config(myip, mygateway, mysubnet, mydns); // OOK この設定で固定ローカルIPアドレスになる
delay(100); // OOK
WiFi.begin(myssid, mypassword);
// WiFi.begin(ssid, password); // OOK commentout
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
以下変更ないので記載省略
|
操作方法の概要
・本Wi-FiカメラとPCとはUSB変換基板を経由して接続。(4項、5項)
・Auduinoでスケッチの開発(デバッグ)を行う。
・開発(デバッグ)中はターミナルソフトとして「Arduinoのシリアルモニタ」を使用。
・デバッグが終わっていれば「Tera Term」を使う。
スケッチの書き込み
・スケッチの書き込みを行う場合はG0をGNDに接続しておいてからUSBシリアル変換基板を
PCのUSBポートに挿しこむ。書き込みが終わればG0とGNDの接続を外す。
ネットワークパラメーターのセッティングツール(net-param-SPIFFS.ino)の
コマンド入力モードとランモードの切り替え
・基板の「白色コネクター」のGPIO16(3項で半田付けしたGNDピンに一番近いpin)を
GNDににショートして立ち上げると、コマンド入力モードになる。
ショートしないで立ち上げるとランモード。
再起動
・EN を GND に一時的にショートさせることにより、プログラムを再起動させることができる。
(コード付クリップなどでショート)
ネットワークパラメーターのセッティングツール(net-param-SPIFFS.ino)の詳細は
ESP32-WROOM-32 ネットワーク接続パラメーター セッティングツール の3.操作方法 を見てください。
今回の(カメラでの)設定の要点は次のとおり。
・sketch=CameraWebServer.ino 2022/09/29 (メモなので内容は自由だが、スケッチ名を推奨)
・myssid=本カメラを設置する無線LANルーターのssid
・mypw=無線LANルーターのpassword
・myipaddr=ローカル固定IPアドレス 例えば192.168.0.51
・myport=ポート番号 例えば80(指定してもスケッチの WiFiServer 命令が優先される)
・mydns=無線LAN環境に合わせる 例えば192.168.0.1
・mygateway=無線LAN環境に合わせる 例えば192.168.0.1
・mysubnet=無線LAN環境に合わせる 例えば255.255.255.0
・他の項目は既定値でOK()
設定結果が以下のようであれば大丈夫です。
>list
sketch=CameraWebServer.ino 2022/09/29 メインスケッチファイル名など
debug=0 整数値 0:本番
myplace=server server or client
myssid=無線LANルーターssid 30文字以内
mypw=無線LANルーターpassword 30文字以内
myipaddr=192.168.0.51 .で区切る
myport=80 myport番号は指定しても無効(制限事項)
mydns=192.168.0.1 .で区切る
mygateway=192.168.0.1 .で区切る
mysubnet=255.255.255.0 .で区切る
hisnetname=xxx.iobb.net clientの場合にサーバーのネットアドレス名
hisipaddr=200.200.10.10 〃 のIPアドレス(上記とどちらか)
hisport=58000 〃 のポート番号
apppw=applipw アプリレベルの認証パスワード(serverとclientで同じであること)
> |
動作確認が終われば結線はDC5V(5VpinとGNDpin)だけで動きます。
更新履歴
Ver.1.0 '22/09/29 初稿
謝辞
本ソフトの開発に特に役立った資料を最後に列挙しました。この他にも役立った記事が色々
ありました。各著者に感謝します。
参考資料
1 おりくらしげる ESP32-CAMでWebカメラの設定をしてみた
2 おりくらしげる V2640搭載 Unit Cam Wi-Fi Camera(ESP32-WROOM-32E)でWebカメラの設定をしてみた
3 エンジニア風味 (Engineer-taste) 電子系エンジニアのメモ帳 20190907 ESP32-camでトラブッたこと
4 JA3OOK 中村利和 ESP32-WROOM-32 ネットワーク接続パラメーター セッティングツール
直前の画面へは ブラウザの戻る をクリックしてください。Topに戻るにはHome