Skocz do zawartości

Minitemp - gadający termometr (i coś więcej)


Pomocna odpowiedź

@99teki no niestety - większość bibliotek działa tylko z githuba bo arduinowscy paczkodzieje przespali jeden etap rozwoju, a np. IRremote czy AsyncHTTPSClient raczej nie ma szans jak ktoś nie zrobi działającego forka 😞

Link do komentarza
Share on other sites

(edytowany)

- proszę o podanie żródła biblioteki BMP280.

- znalazłem jakieś biblioteki dla BMP280 ale dalej mam 

"exit status 1

Compilation error: no matching function for call to 'BMP280::BMP280(uint8_t&)'

"

moduł thermo.cpp , line 47

Edytowano przez 99teki
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

Na razie 99.9 % działa na zwykłym devkicie i na xiao s3 (docelowe moduły). 80% działa na zdalnym czujniku, ale to kwestia dopasowania do C3 i Lolin Lite.

Nie udało mi sie uruchomić komunikacji z esp8266, ale chyba to oleję: różnica ceny najtańszego modułu 8266 i 32C3 jest z gatunku pomijalnych...

 

Link do komentarza
Share on other sites

No, bliżej końca softu - na razie leży tylko współpraca z TalkBackiem na Androidzie, ale on się gubi jeśli usuwa się kontener div zawierający zogniskowany element (button). Do dogrania.

Kodu na razie nie wrzucam, ale taka ciekawostka do wykorzystania w ESPAsyncWebServer. Często bowiem zachodzi potrzeba przekazania do przeglądarki jakiegoś tekstu w JSONie, Funkcja robi to eskejpując wszystkie podejrzane znaczki i dodając przy okazji cudzysłów na początku i na końcu:

static void jsonstr(AsyncResponseStream *stream, const char *txt)
{
    uint8_t znak;
    uint16_t znak16;
    stream->printf("\"");
    while (znak=*txt++) {
        if (znak == '"' || znak=='\'') {
            stream->printf("\\%c",znak);
            continue;
        }
        if (znak == '\n') {
            stream->printf("\\n");
            continue;
        }
        if (znak == '\\') {
            stream->printf("\\\\");
            continue;
        }
        if (znak >= 0x20 && znak <=0x7e) {
            stream->printf("%c",znak);
            continue;
        }
        if (!(znak & 0x80)) {
            stream->printf("\\u%04x",znak);
            continue;
        }
        int n;
        if ((znak & 0xe0) == 0xc0) n=1;
        else if ((znak & 0xf0) == 0xf0) n=2;
        else break;
        znak16 = znak & 0x1f;
        while (n--) {
            znak=*txt;
            if ((znak & 0xc0) != 0x80) break;
            znak16 = (znak16 << 6) | (znak & 0x3f);
            txt++;
        }
        stream->printf("\\u%04x",znak16);
    }
    stream->printf("\"");
}

Przykładowe wykorzystanie:

Chcemy otrzymać coś takiego:

{"idx":numerek,"content":treść}

Funkcja która zwraca to do przeglądarki może wyglądać tak:

static void handleGetCostam(AsyncWebServerRequest *request) {
    AsyncResponseStream *response = request->beginResponseStream("application/json");
    int jakis_indeks = 17;
    const char *jakis_tekst="To jest \"Jakiś tytuł\"\nze specjalnymi znakami \\"; 
    response->printf("{\"idx\":%d, \"content\":", jakis_indeks);
    jsonstr(response, jakis_tekst);
    response->printf("}");
    request->send(response);
}

Oczywiście można tu użyć jakichś zmiennych pobieranych np. z bazy danych, czujników lub preferencji!

No i tak jak swego czasu napisałem - urządzenie ma się zmieścić na płytce stykowej 170 dziur:

pogo1_ok..thumb.jpg.0c59d371fc76a31cda82612d9ccb6ff0.jpg

Urządzenie  oprócz obowiązkowych ESP32 i dekodera I2S zawiera czujnik BMP280 i odbiornik podczerwieni. Dla wygody przycisk reset został umieszczony na płytce, ale w gotowym urządzeniu musi znajdować się gdzieś w dostępnym miejscu na obudowie, a w jego miejsce można podłączyć wtyk dla zewnętrznego DHT22 lub DS18B20.

Oczywiście, można w prosty sposób podłączyć zegarek z eepromem:

pogo2_ok.thumb.jpg.6b0f71913949d7b6b2c5721d889e6919.jpg

Otwory w płytce są łatwo dostępne, wystarczą cztery męsko-żeńskie przewody. W gotowej konstrukcji zegarem powinien być umieszczony tak, aby można było wymienić baterię bez konieczności rozbierania całego urządzenia.

Oczywiście płytka stykowa to nie jest najlepsze rozwiązanie - chciałem tylko pokazać że można to wykonać prawie bez lutowania (trzeba wlutować piny do S3, wzmacniacza i czujnika BMP oraz podlutować jakieś przewody do padów na module S3 potrzebne do podłączenia resetu). Ukońćzenie kursu lutowania na Forbocie powinno wystarczyć 🙂

Link do komentarza
Share on other sites

Kilka pytań co do wyświetlania wyników w przeglądarce, ile całościowo zajmuje miejsca w pamięci strona ze stylami, js i całą resztą, pisałeś to ręcznie czy korzystałeś z jakiegoś narzędzia do projektowania www, jak z responsywnością i czy działa to jak web app?

Link do komentarza
Share on other sites

 

25 minut temu, _LM_ napisał:

ile całościowo zajmuje miejsca w pamięci strona ze stylami, js i całą resztą

$ ls -l www
razem 48
-rw-rw-r-- 1 ethanak ethanak  2134 sie  6 14:46 calendar.html
-rw-rw-r-- 1 ethanak ethanak  2309 sie  6 14:01 events.html
-rw-rw-r-- 1 ethanak ethanak  1910 lip 24 09:11 favicon.shtml
-rw-rw-r-- 1 ethanak ethanak  2171 lip 25 10:18 index_ap.shtml
-rw-rw-r-- 1 ethanak ethanak  7186 sie  5 18:24 index.shtml
-rw-rw-r-- 1 ethanak ethanak  2771 sie  5 11:32 pogodynka.css
-rw-rw-r-- 1 ethanak ethanak 19083 sie  6 18:09 pogodynka.js

To ląduje we flashu (rozszerzenie shtml jest trochę mylące, nie zwracaj uwagi). Można by było trochę przyoszczędzić ale jakoś nie miałem motywacji 🙂 Zawsze mogę to zgzipować i serwować gzipy, przeglądarka sobie poradzi, tylko za dużo nie oszczędzę. W css siedzi sobie jeszcze coś niepotrzebnego, ale to kilkadziesiąt bajtów do usunięcia.

Pisałem wszystko ręcznie. Działa jak web app (cokolwiek byś miał na myśli), z responsywnością nie ma problemu (to przecież działa na lokalnej sieci).


 

Link do komentarza
Share on other sites

SHTML? Co to jest? Tj: da się wygooglować no ale wolę z pierwszej ręki wiadomości. Web app może źle to napisałem, chodzi o to czy instalowana jest aplikacja w przeglądarce 

Link do komentarza
Share on other sites

4 minuty temu, _LM_ napisał:

czy instalowana jest aplikacja w przeglądarce

Nie, nic nie jest instalowane. Wchodzisz na stronę i jedziesz.

shtml to oryginalnie oznaczenie starej technologii tworzenia dynamicznych stron wyłącznie za pomocą Apacza, bez żadnych php. Użyłem tego rozszerzenia bo edytor traktuje to jako html, a skrypt który automatycznie robi z tego plik w C++ wie, że to nie jest zwykły tekst i nie tworzy automatycznego handlera.

Link do komentarza
Share on other sites

(edytowany)

Dzięki za odp. Jak widzę że cały ten serwis zajmuje około 30kB to wiem że jeszcze sporo mam do nauczenia się. 

Edytowano przez _LM_
Link do komentarza
Share on other sites

Jutro wrzucę kod (jeśli chcesz binarkę to mam dwie wersje, dla zwykłego DevKit i dla Xiao S3, będziesz mógł wypróbować bez szukania bibliotek tylko napisz która potrzebna). Zajrzyj do katalogu www i do server.cpp

Link do komentarza
Share on other sites

(edytowany)

Dzięki, po prostu potrzebuję odniesienia, nie lubię tych htmlów cssów jsów i innych podobnych. Potrzebowałem wiedzieć ile powinna taka strona www zajmować pamięci. Narzędzie którego używam do generowania tworzy kolosy od 100kB w górę. 

Edytowano przez _LM_
Link do komentarza
Share on other sites

No więc taka przedostatnia (chyba) wersja. Działa normalnie, jest jeszcze parę literówek w komunikatach i trochę za dużo pisze po serialu - ale w sumie wersja używalna. Naa XIAO S3 działa z 16-bitowym głosem Mbroli (instrukcja przy następnej okazji).

Biblioteka BMP280 to https://github.com/dvarrel/BMP280.git

A kod (na razie bez zdalnego termometru): Pogotest3.zip

  • Lubię! 1
Link do komentarza
Share on other sites

(edytowany)

Zewnętrzny termometr chyba ukończony - wygląda tak:

extemp.thumb.jpg.b34b02821ebbe849d34efbd0c749221a.jpg

 

Trochę duży, ale to kwestia zastosowanego akumulatora - w moim przypadku 900mAh. Pewnie można znaleźć mniejszy - no, ale to ma być urządzenie do pokazu i prawdopodobnie do zdemontowania.

Użyłem płytki XIAO ESP32C3 ze względu na wbudowaną ładowarkę. Tzw. "schemat" (a właściwie parę kresek):

extermc3a.thumb.png.920cb240dcfd3bbd6a019681006621eb.png

Zamiast DHT22 można użyć DS18B20 - nie wymaga to żadnych zmian, jedynie po podłączeniu do terminala serial należy odpowiednio ustawić typ czujnika. Wyłącznik nie jest ujęty na schemacie - po prostu odłącza akumulator. Rezystory 0805 po prostu wzięte z szuflady (akurat takie miałem) i wlutowane bezpośrednio na płytce XIAO.

Kod trochę prowizoryczny (raczej do poczytania), ale na oko działający: Pogoext.zip

Edytowano przez ethanak
  • Lubię! 1
Link do komentarza
Share on other sites

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

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.