Skip to content
This repository was archived by the owner on Aug 14, 2024. It is now read-only.
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
306 changes: 306 additions & 0 deletions TestCodeCoopCam
Original file line number Diff line number Diff line change
@@ -0,0 +1,306 @@
// Fill-in information for your Blynk connection here


#define BLYNK_TEMPLATE_ID "TMPL-flCABCq"
#define BLYNK_DEVICE_NAME "CoopCommand"
#define BLYNK_HEARTBEAT 30
#define BLYNK_FIRMWARE_VERSION "0.2.0"
#define BLYNK_PRINT Serial
//#define BLYNK_DEBUG
#define APP_DEBUG

// Pin Defines

#define PHOTOCLICK V5
#define LED 4
#define DOORUP V7
#define DOORDOWN V6


// Uncomment your board, or configure a custom board in Settings.h
//define USE_WROVER_BOARD

// Libraries

#include "BlynkEdgent.h"
#include "esp_camera.h"
#include "Arduino.h"
#include <ESP32_FTPClient.h>
#include "soc/soc.h" // Disable brownout problems
#include "soc/rtc_cntl_reg.h" // Disable brownout problems

// Blynkv LED setup

WidgetLED led1(V1);
WidgetLED led2(V2);
WidgetLED led3(V3);
WidgetLED led4(V4);

// Pin definition for CAMERA_MODEL_AI_THINKER

#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27

#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22

//FTP server information and setup

char ftp_server[] = "files.000webhost.com";
char ftp_user[] = "coopcommandimages";
char ftp_pass[] ="Speedway*1";
ESP32_FTPClient ftp (ftp_server,ftp_user,ftp_pass, 5000, 2); // you can pass a FTP timeout and debbug mode on the last 2 arguments

// Variables

bool takePhoto = false;
bool loading = false;
bool newImage = false;
bool newDisplay = false;
String coopImageURL; //= "https://coopcommandimages.000webhostapp.com/uploads/1.png";
int i = 1;
int ic = 1;
int imageFlip = 1;
char coopRx; // Info received from CoopCommand
bool newDataRx = false; //has CoopCam received new data from CoopCommand


void setup() {

// Startup Serial, Blynk, Blynk Timers and initial imamge. Disable brownout detector
Serial.begin(115200);
delay(50);
BlynkEdgent.begin();
pinMode(LED, OUTPUT);
timer.setInterval(500,coopCom);
timer.setInterval(150,loadingImage);
Blynk.virtualWrite(V0, 3);

//disable brownout detector
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);

// Configure the Camera

camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;

// Image settings depending on PSRAM availability

if(psramFound()){
config.frame_size = FRAMESIZE_SVGA; // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA
config.jpeg_quality = 20;
config.fb_count = 2;
}
else {
config.frame_size = FRAMESIZE_VGA;
config.jpeg_quality = 20;
config.fb_count = 1;
}
// Initialize Camera
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
return;
}

}


// Changes image in Blynk app depending on camera state
void loadingImage( void ) {
if (loading) {
Blynk.virtualWrite(V0, (i+2));
if (i <= 9) {
i ++;
}
else if (i > 9) {
i = 1;
}
}
else if (!loading) {
if (ic == 1) {
coopImageURL = "https://coopcommandimages.000webhostapp.com/uploads/coopPic5.jpg";
}
else if (ic == 2) {
coopImageURL = "https://coopcommandimages.000webhostapp.com/uploads/coopPic6.jpg";
}
else if (ic == 3) {
coopImageURL = "https://coopcommandimages.000webhostapp.com/uploads/coopPic7.jpg";
}
if (newImage) {
Blynk.setProperty(V0, "url", (ic-1), coopImageURL);
Blynk.virtualWrite(V0, (ic-1));
newImage = false;
}
i = 1;
}
}

// Sends a new image to the FTP server

void sendPhoto ( void ) {
if (takePhoto) {

camera_fb_t * fb = NULL;

// Take Picture with Camera
fb = esp_camera_fb_get();
digitalWrite(LED, LOW);
delay (50);
if(!fb) {
ESP.restart();
return;
}

if (imageFlip == 1) {
ftp.OpenConnection();
// Create the new file and send the image
ftp.ChangeWorkDir("/public_html/uploads/");
ftp.InitFile("Type I");
ftp.NewFile("coopPic5.jpg");
ftp.WriteData( fb->buf, fb->len );
ftp.CloseFile();
ftp.CloseConnection();
takePhoto = false;
imageFlip = 2;
ic = 1;
esp_camera_fb_return(fb);
Serial.print('N');
}
else if (imageFlip == 2) {
ftp.OpenConnection();
// Create the new file and send the image
ftp.ChangeWorkDir("/public_html/uploads/");
ftp.InitFile("Type I");
ftp.NewFile("coopPic6.jpg");
ftp.WriteData( fb->buf, fb->len );
ftp.CloseFile();
ftp.CloseConnection();
takePhoto = false;
imageFlip = 3;
ic = 2;
esp_camera_fb_return(fb);
Serial.print('N');
}
else if (imageFlip == 3) {
ftp.OpenConnection();
// Create the new file and send the image
ftp.ChangeWorkDir("/public_html/uploads/");
ftp.InitFile("Type I");
ftp.NewFile("coopPic7.jpg");
ftp.WriteData( fb->buf, fb->len );
ftp.CloseFile();
ftp.CloseConnection();
takePhoto = false;
imageFlip = 1;
ic = 3;
esp_camera_fb_return(fb);
Serial.print('N');
}
}
}

// Serial communication with CoopCommand board

void coopCom ( void ) {

if (Serial.available() > 0) {
coopRx = Serial.read();
newDataRx = true;
}
if (newDataRx == true) {
if (coopRx == 'O') { //If CoopCommand says the door is up
led1.on();
led2.off();
led3.off();
led4.off();
newDataRx = false;
}
if (coopRx == 'S') { //If CoopCommand says the door is down

led1.off();
led2.on();
led3.off();
led4.off();
newDataRx = false;
}
if (coopRx == 'U') { //If CoopCommand says the door is opening
led1.off();
led2.off();
led3.on();
led4.off();
newDataRx = false;
}
if (coopRx == 'D') { //If CoopCommand says the door is closing
led1.off();
led2.off();
led3.off();
led4.on();
newDataRx = false;
}
}
}

// Put the door up

BLYNK_WRITE(DOORUP) {
Serial.print('U');
}

// Put the door down

BLYNK_WRITE(DOORDOWN) {
Serial.print('D');
}

// Take a photo and display it in the app

BLYNK_WRITE(V5) {
digitalWrite(LED, HIGH);
Serial.print('L');
takePhoto = true;
loading = true;
newImage = true;
loadingImage();
timer.setTimeout(250, sendPhoto);
timer.setTimeout(3000, []()
{
loading = false;
loadingImage();
});
}


void loop() {
BlynkEdgent.run();
}