Skocz do zawartości

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.

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).

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.

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!

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.

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.

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.

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).

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.

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).

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ę.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...