昨日の続き。
GR-LYCHEEのカメラとネットワーク機能を動かして、Webカメラ化を試してみた。
公式のチュートリアルのページのとおりにやってみた。
→ GR-LYCHEE 特設:Webカメラにしてみよう!
カメラの取り付けで付属しているフレキケーブルが短くてちょっと使いにくい。
長さがちょっと長い24ピン0.5mmピッチのフレキケーブルをAmazonで購入して使ってみた。
あと、Webカメラとして、WebServerの処理を動かすためには、SDカードを挿して、ファイルシステムとして使えるようにしないといけない。microSDカードをSDカードサイズに変換するアダプタを使ってSDカードソケットに挿入した。
index.htmを上記のチュートリアルページからダウンロードして、microSDカードの/(ルート)に置いておく。
ソースコードのSSIDとpasswordの部分を、自分が使っているルーター(あるいはWiFiアクセスポイント)のものに書き換えて、ソースコードをビルドした。
#include <Arduino.h>
#include <Camera.h>
#include <SD.h>
#include <HTTPServer.h>
#include <mbed_rpc.h>
#include <SdUsbConnect.h>
#include <ESP32Interface.h>
ESP32Interface network;
#define WIFI_SSID "my_wifi_ap_SSID"
#define WIFI_PW "my_wifi_ap_PASSWORD"
Camera camera(320, 240);
SdUsbConnect storage("storage");
static int snapshot_req(const char ** pp_data) {
size_t size = camera.createJpeg();
*pp_data = (const char*)camera.getJpegAdr();
return size;
}
void setup(void) {
Serial.begin(9600);
Serial.println("Starts.");
// SD & USB
Serial.print("Finding strage..");
storage.wait_connect();
Serial.println("done");
camera.begin();
Serial.print("Connecting Wi-Fi..");
network.connect(WIFI_SSID, WIFI_PW, NSAPI_SECURITY_WPA_WPA2);
Serial.println("done");
Serial.print("MAC Address is ");
Serial.println(network.get_mac_address());
Serial.print("IP Address is ");
Serial.println(network.get_ip_address());
Serial.print("NetMask is ");
Serial.println(network.get_netmask());
Serial.print("Gateway Address is ");
Serial.println(network.get_gateway());
Serial.println("Network Setup OK\r\n");
SnapshotHandler::attach_req(&snapshot_req);
HTTPServerAddHandler<SnapshotHandler>("/camera"); //Camera
FSHandler::mount("/storage", "/");
HTTPServerAddHandler<FSHandler>("/");
HTTPServerAddHandler<RPCHandler>("/rpc");
HTTPServerStart(&network, 80);
}
void loop() {
}
WiFi用のライブラリ(ESP32Interface.h
)とかは、mbed用のライブラリなのだけど、Arduino風IDEで使うことができる。
ビルドして書き込んだソフトを実行して、シリアルコンソールを見ると、ネットワークの初期設定の結果が表示される。
ここに表示されているIPアドレスにPC側のwebブラウザを使ってアクセスする。
無事、表示された。
しかし、起動時にカメラに細かい横方向の黒い線のようなノイズが無数に入って、カメラが止まってしまうことが多い。
カメラとの接続用のフレキケーブルを長いものに取り換えてしまったのが悪かったのかもしれない(?) しかし、昨日のDisplayAppでは長いフレキケーブルでもちゃんとカメラは動いている。
ちょっと原因がよく分からない。
つづく。