Skocz do zawartości

Kuba_k

Użytkownicy
  • Zawartość

    24
  • Rejestracja

  • Ostatnio

Posty napisane przez Kuba_k


  1. Jak wgrasz sobie biblioreteki esp8266 pod IDE lub VSCode to działasz jak z normalnym arduino. Do czujnikow temp polecam wgranie ESPeasy (latwiej sie juz nie da). Niestety esp-01 nie jest najlepsza wersja, bo bardzo duzy problem jest z deep sleep.


  2. Od tygodnia próbuję przerobić projekt DIY sieci z kamerą ESP-32 i PIR-em, niestety całkowicie utknąłem. Chciałbym aby zdjęcie z tej kamery nie było zapisywane na karcie SD, tylko na moim serwerze ftp wewnątrz sieci domowej. Cel jest oczywisty, kamera będzie wisiała na korytarzu, więc jeśli ktoś będzie chciał się nią zaopiekować to lepiej żebym wiedział kim on był. Czy możecie mi pomoc? Jak nawet nie napisać co tam trzeba zmienić to chociaż nakierować. Znalazłem gotowe biblioteki do przesłania na ftp, natomiast nie wiem jak zrobić żeby każdy plik miał unikalną nazwę (wiem, że to podstawy ale nie udało mi się znaleźć odpowiedzi).

    Będę bardzo wdzięczny za pomoc ponieważ projekt robię z konieczności, a nie dla zabawy. Wynajem mieszkań sprowadza różnych ludzi, a moi obecni sąsiedzi zaczęli właśnie demolować klatkę. Obawiam się, że moje drzwi też nie umkną ich uwadze.

    Projekt:

    https://randomnerdtutorials.com/esp32-cam-pir-motion-detector-photo-capture/

     

    Kod:

    /*********
      Rui Santos
      Complete project details at https://RandomNerdTutorials.com/esp32-cam-pir-motion-detector-photo-capture/
     
      IMPORTANT!!!
       - Select Board "AI Thinker ESP32-CAM"
       - GPIO 0 must be connected to GND to upload a sketch
       - After connecting GPIO 0 to GND, press the ESP32-CAM on-board RESET button to put your board in flashing mode
     
      Permission is hereby granted, free of charge, to any person obtaining a copy
      of this software and associated documentation files.
      The above copyright notice and this permission notice shall be included in all
      copies or substantial portions of the Software.
    *********/
     
    #include "esp_camera.h"
    #include "Arduino.h"
    #include "FS.h"                // SD Card ESP32
    #include "SD_MMC.h"            // SD Card ESP32
    #include "soc/soc.h"           // Disable brownour problems
    #include "soc/rtc_cntl_reg.h"  // Disable brownour problems
    #include "driver/rtc_io.h"
    #include <EEPROM.h>            // read and write from flash memory
    // define the number of bytes you want to access
    #define EEPROM_SIZE 1
     
    RTC_DATA_ATTR int bootCount = 0;
    
    // Pin definition for CAMERA_MODEL_AI_THINKER
    #define PWDN_GPIO_NUM     32
    #define RESET_GPIO_NUM    -1
    #define XCLK_GPIO_NUM      0
    #define SIOD_GPIO_NUM     26
    #define SIOC_GPIO_NUM     27
    #define Y9_GPIO_NUM       35
    #define Y8_GPIO_NUM       34
    #define Y7_GPIO_NUM       39
    #define Y6_GPIO_NUM       36
    #define Y5_GPIO_NUM       21
    #define Y4_GPIO_NUM       19
    #define Y3_GPIO_NUM       18
    #define Y2_GPIO_NUM        5
    #define VSYNC_GPIO_NUM    25
    #define HREF_GPIO_NUM     23
    #define PCLK_GPIO_NUM     22
     
    int pictureNumber = 0;
    
    #define uS_TO_S_FACTOR 1000000
      
    void setup() {
      WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
      Serial.begin(115200);
     
      Serial.setDebugOutput(true);
     
      camera_config_t config;
      config.ledc_channel = LEDC_CHANNEL_0;
      config.ledc_timer = LEDC_TIMER_0;
      config.pin_d0 = Y2_GPIO_NUM;
      config.pin_d1 = Y3_GPIO_NUM;
      config.pin_d2 = Y4_GPIO_NUM;
      config.pin_d3 = Y5_GPIO_NUM;
      config.pin_d4 = Y6_GPIO_NUM;
      config.pin_d5 = Y7_GPIO_NUM;
      config.pin_d6 = Y8_GPIO_NUM;
      config.pin_d7 = Y9_GPIO_NUM;
      config.pin_xclk = XCLK_GPIO_NUM;
      config.pin_pclk = PCLK_GPIO_NUM;
      config.pin_vsync = VSYNC_GPIO_NUM;
      config.pin_href = HREF_GPIO_NUM;
      config.pin_sscb_sda = SIOD_GPIO_NUM;
      config.pin_sscb_scl = SIOC_GPIO_NUM;
      config.pin_pwdn = PWDN_GPIO_NUM;
      config.pin_reset = RESET_GPIO_NUM;
      config.xclk_freq_hz = 20000000;
      config.pixel_format = PIXFORMAT_JPEG;
      
      pinMode(4, INPUT);
      digitalWrite(4, LOW);
      rtc_gpio_hold_dis(GPIO_NUM_4);
     
      if(psramFound()){
        config.frame_size = FRAMESIZE_UXGA; // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA
        config.jpeg_quality = 10;
        config.fb_count = 2;
      } else {
        config.frame_size = FRAMESIZE_SVGA;
        config.jpeg_quality = 12;
        config.fb_count = 1;
      }
     
      // Init Camera
      esp_err_t err = esp_camera_init(&config);
      if (err != ESP_OK) {
        Serial.printf("Camera init failed with error 0x%x", err);
        return;
      }
     
      Serial.println("Starting SD Card");
     
      delay(500);
      if(!SD_MMC.begin()){
        Serial.println("SD Card Mount Failed");
        //return;
      }
     
      uint8_t cardType = SD_MMC.cardType();
      if(cardType == CARD_NONE){
        Serial.println("No SD Card attached");
        return;
      }
       
      camera_fb_t * fb = NULL;
     
      // Take Picture with Camera
      fb = esp_camera_fb_get();  
      if(!fb) {
        Serial.println("Camera capture failed");
        return;
      }
      // initialize EEPROM with predefined size
      EEPROM.begin(EEPROM_SIZE);
      pictureNumber = EEPROM.read(0) + 1;
     
      // Path where new picture will be saved in SD Card
      String path = "/picture" + String(pictureNumber) +".jpg";
     
      fs::FS &fs = SD_MMC;
      Serial.printf("Picture file name: %s\n", path.c_str());
     
      File file = fs.open(path.c_str(), FILE_WRITE);
      if(!file){
        Serial.println("Failed to open file in writing mode");
      }
      else {
        file.write(fb->buf, fb->len); // payload (image), payload length
        Serial.printf("Saved file to path: %s\n", path.c_str());
        EEPROM.write(0, pictureNumber);
        EEPROM.commit();
      }
      file.close();
      esp_camera_fb_return(fb);
      
      delay(1000);
      
      // Turns off the ESP32-CAM white on-board LED (flash) connected to GPIO 4
      pinMode(4, OUTPUT);
      digitalWrite(4, LOW);
      rtc_gpio_hold_en(GPIO_NUM_4);
    
      esp_sleep_enable_ext0_wakeup(GPIO_NUM_13, 0);
     
      Serial.println("Going to sleep now");
      delay(1000);
      esp_deep_sleep_start();
      Serial.println("This will never be printed");
    } 
     
    void loop() {
     
    }

     


  3. Dnia 24.10.2019 o 11:51, RFM napisał:

    Pierwotnie wykorzystałem https://thingspeak.com/ Wiedziałem, ze demon szybkości to nie jest ale jakież było moje zdziwienie gdy dane wysłałem na serwer lokalny i w Internecie.

    Thingspeak w wersji darmowej ma ograniczenie odbierania danych na 15000 ms, dlatego masz masz takie opóźnienia. Zauważyłem, że dają też chwilowego bana jeśli puścisz za często pakiety danych.


  4. Cześć,

    Mam spory problem z gotowym projektem, który chciałem odtworzyć. Dokładnie jest to urządzenie do malowania światłem LED Light painter. Projekt opiera się na rozwiązaniu Adafruit z Neopixel-ami, natomiast ma dodatkowo wyświetlacz lcd i guziki do sterowania plikami.

    No i tutaj zaczyna się komplikacja dla mnie. Jeśli chodzi o połączenia to wszystko zrobiłem dobrze, przetestowałem na innych prostych programach i teoretycznie powinno wszystko działać (led podpięty i działa, wyświetlacz lcd też, karta sd nie bo nawet nie wiem jak to przetestować). Zaznaczam, że jestem straszną pierdołą w tych sprawach, a projekt jest bardziej fotograficzny niż elektroniczny dlatego nieoceniona będzie Wasza pomoc.

    Po wgraniu szkicu z Arduino IDE nie dzieje się nic, zapala się tylko podświetlenie w lcd i to wszystko. Natomiast podczas kompilacji wyświetlają mi się błędy:

    C:\Users\ThinkPad\Desktop\student\led\ArduinoUNO\Light-painter-master\Light-painter-master\Light_painter\Light_painter.ino:510:7: warning: extra tokens at end of #else directive
    
     #else if CONSISTENT
    
           ^
    
    C:\Users\ThinkPad\Desktop\student\led\ArduinoUNO\Light-painter-master\Light-painter-master\Light_painter\Light_painter.ino: In function 'void getFileName(char*, uint8_t, uint8_t)':
    
    C:\Users\ThinkPad\Desktop\student\led\ArduinoUNO\Light-painter-master\Light-painter-master\Light_painter\Light_painter.ino:610:64: warning: default argument given for parameter 3 of 'void getFileName(char*, uint8_t, uint8_t)' [-fpermissive]
    
     void getFileName(char* fileName, uint8_t index, uint8_t ext = 0) {
    
                                                                    ^
    
    C:\Users\ThinkPad\Desktop\student\led\ArduinoUNO\Light-painter-master\Light-painter-master\Light_painter\Light_painter.ino:110:6: note: previous specification in 'void getFileName(char*, uint8_t, uint8_t)' here
    
     void getFileName(char* fileName, uint8_t index, uint8_t ext = 0);
    
          ^
    
    Szkic używa 22240 bajtów (68%) pamięci programu. Maksimum to 32256 bajtów.
    Zmienne globalne używają 1420 bajtów (69%) pamięci dynamicznej, pozostawiając 628 bajtów dla zmiennych lokalnych. Maksimum to 2048 bajtów.

     

    Ja tego niestety nie rozumiem i nie mam czasu zrozumieć, gdyż deadline mnie goni bardzo. Zadałem już pytanie do autora na githubie ale mam nadzieję, że ktoś z Was może wiedzieć o co chodzi. Będę bardzo wdzięczny.


  5. 14 minut temu, Chumanista napisał:

    Nie. Po pierwsze dokładność wynosząca 5 µg/m3 to około 10% naszej normy, czyli dosyć sporo. Oczywiście wykorzystując przetwornik 16 bitowy czułość by wzrosła ale równie dobrze można wtedy kupić droższy czujnik cyfrowy.

    Dodatkowo czytałem, że jest problem z powtarzalnością wyników i każdy z tych czujników podaje inne wyniki. Akurat temu się nie dziwię biorąc pod uwagę jego konstrukcję. Niestety w takim przypadku musisz dokonać kalibracji z miarodajnym źródłem, a to nie jest jest już takie proste.

    • Lubię! 2

  6. Dnia 1.11.2019 o 13:07, crbjsfso napisał:

    @Chumanista Tak, spokojnie. Po jednym czujniku na raz, zaczynałem od samego pomiaru temperatury, później doszła wilgotność, itd. Właśnie czekam na GP2Y1010AU0F i kilka innych z serii MQ. Następnie planuje zabrać się za serię PMS*, czujniki radonu, dozymetry, ect. Właściwie to wszystkie moje konstrukcje są w ciągłej fazie rozwojowej. Niestety mam dosyć mało czasu na swoje hobby dlatego może się wydawać, że idzie mi to bardzo opornie.

    Czujniki MQ to tak z mojego doświadczenia bardziej nadają się jako sygnalizatory występowania gazu (lub gazów bo niektóre reagują na kilka) niż jako mierniki stężenia. Tym bardziej MQ135 jest bardzo zawodny w przypadku określania jakości powietrza, gdyż jego odczyty są bardzo zależne od temperatury, wilgotności i zapylenia, co nie do końca przenosi się to na sama jakość powietrza. Próbowałem na tym zrobić sobie automatyczny sygnalizator tego czy sąsiedzi z dołu palą papierosy (niestety cały dym zaciąga do mojego mieszkania) i nie dało się tego odpowiednio skalibrować. Znalazłem gdzieś w necie pracę naukową gdzie napisali równanie kalibrujące wskazania w zależności od warunków atmosferycznych ale zawierał się chyba w 3 liniach na kartce A4 😉

    • Lubię! 2

  7. Dnia 20.09.2019 o 15:29, Kuba_k napisał:
    Dnia 20.09.2019 o 12:53, lukaszd82 napisał:

    ale nie jest to też 0-0.3V bo przy 1400ppm mam już napięcie ok. 1V co mierzyłem.

    Sprawdzę u siebie. Mam takie 3 z różnych źródeł (każdy pokazuje różny wynik). Jak kupowałem to pamiętam, że to było napisane w specyfikacji ale przy zakupach u chińczyków to różnie bywa 😉

    Mój błąd, rzeczywiście zaufałem specyfikacji z aliexpress. Natomiast max jaki da się z niego wyciągnąć to 4V

    3 godziny temu, lukaszd82 napisał:
    Dnia 20.09.2019 o 15:29, Kuba_k napisał:

    Nie rozumiem

    Sprawdzę u siebie. Mam takie 3 z różnych źródeł (każdy pokazuje różny wynik). Jak kupowałem to pamiętam, że to było napisane w specyfikacji ale przy zakupach u chińczyków to różnie bywa 😉

     

    Wskaźnik - wartość traktowana jest jako informacja o "jakości" powietrza. Nie zwracam uwagi na dokładne wartości "pomiaru". Zdaję cobie sprawę z ograniczonych możliwości MQ135, ale miałem 2 takie układy i postanowiłem gdzieś je umieścić.

    "Pomiar" jest traktowany jako informacja o konieczności wietrzenia w pomieszczeniu. wiadomo,. iż wysoka wartość - wietrzenie wskazane.

    Ok, teraz ogarniam. Napisane miałeś na ekranie poziom CO2, co jest niemożliwe do zmierzenia tym czujnikiem, dlatego było to mylące.


  8. 1 godzinę temu, lukaszd82 napisał:

    Adafruit ADS1115 - sam jeden element to 85zł. Ttymczasem ja zastosowałbym ESP32  za 49zł. Tym samym 70zł zostaje w kieszeni a masz 12- kanałowy przetwornik ADC i pomiarów można dodać jeszcze kilka a cena spada. Dodatkowo projekt się upraszcza delikatnie.

    Mogłem wziąć też 3x D1 Mini, byłoby jeszcze taniej 😉 Albo po prostu na Arduino + ESP01, kombinacji jest nieskończona ilość. 

    • Lubię! 1

  9. 2 godziny temu, lukaszd82 napisał:

    MQ135 służy jako "wskaźnik" a nie miernik.

    Nie rozumiem

    2 godziny temu, lukaszd82 napisał:

    ale nie jest to też 0-0.3V bo przy 1400ppm mam już napięcie ok. 1V co mierzyłem.

    Sprawdzę u siebie. Mam takie 3 z różnych źródeł (każdy pokazuje różny wynik). Jak kupowałem to pamiętam, że to było napisane w specyfikacji ale przy zakupach u chińczyków to różnie bywa 😉

     


  10. Dnia 11.01.2019 o 10:25, lukaszd82 napisał:

    Brak dzielnika napięcia na A0 (ESP ma pomiar 0-1V, MQ135 może dać do 5 V przy 5000 ppm), jednak zakładam, że nie będę miał stężenia ponad 1000ppm w domu.
    Później przetnę ścieżkę na PCB i dam dzielnik na analogu (co niestety zmniejszy dokładność pomiarów) lub zabezpieczę wejście analogowe diodą zenera.

    Wyjściowa Mq-135 jest od 0V do 0,3V, dlatego musisz sobie przeskalować wyniki 😉

    Imo ten czujnik nie nadaje się do wskazywania poziomu CO2, ponieważ oprócz tego jest czuły na wiele innych substancji oraz samo zanieczyszczenie powietrza (smog) wpływa na jego odczyty. Również temperatura i wilgotność powietrza ma spory wpływ na odczyty. 

    Dnia 11.01.2019 o 10:25, lukaszd82 napisał:

    . Gotowe oprogramowanie z wieloma wadami, w planach zmiana na własny soft i wysyłanie informacji na Cayenne IOT.

    Akurat soft możesz edytować do woli, a co do Cayenne: https://www.letscontrolit.com/forum/viewtopic.php?t=3722

    Powodzenia!

    • Lubię! 1

  11. 44 minuty temu, Gieneq napisał:

    To też mnie zaciekawiło. MQTT na RPi to fajna sprawa jak chcesz mieć więcej urządzeń, które mają ze sobą "czatować". Idea jest naprawdę podobna do pokojów/czatów w komunikatorach. W moim pierwotnym planie "super-ultra Iot" każda doniczka miała mieć własny kontroler z rurką wody i zasilaniem, wszystko spięte w mesh WiFi, ze serwerem MQTT na RPi i inne wodotryski. Niestety metodyka "Keep-it-Simple" znowu mnie dopadła i zrezygnowałem.

    Ja korzystam z Domoticza. Spina mi wszystkie zabawki ze sobą, dodatkowo możesz za pośrednictwem niego (ma apkę na androida) sterować urządzeniami ze sterowaniem przez http. 

    • Lubię! 1
×
×
  • Utwórz nowe...