Fotopast na veverky s ESP32-CAM

Začátkem podzimu k nám na balkón zase začaly chodit veverky. Pak jsem při hledání, už ani nevím čeho, objevil v bastlbedně modul ESP32-CAM. K realizaci fotopasti tak byl jen krůček.


Fotopast na veverky s ESP32-CAM Štítky:  , , , , C, , motion detect, ESP32-CAM, 3D tisk

    Začátkem podzimu k nám na balkón zase začaly chodit veverky. Takže jsem jim (konečně) postavil krmítko ať oříšky a jiné laskominy nežerou holubi.
Pak jsem při hledání „už ani nevím čeho“ objevil v bastlbedně modul ESP32-CAM. K realizaci fotopasti tak byl jen krůček.

HW
Modul ESP32-CAM (AI Thinker) z Alixu za 5 UDS, ale umí i Vokolo, LáskaKit a jiné bastlířské eshopy v CZ.

Umístění jsem s ohledem na napájení volil uvnitř – za oknem. Ke slovu přišel starý cucflekový držák na autokameru. Ten je vybaven W1/4 závitem (klasický fotografický závit).
Držák pro ESP-32-CAM je vymodelovaný v ThinkerCadu a vytištěný na 3D tiskárně.

Držák ESP32-CAM Držák s ESP32-CAM

Jelikož se závit špatně tiskne, tak jsou díry schválně navrženy menší – po vytištění protáhnout 5,5 vrtákem a šroub stativu tam opatrně na sílu našroubovat.

Kamera, kromě krmítka, bohužel zabírá i okna sousedního domu. A sousedi svým energeticky nezodpovědným chováním (rozsvěcováním světel) generují značné množství falešných pohybů.
Tak jsem ke kemaře dobastlil fotorezistor a za tmy (threshold tak nějak odhadem) detekovaný pohyb nezpracovávám.

Fotorezistor je připojen místo LED k pinu GPIO 33, druhá část děliče 10k odpor pak hezky sedne k nedalekému kondenzátoru.

LDR ESP32-CAM Schéma

ESP32-CAM s LDR

Měření klasika

  ...
  Define LDR_PIN 33
  ...
  ldrValue = analogRead(LDR_PIN);
  ...



ESP32 FW
Na koukáni na video nemám čas. Takže místo streamování jsem potřeboval Motion Detection. Na webu je spousta návodů, vesměs s extérním PIR detektorem (např. chiptron). Já však nechci další HW, navíc PIR přes sklo nefunguje.

Na webu je spoustu hotových řešení, lepších i vyloženě prasáren. Já jsem chvíli zkoušel a pak našel knihovnu EloquentSurveillance, která je jednak velmi pěkně napsaná, druhak je prefektně zdokumentovaná a ještě umí vše potřebné.

Takže stačí použít některý z příkladů, upravit konfiguraci kamery a motion detect parametry

  camera.aithinker();
  camera.bestQuality();
  camera.uxga();

  motion.setMinChanges(0.1);
  motion.setMinPixelDiff(5);
  motion.setMinSizeDiff(0.05);
  motion.debounce(10000L);


plus doplnit POST fotek (viz níže) a alivePING na můj server.

SW
Pro ukládání fotek jsem ze začátku používal SD kartu, ale embeddovaný fileserver toho moc neumí a navíc se mi nechce dělat tunel a ohýbat firewall pro online náhled odkudkoliv ze světa.
Takže jsem implementoval ukládání fotek na můj server. Uložení na SD kartu zůstalo, je to ale záložní varianta, když POST neprojde.
Do hlavičky POST ještě přidávám pár diagnostických informací jako např zbývající místo na SD kartě, úroveň osvětlení apod.


bool httpUploadFile(String fileName, String MACaddr, uint32_t MotionCount, float CardUsed, uint16_t LDRvalue){
  bool status = true;
  String httpError = "";
  HTTPClient http;
  http.begin(String(F("URL")));
  http.addHeader(F("X-ESP-TOKEN"), "TokenTajnyJakHovado" + MACaddr);
  http.addHeader(F("X-ESP-FileName"), fileName);
  http.addHeader(F("X-ESP-SDused"), String(CardUsed));    
  http.addHeader(F("X-ESP-MotionCount"), String(MotionCount)); 
  http.addHeader(F("X-ESP-LDR"), String(LDRvalue)); 
  int statusCode = http.POST(gFrame->buf, gFrame->len);                
  if (statusCode != 200) {
    String response = http.getString();
    httpError = String("Server error: (") + statusCode + ") " + response;
    debug("UPLOAD ERROR", response);
    status = false;
  }else{
    debug("UPLOAD", http.getString());
  }
  http.end();
  return status;                
}



Na serveru pak v PHP

$headers = getallheaders();
...
if($headers['X-ESP-TOKEN'] == "TokenTajnyJakHovadoIsMACadresou"){
  $imageFile = $headers['X-ESP-FileName']
  if(!file_put_contents($imageFile, file_get_contents('php://input'))){
    print_r("ERR");
  }else{
    print_r("OK");
  }
}else{
  Header(HTTP403)
}
...



Vybrané, ručně vytříděné, fotky jsou pak dostupné na webu CamTrap Image Gallery

Ouško Bleskíno

A samozřejmě, že i holubi se přišli podívat.

Emil


Seznam odkazů:

Poznámka pro sebe sama:
V IoT dashboard změnit default parametry RRD


rrdtool tune FILENAME -d mc:COUNTER
rrdtool tune FILENAME -a mc:500000
rrdtool tune FILENAME -a ldr:4100

;  
Vaše názory a komentáře: 0 ;  Zobrazeno: 3428 x ;  Hodnoceno: 1 x ;  Hodnocení článku : Hodnocení článku:100%

Hodnocení článku: 1 2 3 4 5


Přidat komentář
Jméno
E-Mail
Zadejte pátou čísici z čísla Zadejte pátou čísici z čísla
Pokud očekáváte odpověď na Vámi vložený komentář, zadejte Váš e-mail.
Vložením komentáře souhlasíte s pravidly.