Skocz do zawartości

Aktywny System Monitorujący


Pomocna odpowiedź

22 minuty temu, ethanak napisał:

Nie znam wersji Arduino na Pico, ale jak na mój gust to masz dwa wyjścia:

  1. Pożegnać się z Arduino IDE i zacząć pisać w picowym SDK (bardzo fajnie się pisze w C, w C++ nie próbowałem)
  2. Pożegnać się z Pico i użyć ESP32 (wersja Arduino na ESP32 pozwala na wykorzystanie 99.9% możliwości ESP, wszystko co potrafi FreeRTOS  z modyfikacją dla wielu rdzeni)

Do wyboru...

 

Ponieważ uczę się pisać w C w SDK Pico i idzie mi to jak po grudzie (ale w końcu to przejdę), to chcę napisać oprogramowanie dla ESP32 w Arduino, a do Pico wrócić później, jak moje umiejętności z SDK osiągną poziom minimum.

Link do komentarza
Share on other sites

To tylko wolne myśli, ale pewnie dałoby się wykorzystać np. Bluetooth zamiast podczerwieni, Low Energy i rozgłaszania, a po drugiej stronie odczyt RSSI. Bardziej pewnie dla zastosowań wewnętrznych, ale jakiś pomysł jest. Sprawdzić jak to się zachowuje na dworze. Najlepiej jak będzie się na miejscu monitorować tło, a potem wejść pomiędzy nadajnik(i) a odbiornik(i).

Link do komentarza
Share on other sites

Dnia 24.03.2024 o 06:53, Santiago napisał:

Czy system monitoringu jednak zdał egzamin ? Czy ochronił mienie

Powiadomił mnie SMS-em, kiedy sąsiad pojawił się, nie wiedząc, ze mnie nie ma. Pokazał sąsiada i prawdopodobnie spłoszył go syreną (nie jestem pewien czy jeszcze wtedy syreny działały, jeszcze z nim nie rozmawiałem). Więcej interwencji (poza ptakami i zwierzętami) na razie nie było. Podgląd z kamer pozwalał mi spać spokojnie (byłem niespokojny po ubiegłorocznym włamie).

Więc tak, ogólna funkcjonalność się sprawdziła, muszę dopracować detale.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

1 minutę temu, Santiago napisał:

Chyba cos z oprogramowaniem

Raczej nie. Wszystkie błędy oprogramowania chyba już znam. Mimo wszystko stawiam na przekaźnik. Ewentualnie na połączenie na przekaźniku - mocno tam kombinowałem ze złączami i nie dałbym na nie gwarancji. Z powodu błędu oprogramowania mniej więcej co pięćdziesiąt minut zasilanie kamer jest wyłączane na chwile (watchdog, przekaźniki). Po takiej akcji czasami któraś z kamer nie wstaje, zwykle do kolejnego "resetu" zasilania.

W każdym razie dużo do poprawy, ale... działa!

Link do komentarza
Share on other sites

Poczytałem sobie o internecie rzeczy. Przy okazji dowiedziałem się, że przesyłanie zdjęć jest tam możliwe, ale niewskazane. Spróbuję więc zaimplementować to na esp32. Cudów się nie spodziewam, traktuję to bardziej edukacyjnie.

Na razie postawiłem sobie na Debianie Mosquitto MQTT Broker. Teraz dorabiam do niego skromny interfejs PHP. W następnym kroku spróbuję skomunikować się z brookerem z poziomu ESP32-CAM i sprawdzić jak to będzie działać z obrazem.

Instrukcje na których oparłem się instalując brookera:

jak to zrobić

jak to poprawić

czym to testować

Nawet jeśli przesyłanie obrazu nie będzie efektywne, to użyję MQTT do przesyłania sygnałów (np. z czujek. Obecnie robię to przy pomocy protokołu ftp, ale mqtt wydaje się do tego bardziej właściwy.

Link do komentarza
Share on other sites

Udało się. Patrzę w kamerkę ESP32-CAM i moje zdjęcia zapisują się na moim serwerze w sieci za pośrednictwem protokołu mqtt.

Brooker działa dobrze, napisałem prosty skypt w php (wywoływany w cronie co minutę), który zapisuje dane z tematu mqtt do plików jpg.

#!/usr/bin/php -q

<?php

use Mosquitto\Client;

set_time_limit(60);

$start = date("H");
while ($start == date("H")) {

$mid = 0;
$username = "nazwa_użytkownika_mqtt";
$password = "hasło_użytkownika_mqtt";

$host = "localhost";
$port = 1883;
$keepalive = 60;
$interface = null;

$topic = "kam3";
$qos = 0;

$client = new Mosquitto\Client("PHP");
$client->setCredentials($username, $password);
$client->onMessage(function($message) use ($client) {
    $decodedData = base64_decode($message->payload);
    file_put_contents('/home/www/asm/kam3/' . date("YmdHis") . ".jpg", $decodedData);
});

$client->connect($host, $port, $keepalive, $interface);
$client->subscribe($topic, $qos);

$client->loopForever();

}

?>

Użyłem tej biblioteki.

Po drugiej stronie mam prosty program zainstalowany na moim ulubionym ESP32-CAM.

To jeszcze siermiężny szkic, więc nie wrzucam go tu w całości, po dopracowaniu wrzucę na githuba. Oczywiście robię to w arduinoIDE. Połączenie z serwerem jest szyfrowane SSL przy pomocy <WiFiClientSecure.h>, klientem mqtt jest PubSubClient, a obrazy są pobierane z kamery i jako surowe dane (base64) przesyłane wiadomościami mqtt do brookera, z którego pobiera je powyższy skrypt i zapisuje do pliku na serwerze.

W porównaniu z FTP, którego używałem do tego celu dotychczas, działa to z prędkością światła.

Kolejne kroki:

  • sprawdzenie czy certyfikaty ssl działają prawidłowo (nie rozumiem jeszcze "client.setInsecure();  // skip verification" stąd),
  • sprawdzenie czy można to zrobić dla rozdzielczości wyższych niż QVGA,
  • zrozumienie do końca co to jest i jak działa PSRAM w ESP32,
  • stworzenie streama z zapisanych obrazków, albo bezpośrednio z tematu mqtt.

Gdzie chcę dojść na końcu? Chcę aby obrazy z kamerki były automatycznie analizowane na serwerze i w razie pojawienia się intruzów serwer informował mnie o tym mailowo.

Będę informował na bieżąco. Jak zwykle: wszelkie sugestie mile widziane.

Link do komentarza
Share on other sites

Dnia 30.03.2024 o 09:26, Szern napisał:
  • sprawdzenie czy certyfikaty ssl działają prawidłowo (nie rozumiem jeszcze "client.setInsecure();  // skip verification" stąd),
  • sprawdzenie czy można to zrobić dla rozdzielczości wyższych niż QVGA,
  • zrozumienie do końca co to jest i jak działa PSRAM w ESP32,
  • stworzenie streama z zapisanych obrazków, albo bezpośrednio z tematu mqtt.

Certyfikaty SSL działają prawidłowo, połączenie z moim serwerem jest szyfrowane.

Cytat

[  6955][V][ssl_client.cpp:68] start_ssl_client(): Starting socket
[  7003][V][ssl_client.cpp:146] start_ssl_client(): Seeding the random number generator
[  7004][V][ssl_client.cpp:155] start_ssl_client(): Setting up the SSL/TLS structure...
[  7009][V][ssl_client.cpp:178] start_ssl_client(): Loading CA cert
[  7019][V][ssl_client.cpp:254] start_ssl_client(): Setting hostname for TLS session...
[  7022][V][ssl_client.cpp:269] start_ssl_client(): Performing the SSL/TLS handshake...
[  7909][V][ssl_client.cpp:290] start_ssl_client(): Verifying peer X.509 certificate...
[  7909][V][ssl_client.cpp:298] start_ssl_client(): Certificate verified.
[  7912][V][ssl_client.cpp:313] start_ssl_client(): Free internal heap after TLS 162932
 connected!
connecting to mqtt broker...[  7931][V][ssl_client.cpp:369] send_ssl_data(): Writing HTTP request with 44 bytes...
 connected!

Można to zrobić dla wyższych rozdzielczości, ale tylko QVGA działa z normalną pamięcią (512KB SRAM), a wyższe rozdzielczości wymagają umieszczenia bufora w PSRAM (3M).

PSRAM to zewnętrzna, wolniejsza pamięć. Można ją wykorzystywać albo nie. Na razie skupię się na najniższej rozdzielczości z buforem w wewnętrznej pamięci.

Link do komentarza
Share on other sites

16 godzin temu, ethanak napisał:

W Arduino IDE możesz wykorzystać PSRAM (4 MB) nie zmieniając praktycznie nic w kodzie, tyle że zamiast malloc dajesz ps_malloc.

W tej chwili deklaruję bezpośrednio w konfiguracji czy kamera ma używać PSRAM:

camera_config.fb_location = CAMERA_FB_IN_DRAM; // CAMERA_FB_IN_DRAM || CAMERA_FB_IN_PSRAM;

O ile się orientuję, realnie zostają do wykorzystania na bufor ramki 3 MB PSRAM (Partition Scheme: "Huge APP (3MB No OTA/1MB SPIFFS).

Link do komentarza
Share on other sites

Partition scheme jest to układ partycji na flashu i nie ma nic wspólnego z pamięcią RAM (jakąkolwiek). Podobnie jak zmieniając partycje na dysku w pececie nie sprawisz, że ci ilość ramu w kompie się zmieni.

Link do komentarza
Share on other sites

25 minut temu, ethanak napisał:

Partition scheme jest to układ partycji na flashu i nie ma nic wspólnego z pamięcią RAM (jakąkolwiek). Podobnie jak zmieniając partycje na dysku w pececie nie sprawisz, że ci ilość ramu w kompie się zmieni.

Tak, ale... (popraw mnie proszę, jeśli się mylę) SPIFFS to jedna partycja (systemowa?), a reszta pamięci flash to druga partycja. Wydaje mi się, że przez ps_malloc nie zadeklaruję bufora większego niż 3MB (a w praktyce raczej dwa).

Link do komentarza
Share on other sites

A co mają partycje na flashu wspólnego z RAM? Totalnie mylisz pojęcia.

A przez ps_malloc o ile pamiętam możesz zaallokować tyle ile tej pamięci masz (nie wiem ile, sprawdź) ale nie więcej niż w sumie 4 MB (tylko tyle może być mapowane).

Uwaga do esp-idfowców: wiem że są różne metody korzystania z psram, ale arduino ma wkompilowaną właśnie tę.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.