Stránka 6 z 7

Re: ESP32 CAM Foto uložené v bufferu

Napsal: 22 zář 2021, 12:33
od ondraN
Pascal a C se zase tolik neliší. Oba jsou procedurální strukturované jazyky. Pascal je ale víc rigidní a tím neumožňuje některé věci, co C.
Taky jsem vyrostl na Pascalu a do C jsem se pustil před pár lety. Pro MCU je C prostě lepší, hlavně díky skvělé práci s pointery. Ale daleko hůř se hledají chyby (hlavně překročení hranice polí a struktur).

Tady se nastavují parametry, které souvisí s velikostí bufferu

Kód: Vybrat vše

  if(psramFound()){
    config.frame_size = FRAMESIZE_XGA;//FRAMESIZE_UXGA; // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }  
Pokud je na modulu nalezená externí RAM paměť, provede se prvni blok, kde se alokují dva buffery na dva snímky a je nastavena vyšší kvalita jpegu. Když externí paměť není nainstalovaná, je jen jeden buffer a horší kvalita. Tím si to můžeš celé nakonfigurovat.

Re: ESP32 CAM Foto uložené v bufferu

Napsal: 22 zář 2021, 18:01
od visk52
Tady někde musí být chyba protože je špatná posloupnost

Kód: Vybrat vše

  int c=(fb->len)/1024;
for(int l=0;l<c;l++){

Serial.print("AT+FTPPUT=2,1024\r");

Serial.flush();
delay(3000); 
 while(Serial.available()){
    mesage=mesage+Serial.read();
  } 
  
delay(1000);
  for(int i=0;i<1024;i++){
     Serial.print(fb->buf[poz],HEX);
     poz++;
  }
  // put your setup code here, to run once:
}
int z=(fb->len)%1024;
Serial.print("AT+FTPPUT=2,");
Serial.print(z);
Serial.print("\r");
Serial.flush();
 for(int i=0;i<z;i++){
     Serial.print(fb->buf[poz],HEX);
     poz++;
 }

mi to vypisuje na sériový monitor toto ty data tam nemají byt protože mají být přenesena na FTP server
OK

+FTPPUT: 1,1,1360
9BA949CD162976A72D485EE6B68E7F7A6BA587A567239DEE5C4E948F5981567A87B52458525301C6ABDB7FC8C76FF0EED5ADCD207A877AE73583FE9CDFEED671F88DE3756E6FDCD515E6810F0A16B6BC27FF230C7F4ABA6FDE31C47F099DCE9C8AB737C4019A6C9FCAAFD7A9FF02EF3A3B515E5C362828AF6E83D028AF1F13FC56151CFFEAEBCB9FC66D033A5A873548E803D2A3CD5A24434DAA1C26987AD52244CD25222351B9FDDD5886909AB24666984D31C349544913FDEA69A62194D6E948849A33CD0472542D4D085A414C414D3489199F9AB89F1D1FFAT+FTPPUT=2,1024

+FTPPUT: 2,1024

OK

Správně to mělo být takto
+FTPPUT: 1,1,1360
AT+FTPPUT=2,1024
+FTPPUT: 2,1024
OK
+FTPPUT: 1,1,1360
AT+FTPPUT=2,1024
+FTPPUT: 2,1024
OK


díky

Re: ESP32 CAM Foto uložené v bufferu

Napsal: 23 zář 2021, 08:04
od ondraN
Pokud sleduješ data na sériovém portu, tak se tam objeví vše, co tam pošleš funkcí Serial.print() (na Tx pinu) a vše co odpoví modem (na Rx pinu). Pro tebe by mělo být důležité, jestli byl na ftp vytvořen soubor a má správnou velikost a jde zobrazit jako jpg.

Re: ESP32 CAM Foto uložené v bufferu

Napsal: 23 zář 2021, 08:37
od visk52
Já to mám udělano tak že ten z modulu ESP32 CAM posílám všechno funkcí Serial.print() do modulu SIM800 a odpovědi s SIM800 si nechávám zobrazovat na sériovém monitoru to jen provizorně abych věděl co se tam děje ,a na FTP serveru se pak podívám co se tam přeneslo a objem dat pochopitelně tam chybí ty části které se nepodařilo přenést díky

Re: ESP32 CAM Foto uložené v bufferu

Napsal: 23 zář 2021, 13:48
od ondraN
A jseš si jistý tím posílaným formátem HEX? Podle toho, co jsem si přečetl v manuálu, by měl být v AT příkazu AT+FTPPUT=2,.... uveden počet byte pro přenos. Ale pokud použíješ formát HEX, tak vlastně pošleš 2xtolik. Navíc se to posílá v textové formě, takže třeba hodnota 0x32 se odešle jako dva ASCI znaky '3' '2'
Zkusil bych místo těchto bloků

Kód: Vybrat vše

  for(int i=0;i<1024;i++){
     Serial.print(fb->buf[poz],HEX);
     poz++;
  }
udělat tohle

Kód: Vybrat vše

Serial.write(&(fb->buf[poz]),1024);
poz=poz+1024;
Pak tam odejde opravdu jen 1024byte binárně, bez jakýchkoli úprav.

Re: ESP32 CAM Foto uložené v bufferu

Napsal: 23 zář 2021, 17:59
od visk52
Pořád je něco špatně na FTP serveru se to zobrazuje jak má viz příloha před tím tam byl jen jeden řádek tak je to přenášeno binárně ale pořád a tam zůstávají nepřenesené data ten soubor na FTP serveru je hrozně malý tak 2 k a naposled je ta velikost toho souboru 1k :oops: díky

Kód: Vybrat vše

 int c=(fb->len)/1024;
for(int l=0;l<c;l++){

Serial.print("AT+FTPPUT=2,1024\r");

Serial.flush();
delay(3000); 
 while(Serial.available()){
    mesage=mesage+Serial.read();
  } 
  
delay(1000);
 /* for(int i=0;i<1024;i++){
     Serial.print(fb->buf[poz],HEX);
     poz++;
  }*/
  Serial.write(&(fb->buf[poz]),1024);
   poz=poz+1024;
  // put your setup code here, to run once:
}
int z=(fb->len)%1024;
Serial.print("AT+FTPPUT=2,");
Serial.print(z);
Serial.print("\r");
Serial.flush();
 /*for(int i=0;i<z;i++){
     Serial.print(fb->buf[poz],HEX);
     poz++;
 }*/
 Serial.write(&(fb->buf[poz]),z);
 poz=poz+z;
Serial.print("AT+FTPPUT=2,0\r");
Serial.flush(); 
  esp_camera_fb_return(fb); 
   Serial.print("AT+SAPBR=0,1\r"); 
 Serial.flush();
}

Re: ESP32 CAM Foto uložené v bufferu

Napsal: 23 zář 2021, 20:48
od ondraN
Tenhle soubor jako jpeg nevypadá. Nemá to vůbec Exifovou hlavičku. Zkus si vypsat, jak je ta datová oblast velká (fb->len). Taky nemáš před zápisem posledního, zbytkového, bloku žádný delay a taky není před posledními dvěma příkazy. To by mohlo vadit.

Re: ESP32 CAM Foto uložené v bufferu

Napsal: 23 zář 2021, 21:43
od visk52
Tady to je

Kód: Vybrat vše

  camera_fb_t * fb = NULL;
  // Take Picture with Camera
  fb = esp_camera_fb_get();  
  Serial.print("Velikost obrazu: ");
  Serial.print(fb->len);
  Serial.print(" B,");
  Serial.print((fb->len)/1024); 
  Serial.println(" KB");
ale otázka je kde to vypisovat protože bohužel na tom modulu ESP32 CAM není druhá UART a softwarový serial to nesnese protože když tam dám knihovnu softwareSerial tak to dělá blbosti díky

Re: ESP32 CAM Foto uložené v bufferu

Napsal: 24 zář 2021, 08:09
od ondraN
Ještě jsem koukal do manuálu a jestli jsem to spávně pochopil, tak pro jedno přidání bloku dat bys měl mít sekvenci
AT+FTPPUT=1
odpoví
+FTPPUT:1,1,<maxlength>

a pak
AT+FTPPUT=2,<length>
odpoví
+FTPPUT: 2,<length>

pak se pošle počet byte a po posledním odpoví
OK

a pak se celá tahle sekvence zopakuje znovu a znovu až do úplného počtu dat a pak se uzavře FTP.
Ty ale pošleš AT+FTPPUT=1 jenom poprvé a pak neustále točíš AT+FTPPUT=2,<length>
Možná je to ten problém.
A taky si dej pozor na délku stringu mesage protože do něj jen neustále přidáváš odpovědi a tak stále narůstá. Po každém vyhodnocení (to neděláš) bys ho měl inicializovat mesage="";

Re: ESP32 CAM Foto uložené v bufferu

Napsal: 24 zář 2021, 15:17
od visk52
Já vlastně nevím jestli ta posloupnost mám dobrou

Kód: Vybrat vše

AT+SAPBR=3,1,"Contype","GPRS"
OK
AT+SAPBR=3,1,"APN","internet"
OK
AT+SAPBR=1,1
OK
AT+SAPBR=2,1
+SAPBR: 1,1,"10.189.139.131"

OK
AT+FTPCID=1
OK
AT+FTPTYPE=I
OK
AT+FTPSERV="*******************"
OK
AT+FTPUN="*************"
OK
AT+FTPPW="********"
OK
AT+FTPPUTPATH="/**************************"
OK
AT+FTPPUTNAME="picture.jpg"
OK
AT+FTPPUT=1
OK
AT+FTPPUT=2,1024
ERROR

+FTPPUT: 1,1,1360

a poslední dobou se objeví pokaždé ERROR není možný nějaký softwarový reset čili poslat tam AT příkaz který nastaví ten modul do počátečního stavu ,protože se mohlo stát že jak se tím "hraji "tak tam mohlo zůstat něco nastaveno špatně ? díky