Init
This commit is contained in:
178
src/main.cpp
Normal file
178
src/main.cpp
Normal file
@@ -0,0 +1,178 @@
|
||||
#define CAMERA_MODEL_AI_THINKER
|
||||
#include <WebServer.h>
|
||||
#include <WiFi.h>
|
||||
#include <esp32cam.h>
|
||||
#include "uTimerLib.h"
|
||||
|
||||
const char* WIFI_SSID = "CAMAP";
|
||||
const char* WIFI_PASS = "camera4okutt*8";
|
||||
const uint8_t port = 12;
|
||||
const uint16_t pulseTimeout = 4;
|
||||
|
||||
WebServer server(80);
|
||||
|
||||
static auto loRes = esp32cam::Resolution::find(320, 240);
|
||||
static auto hiRes = esp32cam::Resolution::find(800, 600);
|
||||
|
||||
void
|
||||
handleBmp()
|
||||
{
|
||||
if (!esp32cam::Camera.changeResolution(loRes)) {
|
||||
Serial.println("SET-LO-RES FAIL");
|
||||
}
|
||||
|
||||
auto frame = esp32cam::capture();
|
||||
if (frame == nullptr) {
|
||||
Serial.println("CAPTURE FAIL");
|
||||
server.send(503, "", "");
|
||||
return;
|
||||
}
|
||||
Serial.printf("CAPTURE OK %dx%d %db\n", frame->getWidth(), frame->getHeight(),
|
||||
static_cast<int>(frame->size()));
|
||||
|
||||
if (!frame->toBmp()) {
|
||||
Serial.println("CONVERT FAIL");
|
||||
server.send(503, "", "");
|
||||
return;
|
||||
}
|
||||
Serial.printf("CONVERT OK %dx%d %db\n", frame->getWidth(), frame->getHeight(),
|
||||
static_cast<int>(frame->size()));
|
||||
|
||||
server.setContentLength(frame->size());
|
||||
server.send(200, "image/bmp");
|
||||
WiFiClient client = server.client();
|
||||
frame->writeTo(client);
|
||||
}
|
||||
|
||||
void
|
||||
serveJpg()
|
||||
{
|
||||
auto frame = esp32cam::capture();
|
||||
if (frame == nullptr) {
|
||||
Serial.println("CAPTURE FAIL");
|
||||
server.send(503, "", "");
|
||||
return;
|
||||
}
|
||||
Serial.printf("CAPTURE OK %dx%d %db\n", frame->getWidth(), frame->getHeight(),
|
||||
static_cast<int>(frame->size()));
|
||||
|
||||
server.setContentLength(frame->size());
|
||||
server.send(200, "image/jpeg");
|
||||
WiFiClient client = server.client();
|
||||
frame->writeTo(client);
|
||||
}
|
||||
|
||||
void
|
||||
handleJpgLo()
|
||||
{
|
||||
if (!esp32cam::Camera.changeResolution(loRes)) {
|
||||
Serial.println("SET-LO-RES FAIL");
|
||||
}
|
||||
serveJpg();
|
||||
}
|
||||
|
||||
void
|
||||
handleJpgHi()
|
||||
{
|
||||
if (!esp32cam::Camera.changeResolution(hiRes)) {
|
||||
Serial.println("SET-HI-RES FAIL");
|
||||
}
|
||||
serveJpg();
|
||||
}
|
||||
|
||||
void
|
||||
handleJpg()
|
||||
{
|
||||
server.sendHeader("Location", "/cam-hi.jpg");
|
||||
server.send(302, "", "");
|
||||
}
|
||||
|
||||
void
|
||||
handleMjpeg()
|
||||
{
|
||||
if (!esp32cam::Camera.changeResolution(hiRes)) {
|
||||
Serial.println("SET-HI-RES FAIL");
|
||||
}
|
||||
|
||||
Serial.println("STREAM BEGIN");
|
||||
WiFiClient client = server.client();
|
||||
auto startTime = millis();
|
||||
int res = esp32cam::Camera.streamMjpeg(client);
|
||||
if (res <= 0) {
|
||||
Serial.printf("STREAM ERROR %d\n", res);
|
||||
return;
|
||||
}
|
||||
auto duration = millis() - startTime;
|
||||
Serial.printf("STREAM END %dfrm %0.2ffps\n", res, 1000.0 * res / duration);
|
||||
}
|
||||
|
||||
void handleOne()
|
||||
{
|
||||
digitalWrite(port,1);
|
||||
}
|
||||
|
||||
void handleZero()
|
||||
{
|
||||
digitalWrite(port,0);
|
||||
}
|
||||
|
||||
void handlePulse()
|
||||
{
|
||||
handleOne();
|
||||
|
||||
TimerLib.setTimeout_s(handleZero,pulseTimeout);
|
||||
}
|
||||
|
||||
void
|
||||
setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
Serial.println();
|
||||
|
||||
{
|
||||
using namespace esp32cam;
|
||||
Config cfg;
|
||||
cfg.setPins(pins::AiThinker);
|
||||
cfg.setResolution(hiRes);
|
||||
cfg.setBufferCount(2);
|
||||
cfg.setJpeg(80);
|
||||
|
||||
bool ok = Camera.begin(cfg);
|
||||
Serial.println(ok ? "CAMERA OK" : "CAMERA FAIL");
|
||||
|
||||
pinMode(port, OUTPUT);
|
||||
Serial.println("SET PORT OUTPUT\n");
|
||||
|
||||
}
|
||||
|
||||
WiFi.persistent(false);
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.begin(WIFI_SSID, WIFI_PASS);
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(500);
|
||||
}
|
||||
|
||||
Serial.print("http://");
|
||||
Serial.println(WiFi.localIP());
|
||||
Serial.println(" /cam.bmp");
|
||||
Serial.println(" /cam-lo.jpg");
|
||||
Serial.println(" /cam-hi.jpg");
|
||||
Serial.println(" /cam.mjpeg");
|
||||
|
||||
server.on("/cam.bmp", handleBmp);
|
||||
server.on("/cam-lo.jpg", handleJpgLo);
|
||||
server.on("/cam-hi.jpg", handleJpgHi);
|
||||
server.on("/cam.jpg", handleJpg);
|
||||
server.on("/cam.mjpeg", handleMjpeg);
|
||||
server.on("/send.zero",handleZero);
|
||||
server.on("/send.one",handleOne);
|
||||
server.on("/send.pulse",handlePulse);
|
||||
|
||||
server.begin();
|
||||
}
|
||||
|
||||
void
|
||||
loop()
|
||||
{
|
||||
server.handleClient();
|
||||
}
|
||||
Reference in New Issue
Block a user