Problem kończącą się pamięcią RAM

Post Reply
krycha88
Posts: 539
Joined: Fri Nov 16, 2018 7:25 am

Thu Aug 08, 2019 8:25 am

Proszę o pomoc bardziej doświadczonych :)
Realizuję sobie projekt dzwonka z powiadomieniem na telefon ale dodatkowo do powiadomienia ma być dołączony obraz z kamery. Problemem jest sam obraz zajmuje średnio od 40 do 50 KB, pierwsza myśl to przechowam go sobie na partycji spiffs i wtedy go wysłać. Działa to bardzo fajnie tylko ostatnio na forum każdy pisze, że w końcu wykończę flesha itd...

Więc wpadłem na pomysł aby przechować zdjęcie w pamięci za pomocą StreamString, sposób też działa ale gdy zdjęcie zajmuję więcej niż 20KB (zdjęcie w dzień) to wysyła mi tylko 1/3 zdjęcia.

Aktualnie korzystam z nodemcu, czy na tym urządzeniu jestem jakoś to przeskoczyć czy kupienie ES32 pomoże który niby ma więcej pamięci?
User avatar
pzygmunt
Posts: 7080
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Contact:

Thu Aug 08, 2019 9:09 am

Za mało szczegółów.
krycha88
Posts: 539
Joined: Fri Nov 16, 2018 7:25 am

Thu Aug 08, 2019 9:31 am

Napisałem sobie metodę, która przechowuje obrazek w StreamString. Maksymalny rozmiar obrazka jaki jestem zapamiętać to 10 do 15KB niestety obrazek ma 40KB przez co przesyłany jest tylko 1/3 obrazka.

Urządzenie, które używam to nodemcu v2

Code: Select all

StreamString getStreamHikvision(int channelCamera) {
  StreamString fileImg;
  IPAddress adressHikvision;
  adressHikvision.fromString(read_hikvision_server().c_str());

  httpHikvision.setTimeout(20000);
  httpHikvision.begin("http://" + String(adressHikvision.toString()) + "/ISAPI/Streaming/channels/" + String(channelCamera) + "/picture");
  httpHikvision.addHeader("Authorization", "Basic xxxxxxxx");

  int httpCode = httpHikvision.GET();
  Serial.println(httpCode);
  if (httpCode > 0) {
    httpHikvision.writeToStream(&file);
    file.close();
  }
  httpHikvision.end();
  return fileImg;
}
User avatar
pzygmunt
Posts: 7080
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Contact:

Thu Aug 08, 2019 9:48 am

Czytaj odpowiedź z HTTP-get bajt po bajcie. Parsuj poszczególne bajty i zapisuj je gdzie tam chcesz binarnie, a nie w formie hex-ów w stringu.
HEX w stringu zajmuje 2x tyle pamięci co binarka.
Możesz też pominąć bibliotekę do HTTP bo ona sama w sobie zabiera pamięć i możesz zrobić własnego GET-a za pomocą TCP.
Post Reply