Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adaptando para motion detect #33

Open
eldimar opened this issue Mar 6, 2020 · 1 comment
Open

Adaptando para motion detect #33

eldimar opened this issue Mar 6, 2020 · 1 comment
Labels
discussion Brainstorm ideas

Comments

@eldimar
Copy link

eldimar commented Mar 6, 2020

Ola pessoal...
atualmente eu estou utilizando esse código pra envio de foto capturada pelo telegram...ele tira uma foto baseado em um intervalo de tempo...porem queria adaptar pra tirar uma foto via detecção.

/*
ESP32-CAM save a captured photo to Telegram
Author : ChungYi Fu (Kaohsiung, Taiwan) 2020-1-18 19:00
https://www.facebook.com/francefu
*/

// Enter your WiFi ssid and password
const char* ssid = "XXXXX"; //your network SSID
const char* password = "XXXXXX"; //your network password

String token = "XXXXXXXXXXXXXXX"; // Create your bot and get the token -> https://telegram.me/fatherbot
String chat_id = "XXXXXXX"; // Get chat_id -> https://telegram.me/userinfobot

#include <WiFi.h>
#include <WiFiClientSecure.h>
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"

#include "esp_camera.h"

// WARNING!!! Make sure that you have either selected ESP32 Wrover Module,
// or another board which has PSRAM enabled

//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

void setup()
{
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);

Serial.begin(115200);
delay(10);

WiFi.mode(WIFI_STA);

Serial.println("");
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);

long int StartTime=millis();
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
if ((StartTime+10000) < millis()) break;
}

Serial.println("");
Serial.println("STAIP address: ");
Serial.println(WiFi.localIP());

Serial.println("");

if (WiFi.status() != WL_CONNECTED) {
Serial.println("Reset");

ledcAttachPin(4, 3);
ledcSetup(3, 5000, 8);
ledcWrite(3,10);
delay(200);
ledcWrite(3,0);
delay(200);    
ledcDetachPin(3);
    
delay(1000);
ESP.restart();

}
else {
ledcAttachPin(4, 3);
ledcSetup(3, 5000, 8);
for (int i=0;i<5;i++) {
ledcWrite(3,10);
delay(200);
ledcWrite(3,0);
delay(200);
}
ledcDetachPin(3);
}

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;
//init with high specs to pre-allocate larger buffers
if(psramFound()){
config.frame_size = FRAMESIZE_UXGA;
config.jpeg_quality = 10; //0-63 lower number means higher quality
config.fb_count = 2;
} else {
config.frame_size = FRAMESIZE_SVGA;
config.jpeg_quality = 12; //0-63 lower number means higher quality
config.fb_count = 1;
}

// camera init
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed with error 0x%x", err);
delay(1000);
ESP.restart();
}

//drop down frame size for higher initial frame rate
sensor_t * s = esp_camera_sensor_get();
s->set_framesize(s, FRAMESIZE_CIF); // UXGA|SXGA|XGA|SVGA|VGA|CIF|QVGA|HQVGA|QQVGA
}

void loop()
{
sendCapturedImage2Telegram(token, chat_id);
delay(72000);
}

String sendCapturedImage2Telegram(String token, String chat_id) {
const char* myDomain = "149.154.167.220";
String getAll="", getBody = "";

camera_fb_t * fb = NULL;
fb = esp_camera_fb_get();
if(!fb) {
Serial.println("Camera capture failed");
delay(1000);
ESP.restart();
return "Camera capture failed";
}

Serial.println("Connect to " + String(myDomain));
WiFiClientSecure client_tcp;

if (client_tcp.connect(myDomain, 443)) {
Serial.println("Connection successful");

String head = "--Taiwan\r\nContent-Disposition: form-data; name=\"chat_id\"; \r\n\r\n" + chat_id + "\r\n--Taiwan\r\nContent-Disposition: form-data; name=\"photo\"; filename=\"esp32-cam.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n";
String tail = "\r\n--Taiwan--\r\n";

uint16_t imageLen = fb->len;
uint16_t extraLen = head.length() + tail.length();
uint16_t totalLen = imageLen + extraLen;

client_tcp.println("POST /bot"+token+"/sendPhoto HTTP/1.1");
client_tcp.println("Host: " + String(myDomain));
client_tcp.println("Content-Length: " + String(totalLen));
client_tcp.println("Content-Type: multipart/form-data; boundary=Taiwan");
client_tcp.println();
client_tcp.print(head);

uint8_t *fbBuf = fb->buf;
size_t fbLen = fb->len;
for (size_t n=0;n<fbLen;n=n+1024) {
  if (n+1024<fbLen) {
    client_tcp.write(fbBuf, 1024);
    fbBuf += 1024;
  }
  else if (fbLen%1024>0) {
    size_t remainder = fbLen%1024;
    client_tcp.write(fbBuf, remainder);
  }
}  

client_tcp.print(tail);

esp_camera_fb_return(fb);

int waitTime = 10000;   // timeout 10 seconds
long startTime = millis();
boolean state = false;

while ((startTime + waitTime) > millis())
{
  Serial.print(".");
  delay(100);      
  while (client_tcp.available()) 
  {
      char c = client_tcp.read();
      if (c == '\n') 
      {
        if (getAll.length()==0) state=true; 
        getAll = "";
      } 
      else if (c != '\r')
        getAll += String(c);
      if (state==true) getBody += String(c);
      startTime = millis();
   }
   if (getBody.length()>0) break;
}
client_tcp.stop();
Serial.println(getBody);

}
else {
getBody="Connected to api.telegram.org failed.";
Serial.println("Connected to api.telegram.org failed.");
}

return getBody;
}

@raphaelbs
Copy link
Owner

Olá @eldimar

Você chegou a testar o exemplo change detection?

@raphaelbs raphaelbs added the discussion Brainstorm ideas label Jun 22, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
discussion Brainstorm ideas
Projects
None yet
Development

No branches or pull requests

2 participants